APFS系統(tǒng)

何為APFS

在iOS 10.3中,蘋果新增了APFS新文件系統(tǒng),最早在2016年WWDC大會(huì)上公布。APFS是Apple File System的簡(jiǎn)稱,用于替代目前所使用的HFS+格式。APFS對(duì)HFS的所有變體進(jìn)行了統(tǒng)一,這是Apple從底層代碼開始從零打造的全新文件系統(tǒng)。與使用32位文件ID的HFS+不同,APFS可支持64位索引節(jié)點(diǎn)(Inode)編號(hào),借此一個(gè)卷最多可存儲(chǔ)超過(guò)900億億個(gè)文件。HFS+只能同時(shí)對(duì)整個(gè)存儲(chǔ)設(shè)備的文件系統(tǒng)進(jìn)行初始化,APFS提供了一種可擴(kuò)展存儲(chǔ)塊分配程序(Extensible block allocator),可對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行延遲初始化(Lazy initialization),進(jìn)而大幅改善大容量卷的性能。

APFS針對(duì)閃存/SSD存儲(chǔ)進(jìn)行優(yōu)化(但依然可用于傳統(tǒng)機(jī)械硬盤),提供了更強(qiáng)大的加密、寫入時(shí)復(fù)制(Copy-on-write)元數(shù)據(jù)、空間分享、文件和目錄克隆、快照、目錄大小快速調(diào)整、原子級(jí)安全存儲(chǔ)基元(Atomic safe-save primitives),以及改進(jìn)的文件系統(tǒng)底層技術(shù)。此外APFS還包含其他改善和新功能,例如稀疏文件、改進(jìn)的TRIM操作,內(nèi)建對(duì)擴(kuò)展屬性的支持等。

安全與隱私是APFS的設(shè)計(jì)基礎(chǔ)。Apple的很多設(shè)備和操作系統(tǒng)早已具備加密功能,OS X 10.7 Lion開始提供全磁盤加密功能;iOS 4開始可通過(guò)專用數(shù)據(jù)保護(hù)技術(shù)將每個(gè)文件使用一個(gè)專用密鑰進(jìn)行加密。APFS對(duì)這兩種功能進(jìn)行整合,為文件系統(tǒng)元數(shù)據(jù)提供了一種統(tǒng)一的加密模式。APFS支持三種模式的加密:不加密;適用于元數(shù)據(jù)和用戶數(shù)據(jù)的單密鑰加密;以及適用于元數(shù)據(jù)、文件,甚至文件中特定部分的多密鑰加密。多密鑰加密功能,內(nèi)置有針對(duì)每個(gè)文件的密鑰,其針對(duì)敏感元數(shù)據(jù)也都有獨(dú)立的密鑰,在確??煽啃缘幕A(chǔ)上優(yōu)化性能。多密鑰加密可確保哪怕設(shè)備物理安全受到威脅,依然可以保障用戶數(shù)據(jù)的完整性。取決于具體硬件,APFS加密可使用AES-XTS或AES-CBC算法。

這種加密機(jī)制還實(shí)現(xiàn)了一個(gè)額外的功能:更為快速的數(shù)據(jù)擦除。通常情況下當(dāng)用戶從設(shè)備中刪除文件后,可以通過(guò)市面上提供的很多(免費(fèi)或收費(fèi)的)反刪除軟件找回刪掉的內(nèi)容。為避免這種情況,以往如果需要?jiǎng)h除包含機(jī)密信息的文件,或需要將存儲(chǔ)過(guò)私密數(shù)據(jù)的設(shè)備退役給他人使用,必須首先使用抹掉功能擦除存儲(chǔ)設(shè)備,并可能要將這一過(guò)程執(zhí)行多遍。取決于存儲(chǔ)設(shè)備容量,整個(gè)過(guò)程將耗費(fèi)極多時(shí)間。對(duì)于使用APFS文件系統(tǒng)的存儲(chǔ)設(shè)備,在啟用加密功能后,安全擦除的過(guò)程將變得大為簡(jiǎn)便和快捷,不再需要耗費(fèi)大量時(shí)間多次給存儲(chǔ)設(shè)備填充隨機(jī)數(shù)據(jù),只需要?jiǎng)h除加密所用的密鑰即可。

APFS包含一個(gè)名為“空間共享”的新功能,借助該功能,多個(gè)文件系統(tǒng)可以共享同一個(gè)物理卷上的同一塊底層可用空間。也就是說(shuō),設(shè)備上的一個(gè)APFS“容器”內(nèi)部可以包含多個(gè)“卷”(文件系統(tǒng))。HFS+需要為每個(gè)文件系統(tǒng)預(yù)先分配固定大小的容量,這種做法較為“僵硬”,而APFS的空間共享功能可以讓用戶在無(wú)需重分區(qū)的情況下動(dòng)態(tài)、靈活地?cái)U(kuò)大或縮小卷容量。在這樣的設(shè)計(jì)下,APFS容器內(nèi)的每個(gè)卷都會(huì)顯示同等的可用空間容量,而所顯示容量會(huì)等同于該容器的可用存儲(chǔ)空間總量。例如,假設(shè)有個(gè)容量100GB的APFS容器,其中包含已用10GB容量的卷A和已用20GB容量的卷B,卷A和卷B都會(huì)顯示自己有70GB(100GB-10GB-20GB)的可用容量。

現(xiàn)代化的文件系統(tǒng)往往會(huì)通過(guò)壓縮和去重(Deduplication)等方式減小文件占用的空間量。壓縮很好理解,去重是指找出大量文件中相同的數(shù)據(jù)塊,并只將這樣的塊存儲(chǔ)一次,在訪問(wèn)文件時(shí),會(huì)根據(jù)實(shí)際情況動(dòng)態(tài)“拼裝”出最終的文件。這樣的功能最適合保存大量用戶文件或大量虛擬機(jī)映像的服務(wù)器環(huán)境。APFS可以用恒定的速度對(duì)多個(gè)文件和目錄創(chuàng)建副本。舉例來(lái)說(shuō),如果要在同一個(gè)文件系統(tǒng)(或同一個(gè)容器)內(nèi)部復(fù)制文件,實(shí)際上并不需要為數(shù)據(jù)創(chuàng)建副本,只需要對(duì)文件的元數(shù)據(jù)進(jìn)行適當(dāng)?shù)母戮涂梢宰尨疟P上存儲(chǔ)的數(shù)據(jù)實(shí)現(xiàn)“共享”,此時(shí)相同的文件“實(shí)際體積”不變,但產(chǎn)生了兩個(gè)副本,對(duì)任何一個(gè)副本進(jìn)行改動(dòng)則需要為其分配新的存儲(chǔ)空間(這種方式也叫做“寫入時(shí)復(fù)制”)。APFS中復(fù)制的文件實(shí)際上只是對(duì)文件創(chuàng)建了輕量級(jí)克隆,實(shí)際數(shù)據(jù)并沒(méi)有重復(fù)保存,底層設(shè)備的故障會(huì)導(dǎo)致所有“副本”受損。

APFS專門針對(duì)閃存進(jìn)行了優(yōu)化。SSD雖然可以模擬傳統(tǒng)機(jī)械硬盤的“塊”,但底層技術(shù)與機(jī)械硬盤截然不同。SSD底層的管理工作是由一種名為閃存轉(zhuǎn)換層(FTL,F(xiàn)lash Translation Layer)的軟件負(fù)責(zé)處理的。FTL與文件系統(tǒng)極為類似,可以在塊地址和介質(zhì)內(nèi)部的位置之間創(chuàng)建虛擬映射(轉(zhuǎn)換)。整個(gè)堆棧,包括SSD、FTL,以及文件系統(tǒng)都由Apple控制,可以更有針對(duì)性地對(duì)不同組件進(jìn)行優(yōu)化。

此外APFS還提供了對(duì)TRIM的支持。TRIM是ATA協(xié)議中的一個(gè)命令,可以讓文件系統(tǒng)告訴SSD(其實(shí)是指示SSD中的FTL)某些空間是空閑的??捎每臻g越多,SSD的性能表現(xiàn)會(huì)越好,甚至大部分SSD所擁有的存儲(chǔ)容量會(huì)超過(guò)標(biāo)稱值。假設(shè)有一個(gè)1TB容量的SSD,顯示的可用空間總量為931GB。在有更多可用空間的情況下,F(xiàn)TL可以犧牲空間利用率換回更高性能和更長(zhǎng)壽命。但TRIM的問(wèn)題在于,只有在存在可用空間的情況下這個(gè)功能才會(huì)有用,如果磁盤即將裝滿,TRIM不會(huì)為你帶來(lái)任何效果。

性能方面,APFS的延遲也有了大幅改善。APFS可以通過(guò)I/O QoS(服務(wù)質(zhì)量)對(duì)不同的訪問(wèn)請(qǐng)求劃分優(yōu)先級(jí),將用戶可以立刻察覺(jué)的操作和后臺(tái)活動(dòng)區(qū)分對(duì)待。計(jì)算機(jī)系統(tǒng)在任何時(shí)候都可能出故障:崩潰、Bug、斷電等…… 文件系統(tǒng)必須能夠預(yù)見(jiàn)到這種情況并從故障中順利恢復(fù)。遇到這種情況,以前可能需要嘗試著用專門的工具在系統(tǒng)啟動(dòng)前檢查并修復(fù)文件系統(tǒng)(例如使用fsck)。較為現(xiàn)代化的系統(tǒng)會(huì)使用某些“始終一致”的格式,或?qū)⒉灰恢碌目赡鼙M量降低,以避免耗費(fèi)大量時(shí)間執(zhí)行完整的fsck檢查。例如ZFS就可以在磁盤上構(gòu)建一個(gè)新狀態(tài),然后通過(guò)一次原子操作從之前的狀態(tài)以原子級(jí)方式過(guò)度到新狀態(tài)。

校驗(yàn)是一種針對(duì)數(shù)據(jù)進(jìn)行的摘要會(huì)匯總,可用于檢測(cè)(和糾正)數(shù)據(jù)錯(cuò)誤。APFS會(huì)對(duì)自己的元數(shù)據(jù),而非用戶數(shù)據(jù)進(jìn)行校驗(yàn)。這種對(duì)元數(shù)據(jù)進(jìn)行校驗(yàn)的做法理由非常充分:大部分元數(shù)據(jù)都與用戶數(shù)據(jù)無(wú)關(guān)(因此校驗(yàn)不會(huì)耗費(fèi)太多存儲(chǔ)空間),而丟失元數(shù)據(jù)會(huì)有極大可能造成用戶數(shù)據(jù)的丟失。距離來(lái)說(shuō),假設(shè)某個(gè)頂層目錄的元數(shù)據(jù)出錯(cuò),那么磁盤上的所有數(shù)據(jù)都有可能無(wú)法訪問(wèn)。也正是因此,ZFS會(huì)對(duì)元數(shù)據(jù)創(chuàng)建副本(甚至對(duì)頂層元數(shù)據(jù)創(chuàng)建三重副本)。

但是完全不對(duì)用戶數(shù)據(jù)進(jìn)行校驗(yàn),這種做法似乎更有趣。大部分可支持APFS的Apple設(shè)備中的SSD實(shí)際上是由多個(gè)或多或少相互獨(dú)立的NAND芯片組成的。Apple設(shè)備的存儲(chǔ)具備強(qiáng)大的ECC糾錯(cuò)保護(hù)。NAND閃存SSD和磁介質(zhì)機(jī)械硬盤都可以使用冗余數(shù)據(jù)檢測(cè)和糾正錯(cuò)誤。NAND會(huì)使用額外的數(shù)據(jù),例如每4KB頁(yè)使用額外的128字節(jié)數(shù)據(jù),借此檢測(cè)和糾正數(shù)據(jù)錯(cuò)誤。設(shè)備本身的誤碼率已經(jīng)足夠低,可以認(rèn)為設(shè)備整個(gè)生命周期內(nèi)都不會(huì)出現(xiàn)錯(cuò)誤。還有一些設(shè)備錯(cuò)誤可以通過(guò)文件系統(tǒng)的冗余機(jī)制避免。SSD中包含大量組件,而大部分消費(fèi)類產(chǎn)品中的SSD很少包含端到端的ECC保護(hù),因此可能導(dǎo)致數(shù)據(jù)傳輸過(guò)程中出現(xiàn)錯(cuò)誤。SSD固件中也可能包含導(dǎo)致數(shù)據(jù)丟失的Bug。

覆蓋寫入數(shù)據(jù)是最容易造成不一致的操作。如果文件系統(tǒng)需要覆寫文件的多個(gè)區(qū)塊,有一定可能遇到一些區(qū)塊已經(jīng)代表新狀態(tài),但一些區(qū)塊依然代表舊的狀態(tài)。為避免這種問(wèn)題,可以使用上文提到的寫入時(shí)復(fù)制這一方式,首先分配新區(qū)塊,隨后釋放舊區(qū)塊使其可被再次使用,而不需要就地修改數(shù)據(jù)。APFS實(shí)施了一種“全新的寫入時(shí)復(fù)制元數(shù)據(jù)體系”,這種方式的新穎之處在于,APFS并未使用ZFS機(jī)制復(fù)制已更改用戶數(shù)據(jù)的所有元數(shù)據(jù),只需要對(duì)文件系統(tǒng)結(jié)構(gòu)進(jìn)行一次原子更新即可實(shí)現(xiàn)。

APFS系統(tǒng)提升了蘋果的iOS、macOS、watchOS及tvOS等平臺(tái)的文件完整性與安全性。APFS系統(tǒng)啟用后,大大縮減了系統(tǒng)的體積,升級(jí)到iOS 10.3系統(tǒng)后,可以使內(nèi)置空間多出1GB的空間,對(duì)于老型號(hào)的機(jī)器是個(gè)很好的消息。

根據(jù)Apple在WWDC上的介紹,APFS的核心設(shè)計(jì)目標(biāo)是將數(shù)據(jù)加密作為頭等要?jiǎng)?wù),為現(xiàn)代化備份方式提供快照功能。但APFS也有些不盡如人意的地方,如:APFS不針對(duì)用戶數(shù)據(jù)進(jìn)行校驗(yàn),沒(méi)有提供數(shù)據(jù)冗余機(jī)制;無(wú)法用于啟動(dòng)磁盤,文件和目錄名稱大小寫敏感,無(wú)法用于Time Machine、FileVault或Fusion驅(qū)動(dòng)器;APFS文件系統(tǒng)的卷無(wú)法被OS X 10.11 Yosemite以及更早的版本識(shí)別等。但技術(shù)總是進(jìn)步的,誰(shuí)能說(shuō)這些問(wèn)題不會(huì)在不久的將來(lái)解決呢?我們拭目以待。

早期的文件系統(tǒng)HFS+和UFS

文件系統(tǒng)除了讓用戶供穩(wěn)定地存放文件這一目標(biāo)以外,還是各項(xiàng)操作系統(tǒng)功能的基礎(chǔ)。Mac OS X每個(gè)大發(fā)行版都要增加數(shù)百項(xiàng)新功能,許多新功能嚴(yán)重依賴于文件系統(tǒng)的實(shí)現(xiàn)。

UFS

UFS是經(jīng)典的Unix文件系統(tǒng),HFS+和UFS文件系統(tǒng)同時(shí)被引入早期的Mac OS X。在Unix系統(tǒng)早期,文件系統(tǒng)被稱為FS。FS包括啟動(dòng)塊、超級(jí)塊(處于硬盤分區(qū)開頭用來(lái)保存文件系統(tǒng)信息)、inodes(索引節(jié)點(diǎn))及數(shù)據(jù),但FS會(huì)導(dǎo)致抖動(dòng)等一系列問(wèn)題。為了解決這些問(wèn)題,產(chǎn)生了FFS(Fast File System)。FFS把先前整塊的磁盤文件系統(tǒng)分為小塊,每塊包含自已的索引節(jié)點(diǎn)和數(shù)據(jù),因而增加了文件的局部性,減少了尋道時(shí)間。Unix系統(tǒng)的各BSD分支(FreeBSD、OpenBSD、NetBSD及DragonFlyBSD)在FFS文件系統(tǒng)上增加各種擴(kuò)展,但這些擴(kuò)展往往不互相兼容,卻又都使用和原版同樣的塊大小和數(shù)據(jù)塊寬度,因此可以在一個(gè)操作系統(tǒng)上能對(duì)另一操作系統(tǒng)的文件系統(tǒng)執(zhí)行只讀操作。故它有了一個(gè)更廣泛的稱謂——UFS(Unix File System,即Unix文件系統(tǒng))。

后來(lái),UFS提供了簡(jiǎn)單的日志功能。在檔案系統(tǒng)發(fā)生變化時(shí),先把相關(guān)的信息寫入一個(gè)被稱為日志的區(qū)域,然后再把變化寫入主文件系統(tǒng)的文件系統(tǒng)。在文件系統(tǒng)發(fā)生故障(如內(nèi)核崩潰或突然停電)時(shí),日志文件系統(tǒng)更容易保持一致性,并且可以較快恢復(fù)。

BSD的Soft Update功能,保證了計(jì)算機(jī)掉電或系統(tǒng)崩潰時(shí),通過(guò)使元數(shù)據(jù)按依賴順序更新來(lái)確保磁盤上總的文件系統(tǒng)保持一致的實(shí)現(xiàn)機(jī)制。Soft Update的目標(biāo)和日志類似,實(shí)現(xiàn)代價(jià)比日志輕量許多,但卻需要引入一個(gè)后臺(tái)FSCK檢查?;趯?duì)UFS的一項(xiàng)改進(jìn),為Soft Update加入了日志功能,并消除了對(duì)FSCK的依賴。

先前,Unix文件系統(tǒng)的訪問(wèn)控制是非常簡(jiǎn)單的,其權(quán)限管理分為三個(gè)不同的類別:用戶、同組用戶以及其他用戶,對(duì)每個(gè)類別,Unix文件系統(tǒng)提供讀、寫、執(zhí)行三種權(quán)限的管理。這樣的許可管理過(guò)于粗糙,無(wú)法指定某一用戶訪問(wèn)的權(quán)限,也無(wú)法指定更為細(xì)致的權(quán)限內(nèi)容(例如準(zhǔn)許對(duì)一文件實(shí)行刪除操作)。為解決這個(gè)問(wèn)題,UFS增加了ACL訪問(wèn)控制表功能(Access Control Lists),訪問(wèn)控制表被增加到文件系統(tǒng)中,使用以存取控制矩陣為基礎(chǔ)的存取控制方法。存取控制串列描述每一個(gè)文件對(duì)象各自的存取控制,并記錄可對(duì)此物件進(jìn)行存取的所有主體對(duì)對(duì)象的權(quán)限。總之,UFS與時(shí)俱進(jìn),不斷增加新的功能。

Mac OS X起源于NeXTSTEP,因?yàn)榛贐SD,所以自然也使用UFS。

HFS+

在引入U(xiǎn)FS的同時(shí),Mac OS 還有個(gè)文件系統(tǒng)HFS,HFS誕生于1985年,為了實(shí)現(xiàn)Mac OS的現(xiàn)代化,在HFS的基礎(chǔ)上,加入現(xiàn)代文件系統(tǒng)所必需的新功能,如大文件支持、Unicode文件名支持、長(zhǎng)文件名支持、32位文件映射表支持等,同時(shí)也把HFS項(xiàng)目原本的Mac使用的68K處理器匯編碼改寫成C代碼。即改進(jìn)的HFS+文件系統(tǒng)。

HFS+根植Mac OS,HFS+是對(duì)HFS的擴(kuò)展,故HFS+支持Mac OS至Mac OS X的平滑過(guò)渡,所以Mac OS X一直默認(rèn)使用HFS+,但當(dāng)時(shí)的UFS提供比HFS+更先進(jìn)的功能。Mac OS X 10.2.2開始,HFS+支持日志,帶日志功能的HFS+(被稱為HFSJ,即HFS+ volume with journal)成為默認(rèn)設(shè)置。之后增加了名件名、目錄名區(qū)分大小寫及Unicode 3.2的支持。Mac OS X 10.4中,HFS+更是增加了ACL訪問(wèn)控制表功能,提供更復(fù)雜的對(duì)傳統(tǒng)Unix文件系統(tǒng)權(quán)限的擴(kuò)展。在Mac OS X 10.5之后HFS+成為唯一正式的Mac OS X系統(tǒng),HFS+提供的功能也已超越UFS。

在逐步的優(yōu)化中,HFS+愈走愈遠(yuǎn)。

  • FileVault可以用來(lái)加密用戶文件,因此用戶主目錄被保存在一個(gè)HFS+文件系統(tǒng)加密鏡像中。Mac OS X 10.7提出了FileVault2,能加密整個(gè)磁盤而不是一個(gè)用戶目錄。

  • Spotlight桌面搜尋搜索功能,能讓用戶對(duì)整個(gè)磁盤系統(tǒng)進(jìn)行快速搜尋、隨打即顯。這項(xiàng)功能要求文件系統(tǒng)提供任意長(zhǎng)度文件元數(shù)據(jù)(metadata)的支持。

  • BootCamp需要時(shí)時(shí)調(diào)整系統(tǒng)主分區(qū)的大小,來(lái)空出磁盤空間給Windows,因此,HFS+又需要支持動(dòng)態(tài)分區(qū)大小調(diào)整。

  • Time Machine,是蘋果公司所推出備份的工具程序,Time Machine對(duì)于修改過(guò)的文件會(huì)在備份盤上保存一個(gè)新拷貝,而對(duì)于不變的內(nèi)容,僅在備份盤上存一個(gè)指向先前文件的硬鏈接。因此每一次快照只保存改動(dòng)的文件,而別的文件只保存占用空間很少的硬鏈接。但Unix一般只支持文件的硬鏈接而不支持目錄的硬鏈接。因此HFS+在這點(diǎn)上走得比Unix文件系統(tǒng)更遠(yuǎn),提供了對(duì)于目錄的硬鏈接支持。

  • HFS+支持文件系統(tǒng)壓縮,使得安裝后占用比Mac OS X 10.5少得多的空間。

但,HFS+并不完美。

不完美的文件系統(tǒng)

經(jīng)過(guò)長(zhǎng)期發(fā)展,HFS+針對(duì)不同類型的設(shè)備衍生出不同功能的多種分支,但它畢竟太老、太混亂了。更重要的是,該文件系統(tǒng)不具備當(dāng)今大多數(shù)企業(yè)所需要的一些基本功能,例如納秒級(jí)時(shí)間戳、校驗(yàn)、快照、稀疏文件等。從1998年4GB容量的傳統(tǒng)HDD機(jī)械硬盤,到現(xiàn)在TB規(guī)模的SSD固態(tài)硬盤,HFS+已經(jīng)招架不住存儲(chǔ)領(lǐng)域的大量改變和創(chuàng)新。

HFS+基于B-樹實(shí)現(xiàn),當(dāng)查找B-樹中未使用的節(jié)點(diǎn)時(shí),HFS+只能每次處理16位,原因是老Mac使用的Motorola的68K芯片原生支持16位的數(shù)據(jù)操作。但不管是PowerPC還是Intel,寄存器都支持256位寬的寄存器。

HFS+的元數(shù)據(jù)(metadata)都以大字節(jié)序保存,原因是Motorola的68k和后來(lái)Mac使用的PowerPC都使用大字節(jié)序。但經(jīng)過(guò)Intel遷移后,當(dāng)今的Mac都使用Intel芯片,而Intel芯片是使用小字節(jié)序的。因此每當(dāng)數(shù)據(jù)讀取或存入時(shí),還要經(jīng)過(guò)小字節(jié)序和大字節(jié)序的轉(zhuǎn)換。遠(yuǎn)古時(shí)期磁盤很慢,計(jì)算機(jī)處理器的速度也很低,因此進(jìn)行一次磁盤操作會(huì)占用較多的時(shí)間,HFS+的時(shí)間分辨率為一秒,但當(dāng)今的磁盤、處理器處理一次文件系統(tǒng)操作的時(shí)間遠(yuǎn)小于一秒,因此所有主流磁盤文件系統(tǒng)的時(shí)間分辨率都是一至數(shù)百納秒級(jí)別的。

大字節(jié)序:把高有效位放在低地址段,例如在按字節(jié)尋址的存儲(chǔ)器中往地址 0x0001 存放值 0x12345678,在存儲(chǔ)器中為

 地址             數(shù)值
 0x0004        0x78
 0x0003        0x56
 0x0002        0x34
 0x0001        0x12

小字節(jié)序:把低有效位放在低地址段,例如在按字節(jié)尋址的存儲(chǔ)器中往地址 0x0001 存放值 0x12345678,在存儲(chǔ)器中為

 地址             數(shù)值
 0x0004        0x12
 0x0003        0x34
 0x0002        0x56
 0x0001        0x78

現(xiàn)在主流的CPU,intel系列的是采用的little endian的格式存放數(shù)據(jù)的。

HFS+的元數(shù)據(jù)有全局鎖,同一時(shí)間只有一個(gè)進(jìn)程可以訪問(wèn)更新文件系統(tǒng)。在單核處理器連手機(jī)平板都較少見(jiàn)到的當(dāng)今,這種設(shè)計(jì)顯得很幼稚。

HFS+亦沒(méi)有稀疏文件的支持。例如我們?cè)赟QL中建立了一個(gè)數(shù)據(jù)庫(kù),SQL分配了10GB的文件給這個(gè)數(shù)據(jù)庫(kù),并且在文件頭和文件尾寫上一些字節(jié)的數(shù)據(jù)。而由于我們還沒(méi)有給這個(gè)數(shù)據(jù)庫(kù)添加新的數(shù)據(jù),所以這10GB的文件除了頭尾外其他字節(jié)都為0?,F(xiàn)代的文件系統(tǒng)基本都支持稀疏文件,也就是說(shuō),當(dāng)處理這個(gè)數(shù)據(jù)庫(kù)操作時(shí),事實(shí)上往磁盤寫入的數(shù)據(jù)只有那文件頭和文件尾的若干字節(jié)。而HFS+則需要把那些0也寫上,因此會(huì)完整寫入10GB的數(shù)據(jù),耗費(fèi)長(zhǎng)得多的時(shí)間。

此外,HFS+不具備元數(shù)據(jù)校驗(yàn)功能、快照功能、寫入時(shí)復(fù)制功能、就地執(zhí)行功能、邏輯卷管理功能等很多現(xiàn)代磁盤系統(tǒng)所具備的功能,也不能動(dòng)態(tài)調(diào)整文件塊大小。這些功能的加入并不容易。這使得用戶數(shù)據(jù)時(shí)時(shí)處于風(fēng)險(xiǎn)之中。例如由于因?yàn)閿嚯?、?nèi)核崩潰等原因,文件系統(tǒng)上寫到一半的數(shù)據(jù),小則導(dǎo)致個(gè)別文件損壞,大則導(dǎo)致整個(gè)文件系統(tǒng)崩潰。在生產(chǎn)領(lǐng)域,這樣不可靠的文件系統(tǒng),很有可能帶來(lái)致命的災(zāi)難。

快照功能可將文件系統(tǒng)的狀態(tài)“固定”在創(chuàng)建快照的那一刻,并可在保留固定狀態(tài)的同時(shí)繼續(xù)訪問(wèn)和修改文件系統(tǒng)。這種技術(shù)可以只記錄新增或改動(dòng)的數(shù)據(jù)塊,因此可以為文件系統(tǒng)創(chuàng)建多個(gè)快照,而無(wú)需擔(dān)心會(huì)占用大量存儲(chǔ)空間。備份工具(例如Time Machine)通常會(huì)使用該功能記錄自從上次備份之后文件系統(tǒng)的改動(dòng)情況,并可用于在不打斷用戶操作的前提下對(duì)數(shù)據(jù)進(jìn)行更為高效的備份。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基于B樹的HFS+文件系統(tǒng) 盡管如今的操作系統(tǒng)在驅(qū)動(dòng)程序的幫助下支持任何的文件系統(tǒng),但是每一個(gè)操作系統(tǒng)都會(huì)有一個(gè)自...
    CoderKo1o閱讀 3,312評(píng)論 0 4
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,781評(píng)論 8 183
  • 20160701 萊迪寫道,在你運(yùn)動(dòng)的時(shí)候,你不僅會(huì)感覺(jué)更好,而且你的大腦會(huì)以更好的狀態(tài)運(yùn)作:你學(xué)得更快,認(rèn)知靈活...
    eternity5閱讀 212評(píng)論 0 0
  • 卡特爾16相人格測(cè)試,又叫16PF,這個(gè)測(cè)試就是用人格特質(zhì)理論編織出來(lái)的。 人格特質(zhì)理論 所謂人格特質(zhì)就是指人擁有...
    蘇千千0046閱讀 254評(píng)論 0 0
  • 合理膳食搭配的美味營(yíng)養(yǎng)餐,補(bǔ)充維生素以及微量元素五谷雜糧的加點(diǎn),給寶寶們冬日的健康助力! 我們的美食全部純手工哦~...
    Emmi米閱讀 553評(píng)論 0 1

友情鏈接更多精彩內(nèi)容