我刚刚通过以下方式备份了整个硬盘 (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