
一位朋友正在嘗試使用以下 Linux 命令複製 CF 卡:
sudo dd if=/dev/sdb of=card3.img bs=4M status=progress
但每次,它都會產生不同的影像。他們成像的前兩張卡片產生了不一致的結果。這可能是什麼原因造成的?
答案1
僅使用寫入存取(rw)掛載就可以寫入內容,在 ext 檔案系統上至少有以下屬性被更新:
- 最後安裝於
- 安裝數量
- 上次掛載時間
- 如果檔案剛剛被讀取(掛載
noatime
應該停止這些),則可能的檔案存取時間會被更新。 - 如果發生寫入,則為「上次寫入時間」屬性)
事實上,安裝沒有寫入存取(使用 mount 的
-r
/-o ro
)仍可能寫入設備,請參閱 man mount:-r, --唯讀
以唯讀方式掛載檔案系統。同義詞是-o ro。
請注意,根據檔案系統類型、狀態和核心行為,系統仍可能寫入設備。 例如,如果檔案系統髒了,ext3 和 ext4 將重播日誌。為了防止這種寫入訪問,您可能需要使用以下命令掛載 ext3 或 ext4 檔案系統滾裝,空載掛載選項或將區塊設備本身設定為唯讀模式,請參閱
blockdev
(8)指令。並
blockdev
具有--setro
將區塊設備設定為唯讀的命令
您可以比較圖像並查看哪些位元組不同,帶有cmp
或類似的內容vbindiff
。只有幾個位元組可能是某個地方的日期或計數(我不確定屬性是否存儲為純文字或以某種方式編碼)。
或只讀安裝兩個(或更多)映像並僅比較檔案。 Plaindiff
可以比較目錄樹,但我更喜歡像kdiff3
.如果唯一的區別在於安裝計數或上次安裝時間,則它不會顯示在檔案中(不同的檔案存取時間可能也不會顯示)。
或者可能是設備或你的內存或其他東西壞了並且在這裡和那裡讀取不同的位元組。
您還可以保持設備未安裝,製作圖像,然後拔下並重新連接設備(仍然未安裝)並製作另一個圖像然後進行比較,它們應該是相同的。