如何在不创建 tar 存档的情况下确定它的大小?

如何在不创建 tar 存档的情况下确定它的大小?

我每天晚上都会将一些目录归档到 LTO-7 磁带上,每个目录中大约有 100 个左右的大 (2GB) 文件。

为了检查数据是否已正确写入,我正在验证报告写入的字节数是否与应写入的字节数相同。

我首先通过 tar 试运行来查看存档的大小:

tar -cP --warning=no-file-changed $OLDEST_DIR | wc -c

然后我使用以下命令创建存档:

tar -cvf /dev/nst0 --warning=no-file-changed --totals $OLDEST_DIR

如果文件大小匹配,那么我删除原始文件。

问题是试运行必须读取文件的全部内容,并且可能需要几个小时。理想情况下,它应该使用报告的文件大小,应用必要的填充/对齐,并报告大小,而不是在磁盘上花费数小时。

使用du -s或类似的方法不起作用,因为大小不完全匹配(例如,文件系统将目录视为 4096 字节,tar 将其视为 0 字节)。

或者,是否有更好的方法来检查文件是否已正确写入?我不能相信 tar 的返回代码,因为我忽略了某些警告(用 tar/mdraid 处理某种错误)

答案1

如果您向写入驱动器的命令添加额外内容vtar它将报告文件大小;您也许可以解析它并比较文件大小,而不必读取所有文件两次。

您必须意识到这不能替代适当的验证,并且备份的唯一真正验证是恢复...请注意,LTO 驱动器边写边验证,所以你在这里并没有完全盲目驾驶。但仅仅依靠文件大小比较并不能告诉你那么多!

我实际上强烈建议使用适当的备份软件,例如杆状骨非常适合磁带备份。设置完成后,它将为您进行验证。

答案2

我同意使用适当的磁带归档软件是明智的,但如果做不到这一点,您应该简单地将真实的 tar 输出传输到校验和程序中,然后传输到磁带上。例如,

tar -cPf - --warning=no-file-changed $OLDEST_DIR |
tee >(md5sum > sum.md5) |
dd of=/dev/nst0 

然后您可以重新读取磁带以比较校验和。

dd if=/dev/nst0 | md5sum | diff - sum.md5

您可能需要dd为您的设备添加适当的选项。我曾经将校验和值本身添加到磁带的末尾,以便可以随时再次检查。当然,您还需要检查初始 tar 是否有错误。

相关内容