2010年6月9日水曜日

圧縮せずにファイルサイズを小さくしてコピーする方法

GNUのcpコマンドには、sparseオプションがありこれを使うと、
ファイルとしてはそのままに、実際にディスクを使用する量を削減することができる可能性があります。

使い方は、以下のような感じです。

$ dd if=/dev/zero of=hoge.img bs=1024 count=102400
$ cp --sparse=always hoge.img hoge.img.sparse
$ ls -lhs
合計 101M
101M -rw-r--r-- 1 igawa igawa 100M 2010-06-08 22:16 hoge.img
0 -rw-r--r-- 1 igawa igawa 100M 2010-06-08 22:17 hoge.img.sparse
^^^^実際にディスクを使用しているサイズ。(今回の場合、ゼロバイト!)

実際にディスクを使用しているサイズは、上記のようにlsコマンドの「s」オプションで確認できます。

さらに、sparse fileのまま、tarボールにすることもできます。

$ tar -Szcvf hoge.img.sparse.tar.gz hoge.img.sparse
$ ls -lhs hoge.img.sparse.tar.gz
4.0K -rw-r--r-- 1 igawa igawa 139 2010-06-08 22:32 hoge.img.sparse.tar.gz


普通にtarボールにした場合

$ tar -zcvf hoge.img.sparse.tar.gz hoge.img.sparse
hoge.img.sparse
$ ls -lhs hoge.img.sparse.tar.gz
104K -rw-r--r-- 1 igawa igawa 100K 2010-06-08 22:35 hoge.img.sparse.tar.gz


sparse fileについては、こちらが参考になると思います。
http://en.wikipedia.org/wiki/Sparse_file

要は、何もデータが無い領域は、削除して「あるかのように見せる」ということをしている様です。
なので、通常のファイルの場合は削減効果はあまり期待できません。

削減を期待できるのは、仮想OSの仮想ディスクファイルや、メモリダンプイメージなどでしょう。

0 件のコメント:

コメントを投稿