從這篇文章瞭解到zfs的塊級去重功能? https://www.cnblogs.com/cjdty/p/16813040.html
那這個zfs的塊級去重功能有什麼用呢??
原文: https://www.cnblogs.com/itech/archive/2012/06/19/2555442.html
--------------------
ZFS與數據去重
ZFS提供了塊級別的去重技術,此種技術更適合通用的情況。且ZFS使用SHA256來計算hash簽名。
什麼時候去重,現在還是將來?
除了以上描述的文件級,塊級,字節級的區別外,去重還可以分爲同步(實時或內置)和異步(批處理或離線處理)。在同步去重中,重複文件在出現的時候即被去除,在異步去重中,文件已經存儲在磁盤上,然後通過後續的處理來去重(例如在夜間來處理)。異步去重典型地被用在擁有有限的cpu和多線程的存儲系統,最小化對日常工作的影響。但是如果cpu的性能足夠,同步去重是推薦的方法,因爲避免了無用的磁盤的寫操作。
ZFS去重是同步的去重,ZFS需要高性能的cpu和高度多線程支持的操作系統(例如solaris)。
如何使用ZFS的去重
使用非常的簡單,如果你有存儲池tank,你需要對tank使用zfs,則設置爲:
zfs set dedup=on tank
是否需要ZFS的去重的權衡
主要還是取決於你的數據。如果你的數據確實不包含重複,則開啓去重功能則會帶來額外的開銷且沒有任何的好處。但是如果你的數據包含重複,則使用zfs的去重可以節約空間而且提高性能。節約空間是顯而易見的,性能的提高是因爲減少了重複數據的寫磁盤消耗和內存頁的置換。
大部分的存儲環境都是多種數據的混合,zfs支持對有重複的部分開啓去重操作,例如你的存儲池包含了home目錄,虛擬機鏡像目錄,源代碼目錄。此時你可以設置如下:
zfs set dedup=off tank/home
zfs set dedup=on tank/vm
zfs set dedup=on tank/src
信任或驗證
如果兩個數據的hash相同,我們則認爲兩個數據是同一個數據,hash例如SHA256,兩個不同數據hash相同的可能性爲1/2^256, 是個很小的概率。當然zfs也提供了驗證的選項,此選項對兩個數據進行全比較來確定他們是否相同,如果不相同則處理,指定verify的語法如下:
zfs set dedup=verify tank
hash的選擇
因爲不同種類的hash所需要的運算也不相同,一種推薦的方法是使用較弱的hash(需要的運算較少)加verify來提供快速的去重,zfs對應的選項爲:
zfs set dedup=fletcher4,verify tank
不像SHA256,fletcher4不能被信任爲無碰撞,只適合與verify一起使用,verify來確保碰撞的處理。總的來說性能相對要好些。
通常如果不確定哪種的hash的效率跟高的話,即使用默認的設置dedup=on
擴展性和效率
大部分的去重方案都只能針對有限的數據,一般在TB等級,因爲他們需要去重數據表常駐在內存。ZFS對數據大大小沒有限制,可以處理PB級的數據。但是如果去重數據表常駐內存的話,性能比較好。