如何检查 dd 备份的完整性?

如何检查 dd 备份的完整性?

我刚刚通过以下方式备份了整个硬盘 (50GB) ssh

dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

现在检查文件完整性的最佳方法是什么image.img,即如何验证所有内容都已正确复制?

答案1

如果命令成功终止,则备份正确,除非出现硬件故障(这同样会影响您可能执行的任何验证)。如果硬件出现故障,稍后可能会变得不正确,但大多数存储硬件都会检测到损坏。

这里有一个警告:在管道中,shell 不会从左侧报告错误。 (这是因为一种相当常见的情况,即右侧不需要读取所有数据,例如some_command | head,左侧因不再需要其输出而死亡。)因此,这里的读取错误dd将被忽略。在 bash 中,设置pipefail选项以报告管道所有部分的错误。

另外,请注意dd bs=…忽略一些错误dd通常比替代方案慢。我建议dd根本不要使用:仅复制整个文件没有任何好处。与您可能在某处读到的内容相反,dd它不是具有特殊属性的低级磁盘访问命令,绝对没有魔法dd,魔法在于/dev/hda

shopt -s pipefail
set -e
</dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

尽管如此,如果您想检查备份,最好的方法是在每一侧获取加密校验和并进行比较。例如:

ssh myuser@myhost "sha1sum image.img" &
sudo sha1sum /dev/hda

检查两个校验和是否相同。

请注意,这会测试检查时备份和原始文件是否相同。您在 上所做的任何更改/dev/hda,包括挂载和卸载文件系统,即使不进行任何更改(这将更新许多文件系统上的最后挂载日期),都会更改校验和。如果您想稍后验证完整性,请在某处记下备份时磁盘的校验和。

答案2

正如 darnir 和 Giles 提到的,最好的办法是在备份后立即运行加密哈希,然后在源磁盘上进行任何更改。但是,如果您从那时起就使用过该磁盘,则哈希值很可能不匹配。即使更改磁盘上的一个字节也会导致完全不同的哈希值。

尽管它远不太理想,但您可以通过安装来抽查图像。在磁盘映像所在的系统上,运行以下命令(/mnt/disk如果不存在则创建或使用备用位置):

mount -o loop image.img /mnt/disk

然后您可以浏览/mnt/disk并查看所有文件。对照原始文件检查映像内关键文件的 sha1 哈希值,以验证其完整性。

答案3

使用命令 qemu-img

qemu-img check image.img

相关内容