終於有人把 ZFS 文件系統講明白了

語言: CN / TW / HK

本文主要介紹高級文件系統 ZFS,將討論它的來源、它是什麼以及為什麼它在技術人員和企業中如此受歡迎。

注意: 本文多次提到 ZFS ,當談到 ZFS 功能和安裝時,其實説的是 OpenZFS。自從 Oracle 停止對 OpenSolaris 更新代碼之後[1],ZFS(由 Oracle 開發)和 OpenZFS 遵循了不同的路徑。

ZFS 的歷史

ZFS 文件系統在 2001 年由 Matthew Ahrens 和 Jeff Bonwick[2] 創建。ZFS 旨在成為 Sun Microsystems Solaris 操作系統[3] 的下一代文件系統。2008 年,ZFS 被移植到 FreeBSD,同年開始將 ZFS 移植到 Linux[4] 中。但是,由於 ZFS 是根據 Common_Development_and_Distribution_License(CDDL)[5] 開發的,該許可證與 GNU General Public License (GPL)[6] 不兼容,因此它不能包含在 Linux 內核中。為了解決這個問題,大多數 Linux 發行版都提供了安裝 ZFS 的方法。

在 Oracle 收購 Sun Microsystems 後不久,OpenSolaris 就成為了閉源。ZFS 的所有後續開發也變成了閉源。當時 ZFS 的許多開發人員對這一轉變感到不滿,於是大約三分之二的 ZFS 核心開發人員(包括 Ahrens 和 Bonwick)離開了 Oracle。他們於 2013 年 9 月加入其他公司並創建了 OpenZFS 項目[7],該項目引領了 ZFS 的開源。

讓我們回到上面提到的許可證問題。由於 OpenZFS 項目與 Oracle 分開,有些人可能想知道為什麼他們不將許可證更改為與 GPL 兼容的許可證,以便將其包含在 Linux 內核中。根據 OpenZFS 網站介紹[8],更改許可證將要聯繫所有為 OpenZFS 貢獻過代碼的人(包含 OpenSolaris 之前的初始通用 ZFS 代碼)並獲得他們對更改許可證的同意。由於這項工作幾乎是不可能完成的(因為一些貢獻者可能已經死亡或很難找到),他們決定保留原來的許可證。

什麼是 ZFS?它有什麼特點?

file

正如我前面提到的,ZFS 是一種高級文件系統。因此,它具有一些有趣的功能[9]。如:

存儲池

  • 寫時拷貝

  • 快照

  • 數據完整性驗證和自動修復

  • RAID-Z

  • 最大 16 EiB(2^64byte,即 16x1024x1024TB)的文件大小

  • 最大 256 ZiB(2^78byte)存儲

存儲池

與大多數文件系統不同,ZFS 結合了文件系統和卷系統管理器的功能。這意味着與其他文件系統不同,ZFS 可以創建跨越一系列驅動器或池的文件系統。不僅如此,還可以通過添加另一個驅動器將存儲添加到池中。ZFS 將處理分區和格式化[10]。

file

ZFS 中的存儲池

寫時拷貝

寫時拷貝[11] 是另一個有趣(而且很酷)的功能。在大多數文件系統上,當數據被覆蓋時,它會永遠丟失。在 ZFS 上,新信息被寫入不同的塊,寫入完成後,文件系統元數據將更新以指向新信息。這確保如果在寫入過程中系統崩潰(或發生其他事情),舊數據將被保留,這也意味着系統在崩潰後不需要運行文件系統檢查 fsck (file system check)[12]。

快照

寫時拷貝導致另一個 ZFS 功能:快照。ZFS 使用快照來跟蹤文件系統中的更改。“快照包含文件系統的原始版本,實時文件系統包含自快照以來所做的任何更改,不使用額外的空間。當新數據寫入實時文件系統時,會分配新塊來存儲這些數據。” 如果文件被刪除,快照引用也會被刪除。因此,快照主要用於跟蹤文件的更改,而不是文件的添加和創建。

快照能夠以只讀方式掛載以恢復文件的過去版本,還可以將實時系統回滾到以前的快照。一旦快照沒了,所有更改都將丟失。

數據完整性驗證和自動修復

每當新數據寫入 ZFS 時,它都會為該數據創建校驗和(checksum)。當讀取該數據時,校驗和被驗證。如果校驗和不匹配,則 ZFS 知道已檢測到錯誤。然後 ZFS 將自動嘗試更正錯誤。

RAID-Z

ZFS 無需任何額外的軟件或硬件即可處理磁盤陣列 RAID (Redundant Arrays of Independent Disks)。ZFS 有自己的 RAID 實現:RAID-Z。RAID-Z 實際上是 RAID-5 的變體,為了克服 RAID-5 的 WriteHole 問題,即“意外重啟後數據和奇偶校驗信息變得不一致”。要使用基本的 RAID-Z (RAID-Z1)[13],至少需要 2 塊磁盤用於存儲,1 塊磁盤用於奇偶校驗[14]。RAID-Z2 至少需要 2 個存儲驅動器和 2 個用於奇偶校驗的驅動器。RAID-Z3 則至少需要 2 個存儲驅動器和 3 個用於奇偶校驗的驅動器。將驅動器添加到 RAID-Z 池時,它們必須以 2 的倍數添加。

巨大的存儲潛力

ZFS 在創建之初,就被設計為最後一代文件系統[15]。在大多數文件系統都是 64 位的時候,ZFS 創建者決定直接跳到 128 位以備未來驗證。這意味着 ZFS “提供了 32 位或 64 位系統容量的 160 億倍”。事實上,Jeff Bonwick 表示,“要填滿一個 128 位的文件系統,將耗盡地球上所有存儲設備。除非你擁有煮沸整個海洋的能量,不然你不可能將其填滿”[16]。“fully populating a 128-bit storage pool would, literally, require more energy than boiling the oceans.”

如何安裝 ZFS?

如果想開箱即用地使用 ZFS,則需要安裝 FreeBSD[17] 或使用 illumos 內核的操作系統。illumos[18] 是 OpenSolaris 內核的一個分支。

事實上,對 ZFS 的支持是一些有經驗的 Linux 用户選擇 BSD [19] 的主要原因之一。

如果想在 Linux 上試用 ZFS,可以將其用作存儲文件系統。最近,Ubuntu 19.10 引入了在根目錄上開箱即用安裝 ZFS 的功能。閲讀有關在 Ubuntu 上使用 ZFS[20] 的更多信息。如果有興趣在 Linux 上嘗試 ZFS,Linux 項目上的 ZFS 有許多教程。

參考鏈接:

【1】 http://itsfoss.com/solaris-alternatives

【2】http://wiki.gentoo.org/wiki/ZFS

【3】http://en.wikipedia.org/wiki/Sun_Microsystems

【4】http://zfsonlinux.org/

【5】http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License

【6】http://en.wikipedia.org/wiki/GNU_General_Public_License

【7】http://www.open-zfs.org/wiki/Main_Page

【8】http://www.open-zfs.org/wiki/FAQ#Do_you_plan_to_release_OpenZFS_under_a_license_other_than_the_CDDL.3F

【9】http://wiki.archlinux.org/index.php/ZFS

【10】http://www.howtogeek.com/175159/an-introduction-to-the-z-file-system-zfs-for-linux/

【11】http://www.freebsd.org/doc/handbook/zfs-term.html

【12】http://linuxhandbook.com/fsck-command/

【13】http://wiki.archlinux.org/index.php/ZFS/Virtual_disks#Creating_and_Destroying_Zpools

【14】http://www.pcmag.com/encyclopedia/term/60364/raid-parity

【15】http://web.archive.org/web/20060428092023/http://www.sun.com/2004-0914/feature/

【16】http://blogs.oracle.com/bonwick/128-bit-storage:-are-you-high

【17】http://www.freebsd.org/

【18】http://wiki.illumos.org/display/illumos/Distributions

【19】http://itsfoss.com/why-use-bsd/

【20】http://itsfoss.com/zfs-ubuntu/

【21】原文鏈接:http://itsfoss.com/what-is-zfs/

作者

John Paul

本文由博客一文多發平台 OpenWrite 發佈!