【轉】ZFS與數據去重 ZFS與數據去重

 

從這篇文章瞭解到zfs的塊級去重功能? https://www.cnblogs.com/cjdty/p/16813040.html

那這個zfs的塊級去重功能有什麼用呢??

 

 

 

原文: https://www.cnblogs.com/itech/archive/2012/06/19/2555442.html

--------------------

 

ZFS與數據去重

 
http://hub.opensolaris.org/bin/view/Community+Group+zfs/WebHome
 

 

 
ZFS與數據去重
 
什麼是Deduplication?
Deduplication是消除重複數據的過程。去重過程可以基於file-level文件級,block-level塊級或者byte-level字節級。使用非常高可能性的hash算法來唯一標識數據塊(文件,塊,字節)。當使用安全hash,例如SHA256時,hash碰撞的可能性爲2的256次方,2\^256 = 10\67 或者表示爲0.00000000000000000000000000000000000000000000000000000000000000000000000000001。
 
選擇哪個等級的去重,files,blocks,bytes?
數據可以在文件級,塊級,字節級被去重。
 
文件級的去重對文件作爲整體來計算hash簽名,如果處理的是自然的文件,則此方法需要的消耗最小,但是缺點是對文件的任何修改都需要重新計算文件的hash簽名,即對文件的任何修改,將使得此文件之前節約的空間消失,因爲兩個文件將不再相同。此中方法比較適合類似於文件JPEG,MPEG,但是對於像虛擬機鏡像(大文件)文件將無效,因爲即使他們只是很小的一部分不同,但是文件級別他們將是不同的文件。
 
塊級別的去重(相同大小的塊),相比文件級的去重,需要更多的計算消耗,但是他能夠很好地對像虛擬機鏡像類似的大文件去重。大部分的虛擬機鏡像文件是重複數據,例如鏡像文件中的操作系統部分。使用塊級的去重將使得只有鏡像特別的數據才佔用額外的空間,相同的數據將共享。
 
字節級別的去重,將需要更多的計算消耗來決定重複數據的開始和結束區域,不管怎麼說,此方法對mail服務器來說是理想的選擇,例如一個郵件的附件可能出現很多次,但是使用塊級別去重時他們並不能被優化。此類型的去重一般用來一些應用程序的去重中,例如exchangeserver,因爲應用程序知道他管理的數據,可以在內部容易地去重。
 

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級的數據。但是如果去重數據表常駐內存的話,性能比較好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章