一、簡介
1、什么是zfs文件系統
ZFS文件系統的英文名稱為Zettabyte File System,也叫動態文件系統(Dynamic File System),是第一個128位文件系統。最初是由Sun公司為Solaris 10操作系統開發的文件系統。作為OpenSolaris開源計划的一部分,ZFS於2005年11月發布,被Sun稱為是終極文件系統,經歷了 10 年的活躍開發。而最新的開發將全面開放,並重新命名為 OpenZFS。
2、ZFS具有三個主要涉及目標
數據完整性:所有數據都包括數據的校驗和。寫入數據時,將計算並寫入校驗和。以后再讀回該數據時,將再次計算校驗和。如果校驗和不匹配,則檢測到數據錯誤。 當數據冗余可用時,ZFS將嘗試自動更正錯誤。
池存儲:將物理存儲設備添加到池中,並從該共享池中分配存儲空間。所有文件系統都可以使用空間,可以通過向池中添加新的存儲設備來增加空間。
性能:多種緩存機制可提高性能。 ARC是基於內存的高級讀取緩存。可以在L2ARC中添加基於磁盤的第二級讀取緩存 ,並在ZIL中提供基於磁盤的同步寫入緩存 。
3、ZFS與其他文件系統有什么不同那?
ZFS與以前的任何文件系統都有顯着不同,因為ZFS不僅僅是文件系統。將傳統上獨立的卷管理器和文件系統角色結合在一起,為ZFS提供了獨特的優勢。文件系統現在知道了磁盤的基礎結構。傳統文件系統一次只能在單個磁盤上創建。如果有兩個磁盤,則必須創建兩個單獨的文件系統。在傳統的硬件RAID中在配置中,通過為操作系統提供由多個物理磁盤提供的空間組成的單個邏輯磁盤,可以避免此問題,操作系統在其上面放置了文件系統。即使在像GEOM提供的軟件RAID解決方案 的情況下, 位於RAID轉換之上的UFS文件系統也認為它正在處理單個設備。 ZFS的卷管理器和文件系統的組合解決了這個問題,並允許創建許多共享可用存儲池的文件系統。ZFS的最大優勢之一對磁盤物理布局的了解是,當將其他磁盤添加到池中時,現有文件系統可以自動增長。然后,此新空間可用於所有文件系統。 ZFS還具有可應用於每個文件系統的許多不同屬性,與創建單個文件系統相比,創建多個不同文件系統和數據集具有許多優勢。
二、ZFS特性術語
1、ZFS特性概況
-
-
- 存儲池
- 寫時拷貝 copy-on-write
- 快照
- 數據完整性驗證和自動修復
- RAID-Z
- 最大單個文件大小為 16 EB(1 EB = 1024 PB)
- 最大 256 千萬億(256*1015 )的 ZB(1 ZB = 1024 EB)的存儲
-
2、存儲池
ZFS結合了文件系統和卷管理器特性,與其他文件系統不同,ZFS可以創建跨越一系列硬盤或池的文件系統,還可以通過添加硬盤來增大池的存儲容量,ZFS可以進行分區和格式化
一個池由一個或多個vdev組成
3、寫時復制技術
與傳統文件系統不同,當在ZFS上覆蓋數據室,新數據將被寫入不同的塊,而不是原地覆蓋,僅在完成寫入后,才更新元數據以指向新位置,如果發生大體量寫入發送斷電或系統崩潰,文件的整個原始內容仍然可用,並且不完整的寫入將被丟棄,這也意味這意外關閉后,ZFS不需要運行fsck來檢查和修復文件系統。
4、快照
寫時復制使得 ZFS 有了另一個特性: 快照(snapshots)。ZFS 使用快照來跟蹤文件系統中的更改。 快照 包含文件系統的原始版本(文件系統的一個只讀版本),實時文件系統則包含了自從快照創建之后的任何更改。沒有使用額外的空間。因為新數據將會寫到實時文件系統新分配的塊上。如果一個文件被刪除了,那么它在快照中的索引也會被刪除。所以,快照主要是用來跟蹤文件的更改,而不是文件的增加和創建。
快照可以掛載成只讀的,以用來恢復一個文件的過去版本。實時文件系統也可以回滾到之前的快照。回滾之后,自從快照創建之后的所有更改將會丟失。
5、數據完整性驗證和自動修復
當向 ZFS 寫入新數據時,會創建該數據的校驗和允許將文件系統分叉為新的數據集。在讀取數據的時候,使用校驗和進行驗證。如果前后校驗和不匹配,那么就說明檢測到了錯誤,然后,ZFS 會嘗試從任何的冗余(RAID-Z或鏡像)中恢復數據,驗證命令為scrub。
6、重復數據刪除
checksums的使用使得檢測重復數據成為可能,通過重復數據刪除,可增加現有相同塊的參考計數,從而節省存儲空間,為了檢測重復塊,重復數據刪除表(DDT)被保留在內存中,該表包含了唯一的校驗和,寫入數據時,將計數校驗和並將其與表進行比較,如果匹配,就使用該塊,但DDT會消耗內存,一般1TB重復數據刪除需要5-6GB的內存,影響性能,所以可以使用L2ARC存儲DDT,從而提供中間地帶,還有不考慮內存和磁盤的話,可以考慮壓縮來解決空格鍵,從而無需額外的內存。
7、數據集
ZFS文件系統,卷,快照或克隆的通用術語,每個數據據都有一個格式唯一的名稱poolname/path@snapshot
8、RAIDZ
ZFS不需要任何額外軟件或硬件就可以處理RAID,這個就是RAID-Z,RAID-Z是RAID-5的一個變種,不過它克服了RAID-5的寫漏洞(意外重啟,數據和校驗不同步,條帶寫入數據時發送意外斷電,奇偶校驗將跟部分數據不同步,前面寫入的無效),RAID-Z使用了可變寬的RAID條帶技術,因此所有的寫都是全條帶寫入。RAID-Z有三個級別RAID-Z1、RAID-Z2、RAID-Z3。
三個級別:
RAIDZ1:與RAID5類似,一重機構校驗,至少需要三塊磁盤;
RAIDZ2:與RAID6類似,雙重奇偶校驗,至少需要四個磁盤;
RAIDZ3:ZFS特有的,三重奇偶校驗,至少需要5個磁盤;
三、freenas介紹
1、了解freenas
freenas是一種免費的開源網絡存儲(NAS)軟件設備,這意味着您可以使用freenas通過基於文件的共享協議共享數據
支持SMB/CIFS(windows)、NFS、AFP(apple文件共享)、FTP、iscsi(塊共享)
freenas使用了ZFS(openZFS)文件來存儲,管理和保護數據,ZFS提供了高級功能,例如快照可以保留文件的舊版本,增量遠程備份以使數據安全地保存在另一台設備上而無需進行大量文件傳輸,以及智能壓縮等
freenas是使用高度安全的freeBSD操作系統,並遵循開發中的安全最佳實踐
freenas支持256位加密以防止在從系統中物理刪除驅動器時讀取驅動器
2、freenas卷結構
那么在創建存儲池時,可以指定存儲池結構(volume layout)也叫卷結構,如下可以選擇幾種結構
stripe:與RAID0類似,磁盤條帶,至少需要一個磁盤;
mirror:與RAID1類似,磁盤鏡像,至少需要兩個磁盤;
RAIDZ1:與RAID5類似,一重機構校驗,至少需要三塊磁盤;
RAIDZ2:與RAID6類似,雙重奇偶校驗,至少需要四個磁盤;
RAIDZ3:ZFS特有的,三重奇偶校驗,至少需要5個磁盤;
log(ZIL):高速寫緩存設備,至少需要一個專用設備,建議使用具有停電保護的SSD;
Cache(L2ARC):高速讀緩存設備,需要至少一個專用設備,建議使用具有停電保護的SSD;
Spare:熱備磁盤,當正在使用的磁盤發送故障后,Spare磁盤將馬上代替此故障盤。
2、性能對比
strpe>mirror
strpe>RAIDZ1>RAIDZ2>RAIDZ3
3、數據可靠性
mirror>stripe
RAIDZ3>RAIDZ2>RAIDZ1>Stripe
4、詳細說明
Stripe是把連續的數據分割成相同大小的數據塊,把每段數據分別寫入到陣列中的不同磁盤上的方法。簡單的說,條帶是一種將多個磁盤驅動器合並為一個卷的方法。這就能使多個進程同時訪問數據的多個不同部分而不會造成磁盤沖突,而且在需要對這種數據進行順序訪問的時候可以獲得最大程度上的 I/O 並行能力,從而獲得非常好的性能。但是,這種存儲池結構沒有數據冗余,一旦Stripe中的任意一塊磁盤出現問題,那么Stripe中存儲的所有數據都隨風而去了。
Mirror是冗余的一種類型,通過磁盤數據鏡像實現數據冗余,ZFS對鏡像中的磁盤數量沒有限制,在Mirror中的磁盤上存儲互為備份的數據。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此Mirror可以提高讀取性能。這是存儲池結構中單位成本最高的,但提供了很高的數據安全性和可用性。當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,此時可以替換失效磁盤進行數據恢復。
RAIDZ是ZFS提供的數據冗余方式,同時解決硬件RAID的一些固有限制,例如在硬件控制器提供警報之前隨時間寫入的寫入漏洞和損壞數據。ZFS提供三種冗余級別,稱為RAIDZ*,其中RAIDZ之后的數字表示每個vdev可丟失多少個磁盤而不丟失數據。下面是一些關於RAIDZ的官方建議:
-
- RAIDZ1擁有最大的磁盤空間,當數據以大塊(128K或更多)寫入和讀取時,性能會很好。
- 與RAIDZ1相比,RAIDZ2提供更好的數據可用性和更好的平均數據丟失時間(MTTDL),而RAIDZ3更比RADIZ2安全。更多的校驗鏡像消耗更多的磁盤空間,但通常小型隨機讀取會更好。為了獲得更好的性能,鏡像強烈支持任何RAIDZ,特別是對於大容量,不可緩存的隨機讀取負載。
- 不建議每個vdev使用多於12個磁盤。每個vdev的建議磁盤數量介於3和9之間。如果有更多磁盤,請使用多個vdevs。
- 一些較早的ZFS文檔建議每種類型的RAIDZ都需要一定數量的磁盤,以實現最佳性能。
- ZFS專為商用磁盤而設計,因此不需要RAID控制器。雖然ZFS也可以與RAID控制器一起使用,但建議將控制器置於HBA模式,以便ZFS完全控制磁盤。
- 當存儲池容量達到90%時,ZFS會從性能切換到基於空間的優化,這對性能有很大的影響。為了獲得最大寫入性能並防止驅動器更換出現問題,請在池達到80%之前添加更多容量。如果在存儲池中提供了iSCSI服務,建議不要讓池的容量超過50%以防止碎片問題。
- 考慮每個vdev使用的磁盤數時,請考慮磁盤的大小以及重新同步所需的時間,即重建vdev的過程。vdev的大小越大,重新同步時間越長。在更換RAIDZ中的磁盤時,在重新同步過程完成之前,另一個磁盤可能會失效。如果故障磁盤的數量超過RAIDZ類型的每個vdev所允許的數量,則池中的數據將丟失。所以,RAIDZ1不推薦用於大小超過1TB的驅動器。
- 建議在創建vdev時使用相同大小的驅動器。盡管ZFS可以使用不同大小的磁盤創建vdev,但其容量將受到最小磁盤大小的限制。
引用參考:
https://www.xiangzhiren.com/archives/283
https://www.ixsystems.com/documentation/freenas/11.2-U6/intro.html
https://www.sohu.com/a/255432210_100034897
https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/zfs.html
轉載請注明出處:https://www.cnblogs.com/zhangxingeng/p/11646542.html