代码之家  ›  专栏  ›  技术社区  ›  ieure

为什么TAR文件比它的内容小?

  •  18
  • ieure  · 技术社区  · 17 年前

    $ 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
    

    只有897 MB。它没有以任何方式压缩:

    $ file oldcode.tar
    oldcode.tar: POSIX tar archive
    

    5 回复  |  直到 5 年前
        1
  •  45
  •   Nils Pipenbrinck    17 年前

    您会因为文件系统的工作方式而有所不同。

    简而言之,你的磁盘是由集群组成的。每个集群都有一个固定的大小,比如4千字节。如果你在这样的集群中存储一个1kb的文件,那么3kb将不会被使用。确切的细节因您使用的文件系统类型而异,但大多数文件系统都是这样工作的。

    3kb的浪费空间对于单个文件来说并不多,但如果你有很多非常小的文件,浪费可能会成为磁盘使用量的重要组成部分。

    在tar存档中,文件不是存储在集群中,而是一个接一个地存储。这就是差异所在。

        2
  •  4
  •   David Thornley    17 年前

    由于不知道你使用的是什么tar或什么样的Unix系统,我的猜测是:旧代码包含许多较小的文件,这些文件本身使用磁盘空间效率低下,因为磁盘空间是由某种块分配的,而不是逐字节分配的。在tar文件中,它们被连接在一起,并最大限度地利用分配给它们的磁盘空间。

        3
  •  3
  •   Mirko Friedenhagen    17 年前

    在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字节的文件也需要整个4kb的块。有些文件系统通过以下方式避免了这种空间浪费 block suballocation .

        4
  •  3
  •   Community Mohan Dere    8 年前

    有两种可能性。

    小文件

    最有可能的是 is not 的常用口语形式 As Nils Pipenbrinck wrote , du

    要查看文件的逻辑大小,请使用 du --apparent-size

    --sparse

    如果您提取的副本中的稀疏信息不知何故丢失(例如,如果您将tarball提取到不支持稀疏文件的文件系统上,或者如果它被压缩然后解压缩,等等),那么 df 将报告扩展后的大小。

        5
  •  0
  •   yerma yerma    17 年前

    du计算磁盘块,而不是文件大小duder。