ZFS檔案系統

2021-06-16 07:41:10 字數 3251 閱讀 5743

本文**:

zfs (zettabyte file system)源自於sun microsystems為solaris作業系統開發的檔案系統。zfs是乙個具有高儲存容量、檔案系統與卷管理概念整合、嶄新的磁碟邏輯結構的輕量級檔案系統,同時也是乙個便捷的儲存池管理系統。zfs是乙個使用common development and distribution license (cddl)協議條款授權的開源專案。

zfs可提供簡單管理、事務性語義、端對端資料完整性以及極好的可伸縮性。zfs 並不是在現有技術的基礎上逐步改進而得到的,它是一種全新的資料管理方法。我們摒棄了 20 年來的傳統觀念,大大降低了源**的複雜性,建立了一種真正易於使用的儲存系統。

zfs 提供了池儲存模型,完全淘汰了卷的概念,並避免了與分割槽、置備、頻寬浪費和分散儲存相關的問題。數千個檔案系統可以利用同乙個公用儲存池,每個檔案系統只占用實際所需的空間量。儲存池中所有裝置的 i/o 組合頻寬對所有檔案系統都始終可用。

所有操作都是寫複製事務,因此盤上狀態始終有效。zfs 檔案系統不需要 fsck(1m)。每個塊都經過校驗和計算,以防止無提示資料損壞,並且資料在複製(映象或 raid)配置中可以自我修復。如果其中乙個副本損壞,zfs 會檢測到這種情況,並使用另乙個副本修復它。

zfs 引入了乙個新的資料複製模型,稱為 raid-z。它與 raid-5 類似,但採用可變條帶寬度來消除 raid-5 寫入漏洞(即由於資料和奇偶校驗更新之間出現意外斷電而導致條帶損壞)。所有 raid-z 寫操作都是完整條帶化寫操作。這樣,既沒有讀取-修改-寫入開銷,也沒有寫入漏洞,並且最重要的一點是不需要 nvram 硬體。zfs 偏愛廉價磁碟。

但由於廉價磁碟容易出現故障,因此 zfs 提供了磁碟清理功能。就像 ecc 記憶體清理一樣,其理念是讀取所有資料以檢測潛在錯誤,而這些錯誤仍是可更正的。清理操作將遍歷整個儲存池,以讀取每個塊的每個副本,根據其 256 位校驗和對其進行驗證,並在必要時進行修復。所有這些操作都是在儲存池執行和使用過程中進行的。

zfs 有乙個管道化 i/o 引擎,它在概念上與 cpu 管道類似。管道作用於 i/o 依賴關係圖,並提供記分板、優先順序、最終期限排程、失序發射和 i/o 聚合。使用 zfs i/o 管道,可以輕鬆處理使其他檔案系統瀕臨崩潰的 i/o 負載。

zfs 提供了無限制的常量時間快照和轉殖。快照是檔案系統的唯讀即時副本,而轉殖是快照的可寫副本。轉殖提供了一種極其節省空間的方法,可用於儲存工作區、軟體安裝和無盤客戶端等主要共享資料的許多副本。

zfs 備份和恢復由快照提供支援。任一快照都可生成完全備份,任意一對快照都可生成增量備份。增量備份效率很高,可用於遠端複製-例如每 10 秒傳送乙個增量更新。

在 zfs 中沒有任何限制。您可以擁有任意多個檔案、完整 64 位檔案偏移、無限制的鏈結、目錄條目、快照等等。

zfs 提供了內建壓縮。壓縮不但將磁碟空間的使用量降低了 2-3 倍,還將 i/o 量減少了 2-3 倍。因此,啟用壓縮實際上能夠提高某些工作負荷的執行速度。

除檔案系統外,zfs 儲存池可為需要原始裝置語義的應用程式提供卷。例如,zfs 卷可用作交換裝置。如果在交換卷上啟用壓縮,您將立即擁有壓縮虛擬記憶體。

zfs 管理既簡單又功能強大。有關更多資訊,請參見 zpool(1m) 和 zfs(1m) 手冊頁;並確保閱讀了簡要介紹的入門部分。

zfs 可輕鬆應對大多數工作負荷-讓我們現在就開始吧。

ricardo 的部落格:

freebsd

pawel jakub dawidek 正在將 zfs 移植到 freebsd。可以在以下位置找到 freebsd 資訊庫:

gcc 資訊

與所有 on 一樣,zfs 源**是使用 gcc 構建的,作為「陰影編譯」的一部分,用於檢測特定於 gcc 的警告。 不過,我們使用了一組稍做修改的警告,從而獲得目前所擁有的無錯誤的內部版本。您可以在用於 on 的編譯器包裝函式中檢視一些詳細資訊。特別地,我們使用了以下警告標誌:

-wall

-wno-unknown-pragmas

-wno-missing-braces

-wno-sign-compare

-wno-parentheses

-wno-uninitialized

-wno-implicit-function-declaration

-wno-unused

-wno-trigraphs

-wno-char-subscripts

-wno-switch

還使用 -std=gnu99 選項來強制執行 c99 相容性規則。如果使用上述相同的選項,毋庸置疑地會使移植變得更簡單。

建議的階段

進行 zfs 移植的方法有多種,下面列出的是建議執行的某些重要階段。這裡使用了源**概覽中的術語,因此,在進一步閱讀資訊之前,您應該大致了解 zfs 源**布局。

libzpool 和 ztest

libzpool 是 spa(storage pool allocator,儲存池分配器)和 dmu(data management unit,資料管理單元)的使用者空間移植,它包括較大百分比的相關源**。根據其設計,允許使用 ztest 進行使用者空間測試,還允許通過 zdb 進行除錯。它具有乙個方便的屬性,特定於核心的**已經將該屬性用作 zfs_context.h 的引數,這樣移植起來相對簡單。您可以在 usr/src/lib/libzpool/common 中找到這些介面(不能用 #define 實現的介面)的 solaris 埠。

如果您可以在乙個迴圈中成功執行 ztest 一整天而沒有出現任何問題,則可能移植了 80% 的核心**(儘管最難的 20% **仍未移植)。此過程還需要移植 zdb,它用作 ztest 的一部分。

zpool(1m) 和 zfs(1m)

下一步是獲取使用者空間管理工具 [zfs(1m)]( 和 zpool(1m),前者可使用資料集,後者可建立資料集。這實際上不會掛載檔案系統(可能需要 zpl),但是會建立使用者空間 -> 核心介面,並驗證 dsl 是否正常工作。

對於核心而言,需要建立 /dev/zfs 並支援 zfs_ioctl.c 中定義的 ioctl。

zvol

要執行的簡單核心內部使用者是 zvol(zfs volume,zfs 卷)介面。這將需要一些特定於作業系統的裝置資訊,但 dmu 介面非常簡單。請參見 zvol.c。

zfs 檔案系統

最後的障礙是最困難的,因為必須使用特定於作業系統的 vfs 介面從頭開始大規模寫入**。當前的 zpl **可以用作如何達成實現的理念指導,但它在極大程度上是特定於 solaris 的。有些理念(擴充套件屬性,nfsv4/nt acl)可能根本不會轉化為某些作業系統中的內容。

ZFS檔案系統

zfs zettabyte file system 源自於sun microsystems為solaris作業系統開發的檔案系統。zfs是乙個具有高儲存容量 檔案系統與卷管理概念整合 嶄新的磁碟邏輯結構的輕量級檔案系統,同時也是乙個便捷的儲存池管理系統。zfs是乙個使用common developm...

ZFS檔案系統介紹和掛載

zfs檔案系統介紹和掛載 一 zfs檔案系統介紹 1.1簡介 zfs檔案系統的英文名稱為zettabyte file system,也叫動態檔案系統 dynamic file system 是第乙個128位檔案系統。最初是由sun公司為solaris 10作業系統開發的檔案系統。作為opensola...

ZFS檔案系統資料恢復的方法

恢復資料的方法 python的實現 zfs是乙個非常穩定可靠的檔案系統,但是還是有一定機率會出現系統壞掉,使用者資料不能讀取出來的情況。如果乙個zfs儲存同時連線到2個控制器,兩個控制器同時zpool import池,由於元資料覆蓋,就會出現整個檔案系統壞掉。首先應該參考官網 其中修復 zfs 儲存...