在 Lubuntu 16.04.3 LTS 上备份一些 USB 闪存驱动器。
将 USB 驱动器插入笔记本电脑。自动安装程序完成它的工作。我将所有分区重新安装为只读
sudo mount -o remount,ro /dev/sdxn
使用 ddrescue 将 USB 驱动器复制到硬盘上的映像文件(可重新启动)
sudo ddrescue -b 4096 /dev/sdx sdx.img sdx.log
(注:块大小由 确定sudo blockdev --getbsz /dev/sdx
)
md5sum sdx.img
给出结果 < foo >
清除磁盘缓冲区:
sudo blockdev --flushbufs /dev/sdx
- 否则,后续命令将读取磁盘缓存而不是实际磁盘(通过查看 USB 驱动器上的活动指示灯以及后续命令的完成速度来确认)。
sudo md5sum /dev/sdx
给出结果<栏>
所以看来复制失败了。
但
A随后的 sudo dd if=/dev/sdc bs=4096 | md5sum
再次给出结果 < foo > !!!什么?
事实证明 dd (和 ddrescue)生成一致的图像,所有图像都具有相同的 md5sum,但如果我直接 md5sum 设备文件,我会得到不同的 md5sum 结果。
我错过了一些明显的事情吗?大多数howtos建议在设备文件上使用md5sum,所以我想我要么发现了一个错误/功能,要么是愚蠢的并且错过了一些非常明显的东西。有什么线索吗?
(请注意,我正在生成 USB 驱动器的映像,因为其中一些是可引导的,并且上面有一组有用的工具。这会占用空间,因此对于较大的驱动器,我将通过使用 mksquashfs 来减少存储需求(mksquashfs sdx.img sdx.squash.img
),只要我在 mksquashfs 之前将图像文件的所有权从 root 更改为我的用户名,这意味着我可以获得可安装的压缩图像,因此浏览内容可能很容易。
[编辑添加:看过HDD 图像文件校验和与设备校验和不匹配我可以说这sudo blockdev --getsize64 /dev/sdx
和磁盘上的图像文件的大小是完全相同的。]
[进一步更新:
$ sudo cat /dev/sdx | md5sum a4db504f408c139cd2517b4038dfdb2f - $ sudo dd if=/dev/sdx | md5sum 2038272+0 records in 2038272+0 records out 1043595264 bytes (1.0 GB, 995 MiB) copied, 105.895 s, 9.9 MB/s e6174ed97f010cc7aa2ea9669cd85c50 - $ sudo md5sum /dev/sdx 823b619d439fbb0abde5841097c76e72 /dev/sdx
然后重复
$ sudo cat /dev/sdx | md5sum a4db504f408c139cd2517b4038dfdb2f - $ sudo dd if=/dev/sdx | md5sum 2038272+0 records in 2038272+0 records out 1043595264 bytes (1.0 GB, 995 MiB) copied, 105.747 s, 9.9 MB/s e6174ed97f010cc7aa2ea9669cd85c50 - $ sudo md5sum /dev/sdx 823b619d439fbb0abde5841097c76e72 /dev/sdx
因此,该行为是可重复的 - 使用 cat、dd 和直接 md5sum 给出不同的答案,但显然 cat 每次都给出与 dd 和 md5sum 相同的答案。
因为我可以使用cat
、dd
、ddrescue
或pv
将设备的内容复制到磁盘映像,这是“正确的”吗?]