歡迎光臨
每天分享高質量文章

初學者指南:ZFS 是什麼,為什麼要使用 ZFS? | Linux 中國

今天,我們來談論一下 ZFS,一個先進的檔案系統。我們將討論 ZFS 從何而來,它是什麼,以及為什麼它在科技界和企業界如此受歡迎。
— John Paul


致謝
編譯自 | 
https://itsfoss.com/what-is-zfs/
 
 作者 | John Paul
 譯者 | Lv Feng (ucasFL) ?????共計翻譯:71.0 篇 貢獻時間:736 天

今天,我們來談論一下 ZFS,一個先進的檔案系統。我們將討論 ZFS 從何而來,它是什麼,以及為什麼它在科技界和企業界如此受歡迎。

雖然我是一個美國人,但我更喜歡讀成 ZedFS 而不是 ZeeFS,因為前者聽起來更酷一些。你可以根據你的個人喜好來發音。

註意:在這篇文章中,你將會看到 ZFS 被提到很多次。當我在談論特性和安裝的時候,我所指的是 OpenZFS 。自從甲骨文Oracle公司放棄 OpenSolaris 專案之後,ZFS(由甲骨文公司開發)和 OpenZFS 已經走向了不同的發展道路。

ZFS 的歷史

Z 檔案系統Z File System(ZFS)是由 Matthew Ahrens 和 Jeff Bonwick[1] 在 2001 年開發的。ZFS 是作為太陽微系統Sun MicroSystem[2] 公司的 OpenSolaris[3] 的下一代檔案系統而設計的。在 2008 年,ZFS 被移植到了 FreeBSD 。同一年,一個移植 ZFS 到 Linux[4] 的專案也啟動了。然而,由於 ZFS 是通用開發和發佈許可證Common Development and Distribution License[5](CDDL)許可的,它和 GNU 通用公共許可證[6] 不兼容,因此不能將它遷移到 Linux 內核中。為瞭解決這個問題,絕大多數 Linux 發行版提供了一些方法來安裝 ZFS 。

在甲骨文公司收購太陽微系統公司之後不久,OpenSolaris 就閉源了,這使得 ZFS 的之後的開發也變成閉源的了。許多 ZFS 開發者對這件事情非常不滿。三分之二的 ZFS 核心開發者[1],包括 Ahrens 和 Bonwick,因為這個決定而離開了甲骨文公司。他們加入了其它公司,並於 2013 年 9 月創立了 OpenZFS[7] 這一專案。該專案引領著 ZFS 的開源開發。

讓我們回到上面提到的許可證問題上。既然 OpenZFS 專案已經和 Oracle 公司分離開了,有人可能好奇他們為什麼不使用和 GPL 兼容的許可證,這樣就可以把它加入到 Linux 內核中了。根據 OpenZFS 官網[8] 的介紹,更改許可證需要聯繫所有為當前 OpenZFS 實現貢獻過代碼的人(包括初始的公共 ZFS 代碼以及 OpenSolaris 代碼),並得到他們的許可才行。這幾乎是不可能的(因為一些貢獻者可能已經去世了或者很難找到),因此他們決定保留原來的許可證。

ZFS 是什麼,它有什麼特性?

正如前面所說過的,ZFS 是一個先進的檔案系統。因此,它有一些有趣的特性[9]。比如:

◈ 儲存池
◈ 寫時拷貝
◈ 快照
◈ 資料完整性驗證和自動修複
◈ RAID-Z
◈ 最大單個檔案大小為 16 EB(1 EB = 1024 PB)
◈ 最大 256 千萬億(256*1015 )的 ZB(1 ZB = 1024 EB)的儲存

讓我們來深入瞭解一下其中一些特性。

儲存池

與大多數檔案系統不同,ZFS 結合了檔案系統和捲管理器的特性。這意味著,它與其他檔案系統不同,ZFS 可以創建跨越一系列硬碟或池的檔案系統。不僅如此,你還可以通過添加硬碟來增大池的儲存容量。ZFS 可以進行分割槽和格式化[10]

ZFS 儲存池

寫時拷貝

寫時拷貝Copy-on-write[11]是另一個有趣並且很酷的特性。在大多數檔案系統上,當資料被重寫時,它將永久丟失。而在 ZFS 中,新資料會寫到不同的塊。寫完成之後,更新檔案系統元資料信息,使之指向新的資料塊(LCTT 譯註:更新之後,原資料塊成為磁盤上的垃圾,需要有對應的垃圾回收機制)。這確保瞭如果在寫新資料的時候系統崩潰(或者發生其它事,比如突然斷電),那麼原資料將會儲存下來。這也意味著,在系統發生崩潰之後,不需要運行 fsck[12] 來檢查和修複檔案系統。

快照

寫時拷貝使得 ZFS 有了另一個特性:快照snapshots。ZFS 使用快照來跟蹤檔案系統中的更改。快照[11]包含檔案系統的原始版本(檔案系統的一個只讀版本),實時檔案系統則包含了自從快照創建之後的任何更改。沒有使用額外的空間。因為新資料將會寫到實時檔案系統新分配的塊上。如果一個檔案被刪除了,那麼它在快照中的索引也會被刪除。所以,快照主要是用來跟蹤檔案的更改,而不是檔案的增加和創建。

快照可以掛載成只讀的,以用來恢復一個檔案的過去版本。實時檔案系統也可以回滾到之前的快照。回滾之後,自從快照創建之後的所有更改將會丟失。

資料完整性驗證和自動修複

當向 ZFS 寫入新資料時,會創建該資料的校驗和。在讀取資料的時候,使用校驗和進行驗證。如果前後校驗和不匹配,那麼就說明檢測到了錯誤,然後,ZFS 會嘗試自動修正錯誤。

RAID-Z

ZFS 不需要任何額外軟體或硬體就可以處理 RAID(磁盤陣列)。毫不奇怪,因為 ZFS 有自己的 RAID 實現:RAID-Z 。RAID-Z 是 RAID-5 的一個變種,不過它剋服了 RAID-5 的寫漏洞:意外重啟之後,資料和校驗信息會變得不同步(LCTT 譯註:RAID-5 的條帶在正寫入資料時,如果這時候電源中斷,那麼奇偶校驗資料將跟該部分資料不同步,因此前邊的寫無效;RAID-Z 用了 “可變寬的 RAID 條帶” 技術,因此所有的寫都是全條帶寫入)。為了使用基本級別的 RAID-Z[13](RAID-Z1),你需要至少三塊磁盤,其中兩塊用來儲存資料,另外一塊用來儲存奇偶校驗信息[14]。而 RAID-Z2 需要至少兩塊磁盤儲存資料以及兩塊磁盤儲存校驗信息。RAID-Z3 需要至少兩塊磁盤儲存資料以及三塊磁盤儲存校驗信息。另外,只能向 RAID-Z 池中加入偶數倍的磁盤,而不能是奇數倍的。

巨大的儲存潛力

創建 ZFS 的時候,它是作為最後一個檔案系統[15]而設計的 。那時候,大多數檔案系統都是 64 位的,ZFS 的創建者決定直接跳到 128 位,等到將來再來證明這是對的。這意味著 ZFS 的容量大小是 32 位或 64 位檔案系統的 1600 億億倍。事實上,Jeff Bonwick(其中一個創建者)說:“完全填滿一個 128 位的儲存池所需要的能量[16],從字面上講,比煮沸海洋需要的還多。”

如何安裝 ZFS?

如果你想立刻使用 ZFS(開箱即用),那麼你需要安裝 FreeBSD[17] 或一個使用 illumos 內核的操作系統[18]illumos[19] 是 OpenSolaris 內核的一個克隆版本。

事實上,支持 ZFS 是一些有經驗的 Linux 用戶選擇 BSD 的主要原因[20]

如果你想在 Linux 上嘗試 ZFS,那麼只能在儲存檔案系統上使用。據我所知,沒有任何 Linux 發行版可以在根目錄上安裝 ZFS,實現開箱即用。如果你對在 Linux 上嘗試 ZFS 感興趣,那麼 ZFS on Linux 專案[4] 上有大量的教程可以指導你怎麼做。

附加說明

這篇文章論述了 ZFS 的優點。現在,讓我來告訴你一個關於 ZFS 很現實的問題。使用 RAID-Z 會很貴[21],因為你需要購買大量的磁盤來增大儲存空間。

你已經使用過 ZFS 了嗎?你的使用經驗是什麼樣的?請在下麵的評論中告訴我們。

如果你覺得這篇文章有趣,請花一分鐘的時間把它分享到社交媒體、極客新聞或 Reddit[22] 。


via: https://itsfoss.com/what-is-zfs/

作者:John Paul[24] 選題:lujun9972 譯者:ucasFL 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

赞(0)

分享創造快樂