看不見的革命:蘋果黑科技 APFS 檔案系統
前言
2016 年 6 月 14 日,蘋果在 WWDC 上正式宣佈了全新的檔案格式——Apple File System(簡稱 APFS)。
根據 Apple 提供的初版開發者文檔介紹,APFS 的具體解釋是:針對快閃記憶體/SSD 存儲進行優化,提供了更強大的加密、寫入時複製(Copy-on-write)中繼資料、空間分享、檔和目錄克隆、快照、目錄大小快速調整、原子級安全存儲基元(Atomic safe-save primitives),以及改進的檔案系統底層技術。
現在,當使用者升級 iOS 10.3 系統後,會將整個檔案系統升級為 APFS,得益於這個新系統,你會發現打開應用、切換後臺應用時感覺比之前流暢了,而設備內的可用存儲空間也比以前變多了。
是的,蘋果這是做好了充分準備,將讓 APFS 替代此前舊的檔案系統 HFS+。那麼 APFS 檔案系統究竟有什麼革新之處呢,它將能夠為用戶們帶來怎樣的變化呢?
為什麼要做更新
在詳解 APFS 之前,我們必須先從 HFS+ 開始講講檔案系統對蘋果的重要性。
作業系統中負責管理和存儲檔資訊的軟體機構稱為檔管理系統,簡稱檔案系統,也就是我們理解的在存放裝置上組織檔的方法。
HFS+ 檔案系統是蘋果第三代檔案系統,最早期型號的 Mac 使用了名為 MFS(Macintosh File System)的檔案系統,但很快蘋果又在 1985 年推出了 HFS 檔案系統,那時 Mac 512K 還是蘋果的旗艦級產品,這套系統存在了十幾年,直到 1998 年,蘋果在 HFS 的基礎上升級出了 HFS+檔案系統,隨著擁有 4GB 硬碟的 G3 PowerMacs 一起到來。在那之後,家用電腦的存儲能力可以說增長了好幾千倍,為了對應不同的設備,HFS+ 也被分成了多個競爭的方向,擁有不同的功能。
HFS+ 不僅作為 Mac 的檔案系統標準從 1998 年沿用至今,而且同樣也是 iPod 及 iOS 設備的檔案系統基礎。
HFS+ 推出之時市面上仍以軟碟和 HDD 作為主要存放裝置,基本沒有為現在流行的快閃記憶體和 SSD 作優化。算上原始的 HFS 基礎,這套老舊的系統已經使用了 30 年。30 年時間裡,電腦硬體和軟體的發展日新月異,HFS+ 在應付現代硬體和軟體都已經力不從心,存在中繼資料以大位元組序保存、單執行緒訪問、不支援稀疏檔、寫時複製等等一大堆缺點,不僅速度很慢,而且用久了之後會出現卡、崩潰之類的情況。
是時候該出現一個全新的替代系統了。
APFS 強在哪?
APFS 在基本的檔案系統設計上就遠比 HFS+ 先進,HFS+ 為 32 位檔 ID,而 APFS 支援 64 位元索引節點,時間戳記間距從 HFS+ 的 1 秒降低至 1 納秒,配合著現代處理器和 SSD 遠低於1秒的檔操作時間,所以在低延遲性上足以讓用戶感受到某種使用體驗的飛躍。
APFS 還原生支援 SSD 的 FTL 和 Trim,所以性能上當然更強、空間利用率更高,另外與 HFS+ 固定形式的檔案系統結構不同,APFS 是個具有擴展性的檔案系統,可以在未來增加更多新特性、API,為使用者提供更多樣化的服務。
通俗地說 APFS 幾大新特性:
一、解決了空間佔用的不合理
這得益於 APFS 的兩大功能:檔克隆(Clones)和空間共用(Space Sharing),以及從克隆衍生的磁片快照。
克隆改變了以往檔案系統複製檔時必須額外騰出空間來儲存這份複製文檔的問題,在 APFS 下,複製檔不會產生同等的空間佔用,它只儲存有變化的資料,然後快速地提取出來。這意味著檔的複製速度會變得很快,而無論你複製多少份檔,它都不需要額外騰出大量存儲空間來“安置”它們了。
在 macOS 和 iOS 中,以往我們重複調用應用,或者應用之間進行調用時,就會涉及到複製,複製一遍,就得騰出雙倍空間,複製幾遍,就要好幾倍空間。但升級為 APFS 系統後,不管怎樣調用,都只需額外佔用 1 倍的空間,可以說徹底解決了應用運行中很關鍵的存儲和讀取問題。
在克隆的原理基礎上,蘋果又進一步給 APFS 加入了相似的磁片快照(Snapshot),解決了備份佔用時間長、空間大的問題。快照和克隆一樣,都是只有檔發生變化的那一部分才會佔用更多的空間,所以你大可以更頻繁的去備份資料,而不用擔心它們把你的磁片占滿,更不用擔心備份和恢復備份浪費掉漫長的時間了。
空間共用解決的可能是大家最為心塞的問題:系統磁片已滿。傳統的硬碟分區,會出現一個存儲盤被占得滿滿的,但別的存儲盤又很空的尷尬情況。而 APFS 則利用一項名為 Space Sharing 的新技術,將存儲分區類比成整體的“容器”,容器相對獨立,但是在需要的時候,又是歸於 APFS 的統籌之下,某一個出現容量不夠時,整個 APFS 下的冗余空間可以隨意調配,這意味著每個容器的空間可以根據作業系統的指令,自由收放大小,除非整個存儲盤已經填滿,否則將再不會出現某個盤空間不足的情況。
二、讓檔處理速度變快
APFS 能夠讓人感覺系統和應用的回應速度變快,除了前面的克隆功不可沒,還有 I/O QoS。I/O QoS 翻譯過來叫做“輸入輸出進程服務品質”,也叫進程服務品質。當處理關鍵應用和多媒體應用時,多個輸入輸出路線會對操作網路造成擁堵,QoS 就是確保其中重要進程不受延遲或丟棄,同時保證網路高速運行的技術。
APFS 在借助各項新技術整體提升了與 SSD 的適配度的同時,也通過借助 I/O QoS(服務品質)改善檔操作延遲,對資料的不同訪問被劃分到不同的優先順序中,優先處理那些對用戶來說是緊要的——感知明顯的操作,所以在使用中,用戶就會明顯地感覺到“快”。
以往 NFS+ 在設計的時候,考慮到硬體性能的上下相容,自帶中繼資料全域鎖,為照顧低頻處理器,所以一個單位時間內只允許一個進程訪問檔案系統。但到了如今多核處理器的年代,這顯然已經造成了檔處理速度的瓶頸,於是 APFS 打開了這把“鎖”,相當於給高性能多核處理器和 SSD 之間開放了一條更大的“高速公路”,路面更寬,對“交通”的管制也更規範合理了。
三、讓資料變得更加安全
資料安全有兩個方面,第一是它使用安全,可恢復,不害怕崩潰、不害怕在讀取中丟失;第二個就是它的加密安全。
APFS 比 NFS+ 更先進的一個方面就是它對資料的保護上。首先 APFS 有崩潰保護機制(Crash Protection),用戶在編輯檔時,原有資料不會立刻被覆蓋掉,修改產生的變數會在檔案系統用新的位置來保存,只有確定新資料已經編輯完畢,才會最終完成覆蓋。即便是軟體崩潰或者發生斷電等意外,也可以最大程度確保資料等安全。
加密技術(Encryption)將原先的檔加密方式進行了整合,分為無加密、單金鑰加密、多金鑰加密三個模式。其中多金鑰加密允許用戶使用不同的金鑰分別給設備、檔、單個資料進行加密,這個不僅是系統級的也是硬體級的,意味著即便是別人獲得了你的硬體解鎖方法,依然無法獲取裡面的資料。
iOS 10.3 你能感受到的變化
升級 iOS 10.3 的同學們,同時 iOS 的檔案系統也升級到了 APFS,這個升級甚至不需要你做任何額外操作,資料也依舊全部保留完整(當然做備份這個習慣還是要的)。
大家議論不已的升級之後可用空間有不同程度的增加,就是因為 APFS 改善了檔存儲機制,同名檔在 iOS 系統中只會佔用一份空間。一些大容量 App 的調用也不像以前那樣,必須有 1 倍多的冗餘空間才能完成,自然就為設備存儲釋放了更多的空間。
升級 iOS 10.3 之後,不少使用者回饋開機速度變快,打開、切換應用感覺更快,是因為 APFS 在應用運行中通過進程分配調整優先順序,分層次分批次地運行,而回饋到 iOS 設備螢幕上,你會看到應用很快被打開,其實 APFS 還在分配其他檔一一啟動,只不過在那個瞬間對用戶來說,就已經是打開應用了。
當然,各位感興趣的話也可以試一試 Time Machine 備份,看看是不是備份速度也有了提升。
此外,iOS 10.3 在資料安全性上也有了增強。這不僅對用戶很重要,其實對開發者同樣重要,這意味著更可靠的資料保存,更可靠的 API 調用,還能對使用者資料進行比較方便的備份了。
APFS 還擴大了巨型檔的支援以及時間的準確度,對於需要精準時間支援的資料,APFS 有了實現基礎。支援的單一檔大小上限從現在的 8 exabyte 大幅增加到 2^63 bytes,App 的體積限制得到開放了。
不過也需要提醒大家,您設備上的 32 位應用可能過一段時間就無法適應 iOS 了,開發者必須更新將 App 更到 64 位。
更快的時代 這只是序幕
APFS 是不是蘋果在軟體層面的殺手鐧?我們說:是的。
儘管它現在剛剛在 iOS 設備上得到應用,我們也能感受到它對檔管理系統的一系列技術革新,從 HFS+ 到 APFS,必定是飛躍式發展。
未來,APFS 將通用於 iOS、macOS、watchOS 和 tvOS 這四個蘋果主要的作業系統中,結束蘋果此前所說的“混亂”局面,讓蘋果產品實現檔案系統的一致,實現代碼的一致,從而讓四大系統的更新維護、跨系聯動、應用開發、新技術同步上,都實現真正的統一。
從筆者今天升級 iOS 10.3 的過程來看,APFS 對 HFS+ 的替代相容很安全,沒有發生資料丟失,也沒有發生 App 無法訪問的情況。但 macOS 上涉及到磁碟分割還有更複雜的問題,我們還要進一步看 APFS 針對更多設備的表現。而 APFS 也需要一段磨合時間,才能讓大家看到更多的進化成果。
無論如何,這是一個必須更快的時代,APFS 既是這個時代呼之欲出的產物,也是推動蘋果設備變快甚至未來可能更多設備變快的技術助力。嘗試和享受新科技,這就是升級 iOS 10.3 的理由,這只是開始。