Dd

硬碟映像文件校驗和與設備校驗和不匹配

  • January 19, 2018

我有一個660297728帶有 MD5 雜湊的字節硬碟圖像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

什麼可能導致這種行為?

究竟是/dev/sdb660297728 字節大嗎?( blockdev --getsize64 /dev/sdb)。如果不是,校驗和自然會不同。用於cmp image /dev/sdb詳細找出差異所在。如果它說EOF on image,它是相同的。

也許 /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 時,您的源 HDD 的大小為:

dd if=/dev/sda of=/path/to/image

所以圖像具有與整個源硬碟相同的大小:660297728 bytes

如果您對源 HDD 和圖像進行 md5sum,則它必須相同。

將映像複製到新 HDD 時,您可以:

dd if=image of=/dev/sdb

但 sdb 的大小為 1 TB,因此:

  • 第一個660297728 bytes是dd寫的
  • 下一個440 MB尚未寫入,dd之前的數據相同,可能是一些零或其他。

如果你對整個 sdb 做 md5sum,你將包括440 MB未寫入的,結果與 image 的 md5sum 不同。

如果要對新磁碟進行 md5sum,請執行以下操作:

dd if=/dev/sdb bs=512 count=660297728 | md5sum.

結果必須相同。

引用自:https://unix.stackexchange.com/questions/232974