2011年7月16日土曜日

ファイルをスパース(sparse)化する方法

主に、Linux のクラッシュダンプファイル、または、プロセスのコアファイルを、誰かから送付してもらった場合、本来スパースファイルであるものが、送付方法によっては非スパース化してしまって、ディスクを浪費してしまう場合があります。
そんな局面で、スパースファイルに戻す方法です。
# dd if=/dev/zero of=test.dd bs=4096 count=1000    ※実験のためオールゼロファイル作成
1000+0 records in
1000+0 records out
4096000 bytes (4.1 MB) copied, 0.092697 seconds, 44.2 MB/s

# du -hs test.dd 
4.0M    test.dd

# cp -p --sparse=always test.dd test.dd.sparsed

# du -hs test.dd.sparsed    ※確認
0       test.dd.sparsed
書くまでもないですが、圧縮形式の vmcore には効果が無いですから、上記の操作でディスク節約を試みる前に、file コマンドで形式を確認したほうがいいです。
# file vmcore 
vmcore: data    ※これだったらダメ
なお、逆に誰かにダンプやコアファイルを送付する場合は、次のように tar の S オプションをつけてセーブすると親切です。親切かどうかチェック(相手のレベルをチェック)してたりします。(^ー^;>
# tar zcfS vmcore.tgz ./127.0.0.1-2010-08-31-23:27:08/vmcore
./127.0.0.1-2010-08-31-23:27:08/ の部分も小さな親切になります。

2011-11-27追記
カーネルのクラッシュダンプや core 以外にも、KVM などの仮想マシンで使う仮想ディスクファイルもスパースなので、上記方法が役に立つ (応用できる) 場合があるかと思います。
次のURLの方のように、仮想マシン上からゼロ書き込み後に cp --sparse=always でスパース化処理すれば、理論上は仮想ディスクファイルが縮小できる場合があるはず。
http://www.syuhitu.org/other/skipspace/skipspace.html

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ