Mac OS X背后的故事(十一)Mac OS X文件系統的來龍去脈(下)

jopen 12年前發布 | 36K 次閱讀 Mac OS

        文/王越

        由于各種缺點,干掉 HFS+ 勢在必行,然而用什么取代 HFS+ 呢?蘋果開始秘密研發下一代的文件系統—ZFS,然而在諸多因素的干擾下,Mac OS X的 ZFS 支持卻只是曇花一現,未來文件系統之路將走向何方?

        文件系統的新時代——ZFS

        為了代替 HFS+,蘋果開始為研發下一代文件系統招兵買馬,準備大干一場。但這時 Sun 公司的工作讓蘋果的員工們為之一振。

        2004年,Sun 公司發表了其杰出的文件系統ZFS。這是一個 128 位的文件系統,本為 Solaris 操作系統開發,于 2005 年 10 月 31 日并入了 Solaris開發的主干原始碼。后成為一個使用 CDDL 協議條款授權的開源項目。

        ZFS 是一個具有高存儲容量、文件系統與卷管理概念整合、嶄新的磁碟邏輯結構的輕量級文件系統,同時也是一個便捷的存儲池管理系統。

        ZFS 的一個重大特點就是擁有大容量。ZFS 是一個 128 位的文件系統,這意味著它能存儲 1800 億億(18.4×1018)倍于當前 64 位文件系統的數據。ZFS 的設計如此超前以至于這個極限就當前現實而言可能永遠無法遇到。項目領導 Bonwick 曾說:“要填滿一個 128 位的文件系統,將耗盡地球上所有存儲設備,除非你擁有煮沸整個海洋的能量。”假設每秒鐘創建 1000 個新文件,達到 ZFS 文件數的極限需要約 9000 年。

        此外,ZFS 的一個重要指導思想是不單單去做一個文件系統,而是實現一套完整的卷管理方案。不同于傳統文件系統需要駐留于單獨設備或者需要一個卷管理系統去使用一個以 上的設備,ZFS 建立在虛擬的被稱為“zpools”的存儲池之上。每個存儲池由若干虛擬設備組成。這些虛擬設備可以是原始磁碟,也可能是一 RAID1 鏡像設備,或是非標準 RAID 等級的多磁碟組。于是 zpool 上的文件系統可以使用這些虛擬設備的總存儲容量。

        有了卷管理方案后,ZFS 走得更遠,加入了快照和克隆等實用的文件系統功能。當 ZFS 寫新數據時,包含舊數據的塊被保留,磁盤只寫入修改過的那部分數據塊。所以快照的建立非常快,只存儲兩個快照間的數據差異,因此快照也是空間優化的。克隆 指兩個獨立的文件系統共享一些列的塊。當任何一個克隆版本的文件系統被改變時,只創建改動的數據塊,因此非常快速,也占用少得多的空間。

        而 ZFS 最大的貢獻在于它是第一個支持寫入時復制功能(COW,copy on write)的文件系統。所有文件系統中的塊都包括 256 位的校驗值。含有活動數據的塊從來不被覆蓋;而是分配一個新塊,并把修改過的數據寫在新塊上。所有與該塊相關的元數據塊都被重新讀、分配和重寫。因此,當 一個數據寫入時發生了任何意外錯誤,原先的數據依然可以被訪問,且文件系統知道哪個操作出了錯誤而沒有完成。ZFS 的快照和克隆正是因此項技術而得以實現。

        ZFS 對于用戶而言,界面友好。先前 Unix的卷管理非常煩瑣,FreeBSD 因此還建了一套宏偉的框架,給邏輯卷管理做深層次的抽象。而 ZFS 文件系統自帶卷管理方案,幾乎所有煩瑣復雜的操作都能在一兩條命令內完成,我用傳統的卷管理工具已有近十個年頭,第一次使用 ZFS 時,完全被其易用性震撼,所以我毫不猶豫地把手頭所有的服務器遷移到了 ZFS。

        由于 ZFS 各種美好,加上其開源性質,所有的操作系統都想支持它。Solaris、OpenSolaris 項目一直作為標準實現供其他系統參考。Pawe Jakub Dawidek 把 ZFS 移到 FreeBSD,并在2009年進入了 FreeBSD 7,作為 FreeBSD 第七版最耀眼的三項功能之一(另一項功能是我們先前提到的 ULE,以及 Sun DTrace 的移植工作)。NetBSD 在 2009 年正式收納 ZFS。Linux 則麻煩得多,因為 Linux 內核的協議 GPL 是個和很多協議都水火不容的奇葩協議,ZFS 分發所采用的 CDDL 和 GPL 會產生沖突,所以一方面 FUSE提供了用戶空間層面的支持;另一方面,由 Oracle 牽頭,專為 Linux 開發 Btrfs,事實上就是一個 ZFS 的山寨版,可惜折騰了幾年,Oracle 自己又把 Sun 收購了,且到我撰寫此文時 Btrfs 依然沒有正式的穩定版本發布。

        曇花一現的 ZFS 夢

        剛才提到,蘋果在招兵買馬,雇員工開發新一代的文件系統,而 Chris Emura(Apple CoreOS 的文件系統開發經理)及 Don Brady(先前提到,此人領導 HFS+ 的開發)兩個富有經驗的文件系統開發者卻被衣服一樣晾在了一邊無所事事。2006年,剛剛提到的 Pawe Jakub Dawidek 正在往 FreeBSD 遷移 Sun 的 ZFS,這項工作立刻引起了 Chris Emura 及 Don Brady 的高度興趣。由于 ZFS 在 Unix 系統高度的可移植性,加上 Mac OS X本就是 FreeBSD 的近親,閑得發慌的兩人立即打算往 Mac OS X移植 ZFS。在 2007 年 4 月 6 日,FreeBSD 的移植宣告完成,等待合并進主干。一周后,兩位蘋果員工亦成功地完成了 Mac OS X的移植。

        蘋果一看兩人的 ZFS 的移植工作大有前途,立即跟進。2007年的蘋果全球開發者大會上,蘋果讓 Chris Emura 及 Don Brady 舉辦了一場小型講話,介紹 Mac OS X對 ZFS 的支持。這場講話先前并沒有在官方聲明中告示,但講話的報告廳依然擠滿了聽眾。隨后 ZFS 移植的源碼在 Mac OS Forge 公布。在最終版的 Mac OS X 10.5帶有試驗性的 ZFS 只讀支持,以命令行方式提供。用戶可以掛載 ZFS 的存儲池,并對池中的文件系統進行讀取操作。

        蘋果一直使移植并使用 Sun 的關鍵技術,除了 Java 以外,Mac OS X 10.5的 Xcode 套件也加入了 DTrace 的支持,并提供了一個好用的圖形界面 Instruments 讓開發者更方便地調用 DTrace。ZFS 除了解決 HFS+ 的所有問題,提供安全可靠的文件系統基礎外,還可以簡化蘋果許多軟件的實現。例如前文提到的 Mac OS X 10.5的 Time Machine,實現頗為煩瑣,依賴于給 HFS+ 提供新功能,功能層也需要增加很多的和備份相關的代碼。而 ZFS 默認就支持快照,將大大簡化 Time Machine 的實現,并使該功能更穩定可靠。事實上在 2008 年 11 月 25 日,Sun 發布了 OpenSolaris 2008.11版,其中給 GNOME 的 Nautilus 增加了一個使用 ZFS 的快照功能的圖形界面插件名為 Time Slider,和蘋果的 Time Machine 提供了非常相近的功能,我在使用后感覺不錯。

        因此在 WWDC 2008上,Snow Leopard 被提出,其中一項很重要的賣點就是對 ZFS 的完整的讀寫支持。在 Mac OS X的服務器版,蘋果也將提供一套圖形界面工具來方便維護人員管理 ZFS 存儲池。在當時的 Snow Leopard Server 主頁上,蘋果聲明 ZFS 將作為一項主推功能。

        但好景不長,一年后的蘋果開發者大會時,ZFS 相關的內容被悄悄從任何公開的文檔、網站、發布會中撤下,沒有給出任何的理由。Mac OS Forge 上的 ZFS 代碼和頁面也被蘋果移除。外界有很多對此的猜測,但沒有任何猜測得到蘋果官方的或是哪怕離職員工的證實。

        猜測之一是當時 Sun 剛被 Oracle 收購,而 Oracle 長期投資 ZFS 的競爭產品 Btrfs。因此蘋果覺得 ZFS 的前途不甚明朗。

        猜測之二是 ZFS 的關鍵技術 Copy On Write 有專利問題,NetApp 聲稱他們擁有 COW 的專利因此在起訴 Sun,蘋果不想在當中冒風險。

        猜測之三是 ZFS 和蘋果的 XNU 內核有協議沖突。我雖然不學法律,但我認為這個說法不完全對,因為 ZFS 和 DTrace 一樣,是以 CDDL 發布的開源軟件,既然 DTrace 可以無后顧之憂地加入到 XNU 中,ZFS 也沒有理由不可以。事實上,除了 Linux 這種少數使用 GPL 這類奇葩協議的內核,大多數系統的協議都不和 CDDL 沖突。FreeBSD 也好,Mac OS X 10.5也罷,都把 ZFS 加入內核發布。

        但事實上,如果把三種猜測并在一起,我們可以看到一個更全局的可能性:對于猜測之二,蘋果可能并非想使用 CDDL,而是想從 Sun 買下一個私有的協議,這樣一來,Sun 不但提供更好的技術支持,出了問題(比如猜測二中的專利問題)也可以讓 Sun 為自己背黑鍋。結果 Sun 可能和蘋果價格談不攏,加上猜測之一提到的 Sun 大勢已去,讓蘋果覺得還不如自己造個輪子來得方便。Sun 公司開發 ZFS 的主力 Jeff Bonwick 雖不能提供詳細的信息,但他基本證實了這種說法。

        無論如何,Mac OS X的 ZFS 支持,如曇花一現般消失了。

        未來文件系統之路走向何方

        雖然 Mac OS X的 ZFS 支持被砍了,開源社區依然想繼續開發 Mac OS Forge 先前版本的移植。如 MacZFS 項目不遺余力地給 Mac OS X 10.5~10.7提供 ZFS 讀寫支持。Don Brady 在蘋果將對 ZFS 的支持砍掉之后從工作了 20 多年的蘋果離職,開了一家名為 Ten’s Complement 的公司,該公司提供Z-410,較 MacZFS 提供更新更穩定的移植。

        不過,砍了 ZFS 后的蘋果目標也變得更清晰—和 Sun 的談判讓蘋果覺得與其支付高額的協議費,還不如雇人自己做個新的,再說了,作為比 Sun 大得多的 IT 公司,蘋果可以輕而易舉地搞個更強大的東西滅了它,因為 ZFS 其實也不如傳說中的那樣好。

        首先,時代在進步。ZFS 之后,又有很多新的和文件系統相關的研究,如 Ohad Rodeh 的論文,即成為后來 BtrFS 實現的基礎,可能比 ZFS 做得更好。

        其次,ZFS 是十年前開始設計的文件系統,但十年中,存儲工具已發生了重大的變化。ZFS 為傳統磁盤設計,但傳統磁盤的市場空間已不斷被 SSD、閃存的吞食。尤其是 MacBook Air 中使用的 Flash 存儲器便宜好用又小巧,可能將來會在 MacBook Pro 甚至 iMac 中得到更大的推廣。采用為傳統磁盤優化的 ZFS 就不顯得那么有吸引力。

        最后,ZFS 和蘋果有不同的用戶群。ZFS 目標用戶是大企業的工作站和服務器。在那里,大容量的存儲空間、高級的卷管理顯得非常重要,但蘋果面對的基本都是個人用戶—先前蘋果還賣服務器,但后來 Xserve 都被蘋果砍了。有幾個個人用戶需要使用到 ZFS 這些高級的功能呢?更重要的,蘋果的主要利潤將移到 iPhone、iPod、iPad、Apple TV 這些小設備上,ZFS 需要占用大量的內存來實現文件系統操作,在這些小設備上,內存很少,ZFS 根本跑不起來。

        蘋果非常清楚這些問題,工程師們現在一定在緊鑼密鼓地開發下一代文件系統。在 10.7 及 10.8 中,這套文件系統并未浮出水面,但一些細節值得留意。在 10.7 中,蘋果發布了 Core Storage,但并未聲張。這是一套邏輯卷管理工具,類似于前文提到的 FreeBSD 的 GEOM。這個版本的 File Vault 2亦使用 Core Storage 重寫。可以看到雖然蘋果在上層不斷地淡化文件系統的概念,例如 iCloud 的發布和 iOS 中對于文件這一概念的故意忽略,但蘋果在底層文件系統上的動作越來越大,想必在將來,蘋果定會讓我們感到重大的驚喜。

        作者王越,美國賓夕法尼亞大學計算機系研究生,中國著名 TeX 開發者,非著名 OpenFOAM 開發者。

        Mac OS X 背后的故事系列更多精彩內容

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!