TAR ファイルがその内容よりも小さいのはなぜですか?
質問
アーカイブしているディレクトリがあります。
$ du -sh oldcode
1400848
$ tar cf oldcode.tar oldcode
つまり、ディレクトリは1.4GBになります。ただし、ファイルはかなり小さくなります。
$ ls -l oldcode.tar
-rw-r--r-- 1 ieure ieure 940339200 2002-01-30 10:33 oldcode.tar
たったの897mb。いかなる方法でも圧縮されていません。
$ file oldcode.tar
oldcode.tar: POSIX tar archive
tar ファイルが内容よりも小さいのはなぜですか?
解決
あなたはので、ファイルシステムの動作方法の違いを取得します。
一言で言えば、あなたのディスクがクラスタから作られています。さんが言わせて - - 4キロバイト各クラスタには、一定の大きさを持っています。あなたはこのように1キロバイトのファイルを保存する場合は、クラスタ3キロバイトは未使用となります。正確な詳細は、使用するファイルシステムの種類によって異なりますが、ほとんどのファイルシステムがそのように動作します。
3キロバイト無駄なスペースは、単一のファイルのためにあまりないですが、あなたは非常に小さなファイルがたくさんある場合は、廃棄物は、ディスクの使用状況の重要な部分になることができます。
のtarアーカイブ内のファイルは、クラスタに格納されていないが、次々と。違いはどこから来ているのです。
他のヒント
あなたが使用しているか、使用しているUnixシステムのどのようタール何の知識を持っていない、ここに私の推測です:oldcodeは、ディスクスペースがいくつかによって割り当てられているので、それだけでは非効率的にディスクスペースを使用し、多数の小さなファイルが含まれていブロックの並べ替えではなく、バイトごと。 tarファイルでは、それらは連結している、と彼らが割り当てられているディスクスペースを最大限に活用ます。
これはファイルシステムのブロックサイズと関係があります。 男1デュ MacOSX 10.5.6 では次のように述べられています。
du ユーティリティはファイル システムを表示します ブロックの使用法 ファイル引数ごと、および各ディレクトリ引数をルートとするファイル階層内のディレクトリごとに。ファイルを指定しない場合は、現在のディレクトリをルートとする階層のブロック使用量が表示されます。
[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x 2 mirko wheel 68 Jan 30 21:20 .
drwxrwxrwt 10 root wheel 340 Jan 30 21:16 ..
[mirko@borg foo]$ du -sh
0B .
[mirko@borg foo]$ touch foo
[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x 3 mirko wheel 102 Jan 30 21:20 .
drwxrwxrwt 10 root wheel 340 Jan 30 21:16 ..
-rw-r--r-- 1 mirko wheel 0 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
0B .
[mirko@borg foo]$ echo 1 > foo
[mirko@borg foo]$ ls -la
total 8
drwxr-xr-x 3 mirko wheel 102 Jan 30 21:20 .
drwxrwxrwt 10 root wheel 340 Jan 30 21:16 ..
-rw-r--r-- 1 mirko wheel 2 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
4.0K .
ご覧のとおり、2 バイトのファイルでも 4 kb のブロック全体が必要になります。ファイルシステムの中には、このようなスペースの無駄を回避するものもあります。 ブロックのサブ割り当て.
2つの可能性があります。
小さなファイル
ほとんどの場合、それはの、その内容よりもの小さくありません。 ニルスPipenbrinckはに書いたように、du
ファイルので、ファイルシステムブロックに格納されたファイルシステムが割り当てるスペースの量は、以上で表示ファイルの論理サイズます。
、ファイルの論理サイズを表示du --apparent-size
を使用します。この場合、結果はtarファイルよりも小さくなければならない。
スパースファイル
tarファイルはスパースファイルを格納することができます。 tarボールは中 --sparse
に、穴を使用して作成された場合スパースファイルが記録されますので、tarボールは、ファイルの論理サイズよりも小さくすることができます。
あなたの抽出コピーでスパース情報が何らかの形で失われた場合には(あなたがスパースファイルをサポートしていないファイルシステム上にtarballを抽出した場合など、またはそれはzip圧縮した後、解凍した場合など)、そしてdf
を報告します拡大サイズます。
デュサイズのduderファイルではない、ディスクブロックをカウントします。