1. 前言
ZFS文件系統是一種革命性的新文件系統,它從根本上改變了文件系統的管理方式,具有其他任何現有文件系統都沒有的特性和優點。ZFS是健壯的、可伸縮的、易于管理的。
ZFS文件系統是什么
2. ZFS池存儲
ZFS使用存儲池的概念來管理物理存儲。歷史上,文件系統構建在單個物理設備之上。為了處理多個設備并提供數據冗余,引入了卷管理器的概念來提供單個設備的表示,這樣就不需要修改文件系統來利用多個設備。這種設計增加了另一層復雜性,并最終阻止了某些文件系統的發展,因為文件系統無法控制虛擬卷上數據的物理位置。
ZFS池存儲
ZFS完全消除了卷管理。ZFS將設備聚合到一個存儲池中,而不是強制您創建虛擬卷。存儲池描述了存儲的物理特征(設備布局、數據冗余等),并充當可以創建文件系統的任意數據存儲。文件系統不再局限于單個設備,允許它們與池中的所有文件系統共享磁盤空間。您不再需要預先確定文件系統的大小,因為文件系統會在分配給存儲池的磁盤空間內自動增長。當添加新存儲時,池中的所有文件系統都可以立即使用額外的磁盤空間,而無需進行額外的工作。在許多方面,存儲池的工作類似于虛擬內存系統:當將內存DIMM添加到系統中時,操作系統不會強制您運行命令來配置內存并將其分配給各個進程。系統上的所有進程都會自動使用額外的內存。
3. 事務性語義
ZFS是一個事務性文件系統,這意味著文件系統狀態在磁盤上總是一致的。傳統的文件系統會在適當的位置覆蓋數據,這意味著如果系統在分配數據塊和將其鏈接到某個目錄之間失去動力,那么文件系統將處于不一致的狀態。歷史上,這個問題是通過使用fsck命令來解決的。該命令負責檢查和驗證文件系統狀態,并嘗試修復過程中的任何不一致。這個文件系統不一致的問題給管理員帶來了巨大的痛苦,并且fsck命令從來不能保證修復所有可能的問題。最近,文件系統引入了日志記錄的概念。日志記錄過程將動作記錄在單獨的日志中,如果發生系統崩潰,可以安全地重播這些日志。這個過程引入了不必要的開銷,因為數據需要寫兩次,經常會導致一組新的問題,比如當日志不能正確重播時。
事務性語義
在事務性文件系統中,數據是使用寫時拷貝語義來管理的。數據永遠不會被覆蓋,任何操作序列要么被完全提交,要么被完全忽略。因此,文件系統永遠不會因意外斷電或系統崩潰而損壞。盡管最近編寫的數據片段可能丟失,但文件系統本身始終是一致的。此外,同步數據(使用O_DSYNC標志寫入)總是保證在返回之前寫入,因此它永遠不會丟失。
4. 校驗和和自修復數據
使用ZFS,所有數據和元數據都使用用戶可選擇的校驗和算法進行驗證。由于卷管理層和傳統文件系統設計的需要,提供校驗和驗證的傳統文件系統在每個塊的基礎上執行校驗和驗證。傳統的設計意味著某些失敗,例如將一個完整的塊寫入一個錯誤的位置,可能導致數據不正確,但是沒有校驗和錯誤。ZFS校驗和的存儲方式可以檢測到這些故障,并可以優雅地從故障中恢復。所有校驗和驗證和數據恢復都在文件系統層執行,對應用程序是透明的。
此外,ZFS還提供了自修復數據。ZFS支持具有不同程度數據冗余的存儲池。當檢測到一個壞數據塊時,ZFS從另一個冗余副本中獲取正確的數據并修復壞數據,用正確的數據替換它。
5. 無與倫比的可伸縮性
ZFS文件系統的一個關鍵設計元素是可伸縮性。文件系統本身是128位的,允許256千兆字節的存儲。所有元數據都是動態分配的,因此在第一次創建文件系統時,不需要預先分配索引節點或以其他方式限制文件系統的可伸縮性。所有的算法都考慮到了可伸縮性。目錄最多可以有
無與倫比的可伸縮性
本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下鏈接:
https://www.linuxrumen.com/rmxx/1535.html