tar 的 -W 参数实际上起什么作用?

tar 的 -W 参数实际上起什么作用?

我用tar它来打包一些数据。在将其移动到存档之前,我想检查 tarball 的完整性。根据手册页,该参数-W会进行验证:

-W, --verify
写入档案后对其进行验证。

我测试了这个并且它似乎做了一些事情:

$ tar cvWf tartest.tar tartest/
tartest/
tartest/dir1/
tartest/dir1/bar
tartest/dir2/
tartest/dir2/foobar
Verify tartest/
Verify tartest/dir1/
Verify tartest/dir1/bar
Verify tartest/dir2/
Verify tartest/dir2/foobar

tar这里到底要验证什么?文件是否存在?文件大小?MD5 值?

答案1

这需要花一些时间才能弄清楚。在文件中src/compare.c在里面tar 的 Git 仓库,我们找到一个名为verify_volume(撰写本文时位于第 527 行),其中包含以下评论

验证档案的目的是检查物理媒体是否正确获取了档案,因此请尝试绕过与此特定媒体相关的巧妙的内存缓冲。例如,在 Linux 上,整个验证过程中甚至不会访问软盘驱动器。

这解释了它试图做什么,但至于如何它确实做到了,我们需要查看该函数的代码。它首先比较标头以确保它们匹配,如果匹配,它就会运行该函数diff_archive(撰写本文时为第 461 行),它会逐项检查档案中的文件,当遇到文件*时,它会运行该函数diff_file(第 187 行)。它首先检查一些简单的东西,例如文件类型和大小(以及其他)。如果所有这些都正确,它(对于普通文件)将验证文件的每个块(在read_and_process函数,第 120 行)。对于稀疏文件,它调用sparse_diff_file(第 698 行)src/sparse.c,它使用以下方法检查文件的每个区域**check_sparse_region函数(第 607 行),同样位于src/sparse.c

*它对其他类型的存档数据(例如目录)执行其他操作

**它检查每个区域的方式与检查整个正常(非稀疏)文件的方式类似

相关内容