午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

【APFS】到底是啥?

 平淡水的平凡 2017-03-31

來源:Pine果微博

地址:http://weibo.com/ttarticle/p/show?id=2309404079760505489606&from=timeline&isappinstalled=1

授權轉發(fā)!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UFS

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

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

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

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

Mac OS X起源于NeXTSTEP,因為基于BSD,所以自然也使用UFS。

HFS+

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

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

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

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

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

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

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

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

但,HFS+并不完美。

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

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

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

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

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

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

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


    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多