在 Solaris 10 下,我有一个目录名为 apps。我进入该目录并输入:
-bash-3.00# du -hs
7.2G .
然后我输入:
tar -cvf /var/run/apps.tar apps
结果:
-bash-3.00# ls -lad apps.tar
-rw-r--r-- 1 root root 14174289408 Mar 5 16:05 apps.tar
7GB 的目录如何变成 14GB 的 tar?
答案1
tar 本身在存储小文件方面并不是特别高效。它使用固定大小的 512 字节块。元数据的存储方式也比文件系统上的存储方式更不紧凑。您观察到的差异可能是由于您的应用程序目录中有大量小文件造成的。
为了减轻这种影响,我建议按如下方式压缩 tar 输出:
tar cvf - apps | gzip -v > /var/run/apps.tgz
如果你碰巧使用 GNU tar,那将是:
gtar czvf /var/run/apps.tgz apps
答案2
Tar 不会对文件执行任何压缩,并且始终会生成一个比其中包含的所有文件的总和更大的结果 tar 文件。
焦油如此之高的确切原因很多更大可能是由多种因素造成的,例如大量小文件无法得到有效存储、跟随硬链接导致目录树出现重复或稀疏文件变平导致 tar 存储库中出现大量更大的非稀疏文件。
如果您想要创建一个小文件用于备份或传输到另一个系统,我建议您使用 Gzip(压缩为 tar.gz)文件或其他压缩算法压缩 tar 文件以生成更小的文件。Tar 文件往往压缩得很好,因此这应该会生成一个比您提到的 14GB 小得多的文件。