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


11

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

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

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


通常,当您dd时,它总是完美的。但是,您始终可以运行sha1sum来检查原始副本和备份副本的sha1哈希值。
darnir

2
通常 ……它总是完美的。” 这让我想起了《赤裸裸的枪》的一句话:“医生说诺德伯格有50/50的生存机会,尽管只有10%的机会。”
Sparhawk

Answers:


10

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

这里有一个警告:在管道中,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所做的任何更改,包括即使不进行任何更改都将挂载和卸载文件系统(这将更新许多文件系统的上次安装日期),将更改校验和。如果以后要验证完整性,请记下备份时磁盘的校验和。


3
请注意,如果任何事情/dev/hda已经改变,因为备份被做了哈希将不匹配。
bahamat

哈希检查的好处是,假阴性(哈希运行过程中偶然发生在记录图像中发生的错误,从而使故障不被察觉)在天文上很小。如果存在任何硬件故障,那么绝大多数情况将导致哈希检查失败。如前所述,如果磁盘已更改,将得到假阳性失败的检查。
史蒂文·卢

@StevenLu不,相关的机会非常高,因为硬件故障并不是一致地随机的。特别是,RAM错误(这是典型PC中最常见的硬件故障)发生在特定位。
吉尔(Gilles)'所以

好的,可能...像这样用大量的盐散列,当然,但是OP正在通过网络进行传输。尽管存在TCP,但它本质上是不可靠的。此外,很可能我们将看不到相同的确切访问模式(在物理内存中)。
史蒂文·卢

有关@Gilles第一句话的新的相关问题寻求澄清。
Sparhawk

5

正如darnir&Giles提到的,最好的做法是在备份后立即运行加密哈希,而不要更改源磁盘上的任何内容。但是,如果您从那以后使用过磁盘,则哈希很可能不匹配。即使更改磁盘上的一个字节也将导致完全不同的哈希。

尽管它远不理想,但是您可以通过安装图像来对其进行现场检查。在磁盘映像所在的系统上,运行以下命令(/mnt/disk如果该映像不存在或使用其他位置,请创建):

mount -o loop image.img /mnt/disk

然后,您可以浏览/mnt/disk并查看所有文件。检查图像中关键文件的sha1哈希值与原始值是否一致,以验证其完整性。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.