初學者指南:ZFS 是什麼,為什麼要使用 ZFS?
今天,我們來談論一下 ZFS,一個先進的文件系統。我們將討論 ZFS 從何而來,它是什麼,以及為什麼它在科技界和企業界如此受歡迎。
雖然我是一個美國人,但我更喜歡讀成 ZedFS 而不是 ZeeFS,因為前者聽起來更酷一些。你可以根據你的個人喜好來發音。
注意:在這篇文章中,你將會看到 ZFS 被提到很多次。當我在談論特性和安裝的時候,我所指的是 OpenZFS 。自從 甲骨文 公司放棄 OpenSolaris 項目之後,ZFS(由甲骨文公司開發)和 OpenZFS 已經走向了不同的發展道路。
ZFS 的歷史
Z 文件系統 (ZFS)是由 Matthew Ahrens 和 Jeff Bonwick 在 2001 年開發的。ZFS 是作為 太陽微系統 公司的 OpenSolaris 的下一代文件系統而設計的。在 2008 年,ZFS 被移植到了 FreeBSD 。同一年,一個移植 ZFS 到 Linux 的項目也啟動了。然而,由於 ZFS 是 通用開發和發布許可證 (CDDL)許可的,它和 GNU 通用公共許可證 不兼容,因此不能將它遷移到 Linux 內核中。為了解決這個問題,絕大多數 Linux 發行版提供了一些方法來安裝 ZFS 。
在甲骨文公司收購太陽微系統公司之後不久,OpenSolaris 就閉源了,這使得 ZFS 的之後的開發也變成閉源的了。許多 ZFS 開發者對這件事情非常不滿。三分之二的 ZFS 核心開發者,包括 Ahrens 和 Bonwick,因為這個決定而離開了甲骨文公司。他們加入了其它公司,並於 2013 年 9 月創立了 OpenZFS 這一項目。該項目引領著 ZFS 的開源開發。
讓我們回到上面提到的許可證問題上。既然 OpenZFS 項目已經和 Oracle 公司分離開了,有人可能好奇他們為什麼不使用和 GPL 兼容的許可證,這樣就可以把它加入到 Linux 內核中了。根據 OpenZFS 官網 的介紹,更改許可證需要聯繫所有為當前 OpenZFS 實現貢獻過代碼的人(包括初始的公共 ZFS 代碼以及 OpenSolaris 代碼),並得到他們的許可才行。這幾乎是不可能的(因為一些貢獻者可能已經去世了或者很難找到),因此他們決定保留原來的許可證。
ZFS 是什麼,它有什麼特性?
正如前面所說過的,ZFS 是一個先進的文件系統。因此,它有一些有趣的特性。比如:
- 存儲池
- 寫時拷貝
- 快照
- 數據完整性驗證和自動修復
- RAID-Z
- 最大單個文件大小為 16 EB(1 EB = 1024 PB)
- 最大 256 千萬億(256*10 15 )的 ZB(1 ZB = 1024 EB)的存儲
讓我們來深入了解一下其中一些特性。
存儲池
與大多數文件系統不同,ZFS 結合了文件系統和卷管理器的特性。這意味著,它與其他文件系統不同,ZFS 可以創建跨越一系列硬碟或池的文件系統。不僅如此,你還可以通過添加硬碟來增大池的存儲容量。ZFS 可以進行分區和格式化。
ZFS 存儲池
寫時拷貝
寫時拷貝 是另一個有趣並且很酷的特性。在大多數文件系統上,當數據被重寫時,它將永久丟失。而在 ZFS 中,新數據會寫到不同的塊。寫完成之後,更新文件系統元數據信息,使之指向新的數據塊(LCTT 譯註:更新之後,原數據塊成為磁碟上的垃圾,需要有對應的垃圾回收機制)。這確保了如果在寫新數據的時候系統崩潰(或者發生其它事,比如突然斷電),那麼原數據將會保存下來。這也意味著,在系統發生崩潰之後,不需要運行 fsck 來檢查和修復文件系統。
快照
寫時拷貝使得 ZFS 有了另一個特性: 快照 。ZFS 使用快照來跟蹤文件系統中的更改。快照包含文件系統的原始版本(文件系統的一個只讀版本),實時文件系統則包含了自從快照創建之後的任何更改。沒有使用額外的空間。因為新數據將會寫到實時文件系統新分配的塊上。如果一個文件被刪除了,那麼它在快照中的索引也會被刪除。所以,快照主要是用來跟蹤文件的更改,而不是文件的增加和創建。
快照可以掛載成只讀的,以用來恢復一個文件的過去版本。實時文件系統也可以回滾到之前的快照。回滾之後,自從快照創建之後的所有更改將會丟失。
數據完整性驗證和自動修復
當向 ZFS 寫入新數據時,會創建該數據的校驗和。在讀取數據的時候,使用校驗和進行驗證。如果前後校驗和不匹配,那麼就說明檢測到了錯誤,然後,ZFS 會嘗試自動修正錯誤。
RAID-Z
ZFS 不需要任何額外軟體或硬體就可以處理 RAID(磁碟陣列)。毫不奇怪,因為 ZFS 有自己的 RAID 實現:RAID-Z 。RAID-Z 是 RAID-5 的一個變種,不過它克服了 RAID-5 的寫漏洞:意外重啟之後,數據和校驗信息會變得不同步(LCTT 譯註:RAID-5 的條帶在正寫入數據時,如果這時候電源中斷,那麼奇偶校驗數據將跟該部分數據不同步,因此前邊的寫無效;RAID-Z 用了 「可變寬的 RAID 條帶」 技術,因此所有的寫都是全條帶寫入)。為了使用基本級別的 RAID-Z(RAID-Z1),你需要至少三塊磁碟,其中兩塊用來存儲數據,另外一塊用來存儲奇偶校驗信息。而 RAID-Z2 需要至少兩塊磁碟存儲數據以及兩塊磁碟存儲校驗信息。RAID-Z3 需要至少兩塊磁碟存儲數據以及三塊磁碟存儲校驗信息。另外,只能向 RAID-Z 池中加入偶數倍的磁碟,而不能是奇數倍的。
巨大的存儲潛力
創建 ZFS 的時候,它是作為最後一個文件系統而設計的 。那時候,大多數文件系統都是 64 位的,ZFS 的創建者決定直接跳到 128 位,等到將來再來證明這是對的。這意味著 ZFS 的容量大小是 32 位或 64 位文件系統的 1600 億億倍。事實上,Jeff Bonwick(其中一個創建者)說:「完全填滿一個 128 位的存儲池所需要的能量,從字面上講,比煮沸海洋需要的還多。」
如何安裝 ZFS?
如果你想立刻使用 ZFS(開箱即用),那麼你需要安裝 FreeBSD 或一個使用 illumos 內核的操作系統。illumos 是 OpenSolaris 內核的一個克隆版本。
事實上,支持 ZFS 是一些有經驗的 Linux 用戶選擇 BSD 的主要原因。
如果你想在 Linux 上嘗試 ZFS,那麼只能在存儲文件系統上使用。據我所知,沒有任何 Linux 發行版可以在根目錄上安裝 ZFS,實現開箱即用。如果你對在 Linux 上嘗試 ZFS 感興趣,那麼 ZFS on Linux 項目 上有大量的教程可以指導你怎麼做。
附加說明
這篇文章論述了 ZFS 的優點。現在,讓我來告訴你一個關於 ZFS 很現實的問題。使用 RAID-Z 會很貴,因為你需要購買大量的磁碟來增大存儲空間。
你已經使用過 ZFS 了嗎?你的使用經驗是什麼樣的?請在下面的評論中告訴我們。
如果你覺得這篇文章有趣,請花一分鐘的時間把它分享到社交媒體、極客新聞或 Reddit 。
via: https://itsfoss.com/what-is-zfs/
作者:John Paul 選題:lujun9972 譯者:ucasFL 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive