Apple新發(fā)布的APFS文件系統(tǒng)對(duì)用戶(hù)意味著什么

責(zé)任編輯:editor004

作者:大愚若智

2016-07-08 11:49:11

摘自:INFOQ

2016年WWDC大會(huì)上,Apple除了公布watchOS、tvOS、macOS以及iOS等一系列系統(tǒng)和軟件更新外,還公布了一個(gè)名為APFS(Apple File System)的文件系統(tǒng)。

2016年WWDC大會(huì)上,Apple除了公布watchOS、tvOS、macOS以及iOS等一系列系統(tǒng)和軟件更新外,還公布了一個(gè)名為APFS(Apple File System)的文件系統(tǒng)。

這一全新文件系統(tǒng)專(zhuān)門(mén)針對(duì)閃存/SSD進(jìn)行優(yōu)化(但依然可用于傳統(tǒng)機(jī)械硬盤(pán)),提供了更強(qiáng)大的加密、寫(xiě)入時(shí)復(fù)制元數(shù)據(jù)、空間分享、文件和目錄克隆、快照、目錄大小快速調(diào)整、原子級(jí)安全存儲(chǔ)基元,以及改進(jìn)的文件系統(tǒng)底層技術(shù),將全面應(yīng)用于該公司旗下所有設(shè)備中。

  為什么不繼續(xù)使用HFS+?

HFS誕生于1985年,隨后在1998年發(fā)布的4GB硬盤(pán)版本G3 PowerMac中引入了改進(jìn)的HFS+文件系統(tǒng)。從1998年4GB容量的傳統(tǒng)HDD機(jī)械硬盤(pán),到現(xiàn)在TB規(guī)模的SSD固態(tài)硬盤(pán),HFS+已經(jīng)招架不住存儲(chǔ)領(lǐng)域的大量改變和創(chuàng)新。

經(jīng)過(guò)長(zhǎng)期發(fā)展,HFS+針對(duì)不同類(lèi)型的設(shè)備衍生出不同功能的多種分支,但它畢竟太老、太混亂了。更重要的是,該文件系統(tǒng)不具備當(dāng)今大多數(shù)企業(yè)所需要的一些基本功能,例如納秒級(jí)時(shí)間戳、校驗(yàn)、快照、稀疏文件等。Apple生態(tài)圈急需一種能夠取代HFS+的全新文件系統(tǒng)。

APFS應(yīng)運(yùn)而生!在解決HFS面臨的各種遺留問(wèn)題同時(shí),還對(duì)HFS的所有變體進(jìn)行了統(tǒng)一,這是Apple從底層代碼開(kāi)始從零打造的全新文件系統(tǒng)。

APFS概述

全新開(kāi)發(fā)的APFS除了支持HFS+的全部功能外,還在以下方面有了突出的改進(jìn):

與使用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支持三種模式的加密:不加密;適用于元數(shù)據(jù)和用戶(hù)數(shù)據(jù)的單密鑰加密;以及適用于元數(shù)據(jù)、文件,甚至文件中特定部分的多密鑰加密。

此外APFS還包含其他改善和新功能,例如稀疏文件、改進(jìn)的TRIM操作,內(nèi)建對(duì)擴(kuò)展屬性的支持等。

脫胎換骨的APFS已經(jīng)具備與BSD HAMMER、Linux btrfs,或OpenZFS等現(xiàn)代化文件系統(tǒng)不相上下的功能和特性。

數(shù)據(jù)加密

安全與隱私是APFS的設(shè)計(jì)基礎(chǔ)。Apple的很多設(shè)備和操作系統(tǒng)早已具備加密功能,OS X 10.7 Lion開(kāi)始提供全磁盤(pán)加密功能;iOS 4開(kāi)始可通過(guò)專(zhuān)用數(shù)據(jù)保護(hù)技術(shù)將每個(gè)文件使用一個(gè)專(zhuān)用密鑰進(jìn)行加密。APFS對(duì)這兩種功能進(jìn)行整合,為文件系統(tǒng)元數(shù)據(jù)提供了一種統(tǒng)一的加密模式。

加密是APFS原生支持的特性,用戶(hù)可以針對(duì)每個(gè)卷選擇下列任何一種加密方法:不加密,統(tǒng)一用一個(gè)密鑰加密,或多密鑰加密(針對(duì)每個(gè)文件使用專(zhuān)用密鑰加密,同時(shí)針對(duì)敏感的元數(shù)據(jù)使用一個(gè)單獨(dú)的密鑰)。多密鑰加密可確保哪怕設(shè)備物理安全受到威脅,依然可以保障用戶(hù)數(shù)據(jù)的完整性。取決于具體硬件,APFS加密可使用AES-XTS或AES-CBC算法。

這種加密機(jī)制還實(shí)現(xiàn)了一個(gè)額外的功能:更為快速的數(shù)據(jù)擦除。通常情況下當(dāng)用戶(hù)從設(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除加密所用的密鑰即可。

快照和備份功能

快照功能可將文件系統(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)情況,并可用于在不打斷用戶(hù)操作的前提下對(duì)數(shù)據(jù)進(jìn)行更為高效的備份。

由于不支持目錄硬鏈接,APFS暫不兼容Time Machine,希望以后APFS能夠針對(duì)Time Machine提供更高效的序列化機(jī)制。本屆WWDC上,APFS的開(kāi)發(fā)經(jīng)理Eric Tamura在演示APFS的快照功能時(shí)使用了一個(gè)尚未包含在Beta版macOS Sierra中的工具,同時(shí)根據(jù)Apple的介紹,目前尚未提供用于訪問(wèn)快照功能的API,期待在后續(xù)版本中這個(gè)技術(shù)能夠盡快完善起來(lái)。

空間共享

APFS包含一個(gè)名為“空間共享”的新功能,借助該功能,多個(gè)文件系統(tǒng)可以共享同一個(gè)物理卷上的同一塊底層可用空間。也就是說(shuō),設(shè)備上的一個(gè)APFS“容器”內(nèi)部可以包含多個(gè)“卷”(文件系統(tǒng))。HFS+需要為每個(gè)文件系統(tǒng)預(yù)先分配固定大小的容量,這種做法較為“僵硬”,而APFS的空間共享功能可以讓用戶(hù)在無(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)的可用容量。

存儲(chǔ)空間使用效率

現(xiàn)代化的文件系統(tǒng)往往會(huì)通過(guò)壓縮和去重(Deduplication)等方式減小文件占用的空間量。壓縮很好理解,去重是指找出大量文件中相同的數(shù)據(jù)塊,并只將這樣的塊存儲(chǔ)一次,在訪問(wèn)文件時(shí),會(huì)根據(jù)實(shí)際情況動(dòng)態(tài)“拼裝”出最終的文件。這樣的功能最適合保存大量用戶(hù)文件或大量虛擬機(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(pán)上存儲(chǔ)的數(shù)據(jù)實(shí)現(xiàn)“共享”,此時(shí)相同的文件“實(shí)際體積”不變,但產(chǎn)生了兩個(gè)副本,對(duì)任何一個(gè)副本進(jìn)行改動(dòng)則需要為其分配新的存儲(chǔ)空間(這種方式也叫做“寫(xiě)入時(shí)復(fù)制”)。

文件基本可以分為下列三種類(lèi)別:

每次需要全面覆蓋的文件,例如圖片、Office 文檔、視頻等可以“附加”新內(nèi)容的文件,例如日志文件使用基于記錄結(jié)構(gòu)的文件,例如數(shù)據(jù)庫(kù)文件

對(duì)大部分普通用戶(hù)來(lái)說(shuō),接觸最多的可能就是第一種文件。在APFS的幫助下,可以將文檔(例如體積為10MB)復(fù)制多次,并借助空間共享功能節(jié)約存儲(chǔ)空間的用量,但只要改動(dòng)過(guò)其中任何一個(gè)副本,就需要為這個(gè)副本分配10MB空間。

這樣的“克隆”有可能給用戶(hù)造成一定的困擾。既然復(fù)制的文件不占用空間,那刪除這些文件也不會(huì)釋放出空間。

另外還需要注意一點(diǎn):在Finder內(nèi)復(fù)制文件會(huì)產(chǎn)生這樣可以節(jié)約空間的“克隆”,但命令行中的cp命令還會(huì)使用以往的方式為文件創(chuàng)建完整的副本。

性能

APFS專(zhuān)門(mén)針對(duì)閃存進(jìn)行了優(yōu)化。SSD雖然可以模擬傳統(tǒng)機(jī)械硬盤(pán)的“塊”,但底層技術(shù)與機(jī)械硬盤(pán)截然不同。SSD底層的管理工作是由一種名為閃存轉(zhuǎn)換層(FTL,F(xiàn)lash Translation Layer)的軟件負(fù)責(zé)處理的。FTL與文件系統(tǒng)極為類(lèi)似,可以在塊地址和介質(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)稱(chēng)值。

舉例來(lái)說(shuō),假設(shè)有一個(gè)1TB容量的SSD,顯示的可用空間總量為931GB。在有更多可用空間的情況下,F(xiàn)TL可以犧牲空間利用率換回更高性能和更長(zhǎng)壽命。但TRIM的問(wèn)題在于,只有在存在可用空間的情況下這個(gè)功能才會(huì)有用,如果磁盤(pán)即將裝滿(mǎn),TRIM不會(huì)為你帶來(lái)任何效果。

性能方面,APFS的延遲也有了大幅改善。APFS可以通過(guò)I/O QoS(服務(wù)質(zhì)量)對(duì)不同的訪問(wèn)請(qǐng)求劃分優(yōu)先級(jí),將用戶(hù)可以立刻察覺(jué)的操作和后臺(tái)活動(dòng)區(qū)分對(duì)待。

數(shù)據(jù)完整性

確保數(shù)據(jù)完整性,可以說(shuō)這是任何文件系統(tǒng)的首要目標(biāo)。我把數(shù)據(jù)交給你,你別弄丟了,也別隨意修改。但如果這一切真的能實(shí)現(xiàn),我們又為什么要“備份”呢?為確保數(shù)據(jù)安全,文件系統(tǒng)通常會(huì)采取一系列機(jī)制。

冗余

大部分Apple設(shè)備只有一個(gè)存儲(chǔ)設(shè)備(即一個(gè)邏輯SSD),因此RAID之類(lèi)的做法毫無(wú)意義。此時(shí)冗余是通過(guò)更底層的組件實(shí)現(xiàn)的,例如Apple RAID、硬件RAID控制器、SAN,甚至“單一”存儲(chǔ)設(shè)備本身。

但是也要注意,大部分可支持APFS的Apple設(shè)備中的SSD實(shí)際上是由多個(gè)或多或少相互獨(dú)立的NAND芯片組成的。一些高端SSD會(huì)在內(nèi)部實(shí)施一定的數(shù)據(jù)冗余,但需要付出容量和性能雙雙降低的代價(jià)。

此外APFS使得“復(fù)制文件”這一用戶(hù)最常用的實(shí)現(xiàn)本地?cái)?shù)據(jù)冗余的方法也失去了作用。APFS中復(fù)制的文件實(shí)際上只是對(duì)文件創(chuàng)建了輕量級(jí)克隆,實(shí)際數(shù)據(jù)并沒(méi)有重復(fù)保存,底層設(shè)備的故障會(huì)導(dǎo)致所有“副本”受損。

  絕對(duì)一致性

計(jì)算機(jī)系統(tǒng)在任何時(shí)候都可能出故障:崩潰、Bug、斷電等…… 文件系統(tǒng)必須能夠預(yù)見(jiàn)到這種情況并從故障中順利恢復(fù)。遇到這種情況,以前可能需要嘗試著用專(zhuān)門(mén)的工具在系統(tǒng)啟動(dòng)前檢查并修復(fù)文件系統(tǒng)(例如使用fsck)。較為現(xiàn)代化的系統(tǒng)會(huì)使用某些“始終一致”的格式,或?qū)⒉灰恢碌目赡鼙M量降低,以避免耗費(fèi)大量時(shí)間執(zhí)行完整的fsck檢查。例如ZFS就可以在磁盤(pán)上構(gòu)建一個(gè)新?tīng)顟B(tài),然后通過(guò)一次原子操作從之前的狀態(tài)以原子級(jí)方式過(guò)度到新?tīng)顟B(tài)。

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

校驗(yàn)

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

但是完全不對(duì)用戶(hù)數(shù)據(jù)進(jìn)行校驗(yàn),這種做法似乎更有趣。WWDC上的APFS工程師稱(chēng),Apple設(shè)備的存儲(chǔ)具備強(qiáng)大的ECC糾錯(cuò)保護(hù)。NAND閃存SSD和磁介質(zhì)機(jī)械硬盤(pán)都可以使用冗余數(shù)據(jù)檢測(cè)和糾正錯(cuò)誤。Apple工程師認(rèn)為,Apple設(shè)備通常不會(huì)遇到數(shù)據(jù)錯(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)類(lèi)產(chǎn)品中的SSD很少包含端到端的ECC保護(hù),因此可能導(dǎo)致數(shù)據(jù)傳輸過(guò)程中出現(xiàn)錯(cuò)誤。SSD固件中也可能包含導(dǎo)致數(shù)據(jù)丟失的Bug。

Apple對(duì)于供應(yīng)商的設(shè)備質(zhì)量測(cè)試可能是最嚴(yán)格的,用戶(hù)可以相信Apple產(chǎn)品使用了最高質(zhì)量的組件。Apple工程師認(rèn)為,此類(lèi)設(shè)備的用戶(hù)無(wú)需擔(dān)心比特衰減(Bit Rot,逐漸老化的數(shù)據(jù)會(huì)慢慢喪失完整性)的問(wèn)題,但如果軟件本身無(wú)法檢測(cè)錯(cuò)誤,用戶(hù)當(dāng)然不知道設(shè)備的具體情況如何。價(jià)值數(shù)百萬(wàn)美元的存儲(chǔ)陣列所用的ZFS也可能出現(xiàn)數(shù)據(jù)錯(cuò)誤,那么Apple設(shè)備中所用的TLC NAND芯片(最便宜的NAND芯片類(lèi)型)憑什么就不會(huì)出錯(cuò)?別忘了就在不久前某些大容量iPhone 6才剛剛因?yàn)榇鎯?chǔ)問(wèn)題而召回。

總結(jié)

Apple是否能完全用APFS取代HFS+,這一點(diǎn)還不確定,不過(guò)他們很可能已經(jīng)到了這樣一個(gè)轉(zhuǎn)折點(diǎn):繼續(xù)維護(hù)并改進(jìn)過(guò)了“而立之年”的軟件,這樣的做法可能比全新開(kāi)發(fā)一套新的軟件成本更高。APFS就是這樣一種權(quán)衡之后的產(chǎn)物。

根據(jù)Apple在WWDC上的介紹,APFS的核心設(shè)計(jì)目標(biāo)可能是這樣的:

讓所有消費(fèi)者(筆記本、手機(jī)、手表等)滿(mǎn)意將數(shù)據(jù)加密作為頭等要?jiǎng)?wù)為現(xiàn)代化備份方式提供快照功能

這些目標(biāo)可以讓所有Apple用戶(hù)獲益,從WWDC上的演示可知,APFS似乎已經(jīng)開(kāi)始逐漸走上正軌(盡管測(cè)試版的macOS Sierra似乎還有一段路要走)。

APFS開(kāi)發(fā)文檔中針對(duì)“開(kāi)源”有一個(gè)小注解:“開(kāi)源的實(shí)現(xiàn)目前尚不可用”。其實(shí)很多人并不指望APFS能夠開(kāi)源。但如果APFS能夠成為世界領(lǐng)先的文件系統(tǒng),用戶(hù)肯定還是希望在Linux和FreeBSD中也能使用,也許到時(shí)候Microsoft也能停止在ReFS方面的研發(fā)。APFS不針對(duì)用戶(hù)數(shù)據(jù)進(jìn)行校驗(yàn),沒(méi)有提供數(shù)據(jù)冗余機(jī)制,這些確實(shí)讓人感覺(jué)遺憾,畢竟數(shù)據(jù)完整性應(yīng)該是任何文件系統(tǒng)的頭等要?jiǎng)?wù),而無(wú)論這樣的文件系統(tǒng)將用于手表或手機(jī),或者服務(wù)器,文件完整性問(wèn)題都應(yīng)該重視起來(lái)。

目前APFS已經(jīng)以開(kāi)發(fā)者預(yù)覽版的方式通過(guò)OS X 10.12(macOS Sierra)提供給用戶(hù),預(yù)計(jì)將在2017年正式發(fā)布。

若要嘗試該功能,可在升級(jí)至macOS 10.12后通過(guò)新增的hdiutil命令行工具創(chuàng)建APFS卷:

$ hdiutil create -fs APFS -size 1GB foo.sparseimage

目前的測(cè)試版APFS有一些局限:

無(wú)法用于啟動(dòng)磁盤(pán)。文件和目錄名稱(chēng)大小寫(xiě)敏感。無(wú)法用于Time Machine、FileVault或Fusion驅(qū)動(dòng)器?,F(xiàn)有第三方工具需要更新才能支持APFS。APFS文件系統(tǒng)的卷無(wú)法被OS X 10.11 Yosemite以及更早的版本識(shí)別。APFS卷可以通過(guò)SMB網(wǎng)絡(luò)文件共享協(xié)議共享,AFP協(xié)議已棄用,無(wú)法用于共享APFS卷。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)