[dedup util]
dedup util是一款開源的輕量級檔案打包工具,它基於塊級的重複資料刪除技術,可以有效縮減資料容量,節省使用者儲存空間。目前已經在Sourceforge上建立項目,並且源碼正在不斷更新中。該工具產生的資料包內部資料部局(layout)如下:
--------------------------------------------------
| header | unique block data | file metadata |
--------------------------------------------------
資料包由三部分組成:檔案頭(header)、唯一資料區塊集(unique block data)和邏輯檔案中繼資料(file metadata)。其中,header為一個結構體,定義了資料區塊大小、唯一資料區塊數量、資料區塊ID大小、包中檔案數量、中繼資料在包中的位置等元資訊。檔案頭後緊接就儲存著所有唯一的資料區塊,大小和數量由檔案頭中元資訊指示。在資料區塊之後,就是資料包中檔案的邏輯表示中繼資料,由多個實體組成,結構如下所示,一個實體表示一個檔案。解包時根據檔案的中繼資料,逐一提取資料區塊,還原出當初的物理檔案。
邏輯檔案的中繼資料表示:
-----------------------------------------------------------------
| entry header | pathname | entry data | last block data |
-----------------------------------------------------------------
邏輯檔案的實體頭中記錄著檔案名稱長度、資料區塊數量、資料區塊ID大小和最後一個資料區塊大小等資訊。緊接著是檔案名稱資料,長度在實體頭中定義。檔案名稱資料之後,儲存著一組唯一資料區塊的編號,編號與唯一資料區塊集中的資料區塊一一對應。最後儲存著檔案最後一個資料區塊,由於這個資料區塊大小通常比正常資料區塊小,重複機率非常小,因此單獨儲存。
更詳細資料請參見 http://blog.csdn.net/liuben/archive/2010/01/09/5166538.aspx
dedup util目前處於pre-alpha開發階段,支援檔案打包、解包、追加檔案、刪除檔案、羅列包中檔案等功能。初步的測試結果顯示,即使在不明確資料是否具備較高重複率的情況下,dedup技術也能較明顯地減少資料包的資料量,產生的資料包比Tar工具的要小。
[源碼]
項目URL: https://sourceforge.net/projects/deduputil
SVN程式碼程式庫URL: https://deduputil.svn.sourceforge.net/svnroot/deduputil
[編譯]
1.擷取源碼
svn co https://deduputil.svn.sourceforge.net/svnroot/deduputil deduputil
2.安裝libz-dev
apt-get install libz-dev
如果不支援apt-get,請採用其他途徑安裝。
3.編譯安裝
./gen.sh
./configure
make
make install
[命令列]
Usage: dedup [OP
TION...] [FILE]...
dedup tool packages files with deduplicaton technique.
Examples:
dedup -c foobar.ded foo bar # Create foobar.ded from files foo and bar.
dedup -a foobar.ded foo1 bar1 # Append files foo1 and bar1 into foobar.ded.
dedup -r foobar.ded foo1 bar1 # Remove files foo1 and bar1 from foobar.ded.
dedup -t foobar.ded # List all files in foobar.ded.
dedup -x foobar.ded # Extract all files from foobar.ded.
Options:
-c, --creat create a new archive
-x, --extract extrace files from an archive
-a, --append append files to an archive
-r, --remove remove files from an archive
-t, --list list files in an archive
-z, --compress filter the archive through zlib compression
-b, --block block size for deduplication, default is 4096
-H, --hashtable hashtable backet number, default is 10240
-d, --directory change to directory, default is PWD
-v, --verbose print verbose messages
-h, --help give this help list
[運行平台]
目前僅在Linux平台開發測試,其他平台未作評測。
[TODO]
1. 資料區塊碰撞問題
雖然MD5產生的碰撞的機率非常小,但仍然存在發生小機率事件的可能性。需要採用技術手段解決碰撞問題,這樣才能保證資料安全,讓使用者放心使用。
2. 變長資料區塊
目前是定長資料區塊的實現,技術上較為簡單,變長資料區塊可能會獲得更高的資料壓縮率。
3. 相似檔案識別
如果兩個檔案只有很小的差別,比如在某處插入了若干位元組,找出這些資料區塊並單獨處理,可能會提高資料壓縮率。
[作者]
劉愛貴,專註於儲存技術,關注資料採礦和分散式運算,Aigui.Liu@gmail.com
2010.06.02