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

 

完! 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM