HDD 映像文件校验和与设备校验和不匹配

HDD 映像文件校验和与设备校验和不匹配

我有一个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/sdb660297728 字节到底大吗? ( 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

结果一定是一样的。

相关内容