如何确定运行 tar 是否会导致磁盘填满

cod*_*boy 25 tar disk-usage

如果我tar -cvf在大小为 937MB 的目录上运行以创建一个可轻松下载的深度嵌套文件夹结构的副本,我是否会冒着填满磁盘的风险,给出以下df -h输出:

/dev/xvda1            7.9G  3.6G  4.3G  46% /
tmpfs                 298M     0  298M   0% /dev/shm
Run Code Online (Sandbox Code Playgroud)

相关问题:

  • 如果磁盘可能会填满,为什么即 Linux (Amazon AMI) 和/或tar在幕后做什么?
  • 如何在不再次询问的情况下自己准确确定这些信息?

小智 28

tar -c data_dir | wc -c 无压缩

或者

tar -cz data_dir | wc -c 使用 gzip 压缩

或者

tar -cj data_dir | wc -c 使用 bzip2 压缩

将打印以字节为单位创建的存档的大小,而不写入磁盘。然后,您可以将其与目标设备上的可用空间量进行比较。

您可以使用以下命令检查数据目录本身的大小,以防对其大小做出错误假设:

du -h --max-depth=1 data_dir

正如已经回答的那样,tar 为存档中的每条记录添加一个标题,并将每条记录的大小四舍五入为 512 字节的倍数(默认情况下)。存档的结尾由至少两个连续的零填充记录标记。因此,您的未压缩 tar 文件总是会比文件本身大,文件数量以及它们与 512 字节边界对齐的方式决定了所使用的额外空间。

当然,文件系统本身使用的块大小可能比单个文件的内容大,所以在解压它时要小心,文件系统可能无法容纳大量小文件,即使它的可用空间大于 tar 大小!

https://en.wikipedia.org/wiki/Tar_(computing)#Format_details


Flu*_*lup 6

tar 文件的大小为 937MB 加上每个文件或目录所需的元数据大小(每个对象 512 字节),并添加填充以将文件对齐到 512 字节的边界。

一个非常粗略的计算告诉我们,您的数据的另一个副本将为您留下 3.4GB 的可用空间。在 3.4GB 中,我们有大约 700 万条元数据记录的空间,假设没有填充,或者如果您假设每个文件平均有 256 个字节的填充,则更少。因此,如果您要压缩数百万个文件和目录,您可能会遇到问题。

您可以通过以下方式缓解问题

  • 使用zj选项即时压缩tar
  • tar以普通用户身份执行此操作,以便在空间/不足时不会触及分区上的保留空间。