题
我有一个目录我归档:
$ 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千字节。如果您存储文件1KB在这样的集群3KB将未使用的。具体细节与您所使用的一种文件系统的变化,但大多数文件系统工作方式。
3KB浪费的空间并不多为单个文件,但如果你有大量的小文件的废弃物可以成为磁盘使用情况的显著部分。
在焦油存档中的文件不存储在簇但一个接一个。这就是差的来源。
其他提示
由于没有什么焦油你正在使用或者什么样的你使用的Unix系统的知识,这是我的猜测:oldcode包含了大量的小文件,当通过自己低效使用磁盘空间,因为磁盘空间是由一些分配排序块,而不是逐字节。在tar文件,它们是连接,并且最大限度地利用他们分配的磁盘空间。
这有事情做与你的文件系统的块大小。的人1杜强> MacOSX上10.5.6状态:
的杜实用程序将显示在文件系统的块使用对于每个文件变量以及用于植根于每个目录参数的文件层次结构中的每个目录。如果未指定文件,则显示植根于当前目录中的层次结构的块使用。
[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个字节,即使一个文件需要4KB的一个整体块。有一些文件系统,其避免空间浪费这个由块子分配。
有2点的可能性。
小文件
最有可能的,它的不是比其内容更小。 作为尼尔斯Pipenbrinck写,du
显示的空间量文件系统分配,这是自文件存储在文件系统块是大于该文件的逻辑大小。
要查看该文件,使用du --apparent-size
的逻辑大小。在这种情况下,结果应该比tar文件小。
稀疏文件
tar文件可以存储稀疏文件。如果压缩包是使用 --sparse
,中孔创建稀疏文件将被记录,所以将压缩包可以比文件的逻辑大小。
如果您在副本中提取的稀疏信息在某种程度上失去了(例如,如果你提取压缩包到文件系统不支持稀疏文件,或者如果它是压缩和解压,然后等),然后df
会报告扩展的大小。
杜计数磁盘块,而不是文件大小duder。