在linux中创建大型稀疏映像的校验和

时间:2013-06-14 13:12:29

标签: linux checksum

我的linux服务器上有几个稀疏图像(320G总大小; 111G使用大小),并且希望每晚都能获得这些图像的校验和。我想知道是否有一种有效的方法来创建校验和。 如果我执行以下操作,则校验和创建需要很长时间:

~ # dd bs=1 count=0 seek=5G if=/dev/zero of=sparse.img
0+0 Datensätze ein
0+0 Datensätze aus
0 Bytes (0 B) kopiert, 0,00036461 s, 0,0 kB/s
~ # du -hs sparse.img
0   sparse.img
~ # time sha512sum sparse.img
e4f21997407b9cb0df347f6eba2...  sparse.img
real    0m55.339s
user    0m52.010s
sys     0m2.790s

2 个答案:

答案 0 :(得分:1)

自 2016 年以来有一个很好的解决方案:从 1.29 版本开始,GNU tar 具有: If possible, use SEEK_DATA/SEEK_HOLE to detect sparse files. 通常通过传递 --sparse 启用检测稀疏文件,例如:tar -c --sparse <file name> | md5sum 为您提供了一种对文件进行 md5sum 的可重复方式,并且只读取文件一次。

答案 1 :(得分:0)

对此没有一个好的解决方案,因为(a)所有这些零仍然是文件内容的一部分,即使没有为它们分配存储,并且(b)似乎没有是任何旨在操纵稀疏文件的工具。不可否认,GNU tar(以及各种其他备份/归档产品)可以被告知处理稀疏文件,但我从未见过实际上在文件系统中查询分配映射的文件。例如,GNU tar的文档清楚地表明它通过显式搜索文件内容以查找零的运行来处理稀疏文件(并且它将此作为预处理步骤,而不是内联,这意味着要存档的文件被读取两次。)

理想情况下,有一种方法可以直接访问文件的已分配块。我可以想出几种方法来实现这样的事情,但它必须至少在十年前被提出并指定,因为它在这一点上是有用的。

不幸的是,你的问题似乎没有一个好的答案。我只能建议您记录备份系统为您提供的校验和,并在还原之前使用它来验证备份媒体,但您可能已经这样做了。