stu*_*ent 12 backup dd integrity
我刚刚通过以下方式备份了整个硬盘驱动器(50GB)ssh
:
dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"
Run Code Online (Sandbox Code Playgroud)
现在检查文件完整性的最佳方法是什么image.img
,即如何验证是否正确复制了所有内容?
Gil*_*il' 13
如果命令成功终止,则备份是正确的,除非出现硬件故障(这可能同样影响您可能执行的任何验证)。如果硬件出现故障,以后可能会变得不正确,但大多数存储硬件都会检测到损坏。
这里有一个警告:在管道中,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"
Run Code Online (Sandbox Code Playgroud)
尽管如此,如果您想检查备份,最好的方法是在每一侧取一个加密校验和并比较它们。例如:
ssh myuser@myhost "sha1sum image.img" &
sudo sha1sum /dev/hda
Run Code Online (Sandbox Code Playgroud)
检查两个校验和是否相同。
请注意,这会在检查时测试备份和原始文件是否相同。您更改的任何内容/dev/hda
,包括挂载和卸载文件系统,即使没有进行任何更改(这将更新许多文件系统上的最后挂载日期),都会更改校验和。如果您想稍后验证完整性,请在某处记下备份时磁盘的校验和。
正如 darnir & Giles 所提到的,最好的办法是在备份后立即运行加密哈希,然后源磁盘上的任何内容都没有被更改。但是,如果您从那时起就使用了磁盘,那么哈希值很可能不匹配。即使更改磁盘上的一个字节也会导致完全不同的哈希值。
虽然它远不理想,但您可以通过安装它来检查图像。在磁盘映像所在的系统上,运行以下命令(/mnt/disk
如果它不存在则创建或我们一个备用位置):
mount -o loop image.img /mnt/disk
Run Code Online (Sandbox Code Playgroud)
然后,您可以浏览/mnt/disk
并查看所有文件。对照原件检查图像中关键文件的 sha1 哈希值以验证其完整性。