フォルダを.tar.gzアーカイブにパックして圧縮しました。開梱後は、ほぼ2倍の大きさでした。
du -sh /path/to/old/folder = 263M
du -sh /path/to/extracted/folder = 420M
私はたくさん検索しましたが、メタデータを追加したり、他の奇妙なことをしたりすることで、タールが実際にこの問題を引き起こしていることがわかりました。
フォルダー内の2つのファイルとmd5sumの差分を作成しました。差分はまったくなく、チェックサムはまったく同じ値です。ただし、1つのファイルのサイズは元のファイルの2倍です。
root@server:~# du -sh /path/to/old/folder/subfolder/file.mcapm /path/to/extracted/folder/subfolder/file.mcapm
1.1M /path/to/old/folder/subfolder/file.mcapm
2.4M /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# diff /path/to/old/folder/subfolder/file.mcapm /path/to/extracted/folder/subfolder/file.mcapm
root@server:~#
root@server:~# md5sum /path/to/old/folder/subfolder/file.mcapm
root@server:~# f11787a7dd9dcaa510bb63eeaad3f2ad
root@server:~# md5sum /path/to/extracted/folder/subfolder/file.mcapm
root@server:~# f11787a7dd9dcaa510bb63eeaad3f2ad
別の方法を探すのではなく、それらのファイルのサイズを元のサイズに戻す方法を探しています。
どうすればそれを達成できますか?
[この答えは、GNU tarおよびGNU cp]と仮定しています)
差分はまったくなく、チェックサムはまったく同じ値です。ただし、1つのファイルのサイズは元のファイルの2倍です。
1.1M /path/to/old/folder/subfolder/file.mcapm 2.4M /path/to/extracted/folder/subfolder/file.mcapm
その.mcapm
ファイルはおそらく sparse です。アーカイブを作成するときは、-S
(--sparse
)tar
オプションを使用します。
例:
$ dd if=/dev/null seek=100 of=dummy
...
$ mkdir extracted
$ tar -zcf dummy.tgz dummy
$ tar -C extracted -zxf dummy.tgz
$ du -sh dummy extracted/dummy
0 dummy
52K extracted/dummy
$ tar -S -zcf dummy.tgz dummy
$ tar -C extracted -zxf dummy.tgz
$ du -sh dummy extracted/dummy
0 dummy
0 extracted/dummy
後でcp --sparse=always
を使用してファイルを「再スパース」することもできます。
$ dd if=/dev/zero of=junk count=100
...
$ du -sh junk
52K junk
$ cp --sparse=always junk junk.sparse && mv junk.sparse junk
$ du -sh junk
0 junk