歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在 Linux 上運行 ZFS

在 Linux 上運行 ZFS

日期:2017/2/28 16:18:13   编辑:Linux教程

簡介: 盡管 ZFS 所屬的操作系統未來有一定的風險,但是不妨礙它成為最先進、功能最豐富的文件系統之一。它合並了可變塊大小、壓縮、加密、重復數據刪除、快照、克隆以及(顧名思義)對大容量的支持。了解 ZFS 背後的概念,並了解目前如何在使用用戶空間文件系統(Filesystem in Userspace,FUSE)的 Linux 上使用 ZFS。

Linux 與文件系統具有有趣的關系。因為 Linux 是開放式的,所以它往往是下一代文件系統和創新文件系統理念的關鍵開發平台。兩個有趣的最新示例包括可大規模擴展的 Ceph 和連續快照文件系統 nilfs2(當然,主力文件系統,比如第四個擴展文件系統 [ext4] 的演化)。它還可以運行一些舊的文件系統 — DOS VFAT、Macintosh(HPFS)、VMS ODS-2 和 Plan-9 的遠程文件系統協議。在 Linux 支持的所有文件系統中,有一個您可能會因其實現的功能而非常感興趣:Oracle 的 Zettabyte 文件系統(Zettabyte File System,ZFS)。

ZFS 是由 Sun Microsystems(在 Jeff Bonwick 下)設計和開發的,在 2004 年首次公布,並在 2005 年集成到 Sun Solaris 中)。雖然將最流行的開放式操作系統與談論最多的、功能最豐富的文件系統配對在一起是最理想的匹配,但是許可證問題限制了集成。Linux 受 GNU 公共許可證(General Public License,GPL)保護,而 ZFS 是遵循由 Sun 的通用開發和發布許可證(Common Development and Distribution License,CDDL)的。這些許可證協議的目標不同,各自的限制會有些沖突。所幸,這並不意味著您作為 Linux 用戶不能享受 ZFS 及其提供的功能。

本文探究了在 Linux 中使用 ZFS 的兩種方法。第一種使用了用戶空間文件系統(Filesystem in Userspace,FUSE)系統來推動 ZFS 文件系統到用戶空間以便避免許可證問題。第二種方法是一個 ZFS 本機端口,用於集成到 Linux 內核,同時避免知識產權問題。

ZFS 簡介

將 ZFS 稱為文件系統有點名不副實,因為它在傳統意義上不僅僅是個文件系統。ZFS 將邏輯卷管理器的概念與功能豐富的和可大規模擴展的文件系統結合起來。讓我們開始先探索一些 ZFS 所基於的原則。首先,ZFS 使用池存儲模型,而不是傳統的基於卷的模型。這意味著 ZFS 視存儲為可根據需要動態分配(和縮減)的共享池。這優於傳統模型,在傳統模型中,文件系統位於卷上,使用獨立卷管理器來管理這些資產。ZFS 內嵌入的是重要功能集(如快照、即寫即拷克隆、連續完整性檢查和通過 RAID-Z 的數據保護)的實現。更進一步,可以在 ZFS 卷的頂端使用您自己最喜愛的文件系統(如 ext4)。這意味著您可以獲得那些 ZFS 的功能,如獨立文件系統中的快照(該文件系統可能並不直接支持它們)。

但是 ZFS 不只是組成有用文件系統的功能集合。相反,它是構建出色文件系統的集成和補充功能的集合。讓我們來看看其中的一些功能,然後再看看它們的一些實際應用。

存儲池

正如前面所討論的,ZFS 合並了卷管理功能來提取底層物理存儲設備到文件系統。ZFS 對存儲池(稱為 zpools)進行操作,而不是直接查看物理塊設備,存儲池構建自虛擬驅動器,可由驅動器或驅動器的一部分物理地進行表示。此外,可以動態構造這些池,甚至這些池正在活躍地使用時也可以。

即寫即拷

ZFS 使用即寫即拷模型來管理存儲中的數據。雖然這意味著數據永遠不會寫入到位(從來沒有被覆蓋),而是寫入新塊並更新元數據來引用數據。即寫即拷有利的原因有多個(不僅僅是因為它可以啟用的快照和克隆等一些功能)。由於從來不覆蓋數據,這可以更簡單地確保存儲永遠不會處於不一致的狀態(因為在新的寫入操作完成以後較早的數據仍保留)。這允許 ZFS 基於事務,且更容易實現類似原子操作等的功能。

即寫即拷設計的一個有趣的副作用是文件系統的所有寫入都成為順序寫入(因為始終進行重新映射)。此行為避免存儲中的熱點並利用順序寫入的性能(比隨機寫入更快)。

數據保護

可以使用 ZFS 的眾多保護方案之一來保護由虛擬設備組成的存儲池。您不但可以跨兩個或多個設備(RAID 1)來對池進行鏡像,通過奇偶校驗來保護該池(類似於 RAID 5),而且還可以跨動態帶區寬度(後面詳細介紹)來鏡像池。基於池中設備數量,ZFS 支持各種不同的的奇偶校驗方案。例如,您可以通過 RAID-Z (RAID-Z 1) 來保護三個設備;對於四個設備,您可以使用 RAID-Z 2(雙重奇偶校驗,類似於 RAID6)。對於更大的保護來說,您可以將 RAID-Z 3 用於更大數量的磁盤進行三重奇偶校驗。

為提高速度(不存在錯誤檢測以外的數據保護),您可以跨設備進行條帶化(RAID 0)。您還可以創建條帶化鏡像(來鏡像條帶化設備),類似於 RAID 10。

ZFS 的一個有趣屬性隨 RAID-Z、即寫即拷事務和動態條帶寬度的組合而來。在傳統的 RAID 5 體系結構中,所有磁盤都必須在條帶內具有其自己的數據,或者條帶不一致。因為沒有方法自動更新所有磁盤,所以這可能產生眾所周知的 RAID 5 寫入漏洞問題(其中在 RAID 集的驅動器中條帶是不一致的)。假設 ZFS 處理事務且從不需要寫入到位,則寫入漏洞問題就消除了。此方法的另外一個便捷性體現在磁盤出現故障且需要重建時。傳統的 RAID 5 系統使用來自該集中其他磁盤的數據來重建新驅動器的數據。RAID-Z 遍歷可用的元數據以便只讀取有關幾何學的數據並避免讀取磁盤上未使用的空間。隨著磁盤變得更大以及重建次數的增加,此行為變得更加重要。

校驗和

雖然數據保護提供了在故障時重新生成數據的能力,但是這並不涉及處於第一位的數據的有效性。ZFS 通過為寫入的每個塊的元數據生成 32 位校驗和(或 256 位散列)解決了此問題。在讀取塊時,將驗證此校驗和以避免靜默數據損壞問題。在有數據保護(鏡像或 AID-Z)的卷中,可自動讀取或重新生成備用數據。

在 ZFS 上校驗和與元數據存儲在一起,所以可以檢測並更正錯位寫入 — 如果提供數據保護(RAID-Z)—。

快照和克隆

由於 ZFS 的即寫即拷性質,類似快照和克隆的功能變得易於提供。因為 ZFS 從不覆蓋數據而是寫入到新的位置,所以可以保護較早的數據(但是在不重要的情況下被標記為刪除以逆轉磁盤空間)。快照 就是舊塊的保存以便及時維護給定實例中的文件系統狀態。這種方法也是空間有效的,因為無需復制(除非重新寫入文件系統中的所有數據)。克隆 是一種快照形式,在其中獲取可寫入的快照。在這種情況下,由每一個克隆共享初始的未寫入塊,且被寫入的塊僅可用於特定文件系統克隆。

可變塊大小

傳統的文件系統由匹配後端存儲(512 字節)的靜態大小的塊組成。ZFS 為各種不同的使用實現了可變塊大小(通常大小達到 128KB,但是您可以變更此值)。可變塊大小的一個重要使用是壓縮(因為壓縮時的結果塊大小理想情況下將小於初始大小)。除了提供更好的存儲網絡利用外,此功能也使存儲系統中的浪費最小化(因為傳輸更好的數據到存儲需要更少的時間)。

在壓縮以外,支持可變塊大小還意味著您可以針對所期望的特定工作量優化塊大小,以便改進性能。

其他功能

ZFS 並入了許多其他功能,如重復數據刪除(最小化數據重復)、可配置的復制、加密、緩存管理的自適應更換緩存以及在線磁盤清理(標識並修復在不使用保護時可以修復的潛在錯誤)。它通過巨大的可擴展性來實現該功能,支持 16 千兆兆個字節的可尋址存儲(264 字節)。

Copyright © Linux教程網 All Rights Reserved