我有一个660297728
带有 MD5 哈希值的字节 HDD 映像f5a9d398e974617108d26c1654fe7bcb
:
root@T42# ls -l image
-rw-rw-r-- 1 noc noc 660297728 Sep 29 19:00 image
root@T42# md5sum image
f5a9d398e974617108d26c1654fe7bcb image
现在,如果我dd
将此图像文件写入/dev/sdb
磁盘并检查磁盘的 MD5 哈希值,那么它与图像文件的 MD5 哈希值不同:
root@T42# dd if=image of=/dev/sdb bs=512
1289644+0 records in
1289644+0 records out
660297728 bytes (660 MB) copied, 1006.38 s, 656 kB/s
root@T42# md5sum /dev/sdb
f6152942a228a21a48c731f143600999 /dev/sdb
什么可能导致这种行为?
答案1
/dev/sdb
660297728 字节到底大吗? ( blockdev --getsize64 /dev/sdb
)。如果不是,校验和自然会不同。用于cmp image /dev/sdb
详细找出差异所在。如果它说EOF on image
,它是相同的。
答案2
也许 /dev/sdb 上的磁盘已被 udisks 或操作系统的其他进程修改(例如自动挂载)。
编辑: 也许该映像是一个分区的映像而不是整个硬盘。
您可以将您的磁盘与 fdisk 进行比较:
fidsk -l /dev/sdb
和
fdisk -l /path/to/image
查看块的数量(及其大小),也许它只对应一个分区。
在 /dev/sdb 上的相关分区上重试 md5sum: md5sum /dev/sdbx (x 是分区号)
并与您的图像的 md5 进行比较
编辑2:
您的源硬盘的大小为,660297728 bytes (660 MB)
因此当您完成 dd 后,它是:
dd if=/dev/sda of=/path/to/image
所以图像的大小与整个源硬盘的大小相同:660297728 bytes
如果对源 HDD 和映像执行 md5sum,则它必须相同。
当您将映像复制到新硬盘时,您将执行以下操作:
dd if=image of=/dev/sdb
但 sdb 的大小为 1 TB,因此:
- 第一个
660297728 bytes
是 dd 写的 - 下一个
440 MB
尚未写入,数据与 dd 之前相同,可能有一些零或其他。
如果对整个sdb进行md5sum,则会包含440 MB
未写入的内容,并且结果将与图像的md5sum不同。
如果你想对新磁盘进行md5sum,你可以:
dd if=/dev/sdb bs=512 count=1289644 | md5sum
结果一定是一样的。