
友人が次の Linux コマンドを使用して CF カードのクローンを作成しようとしています。
sudo dd if=/dev/sdb of=card3.img bs=4M status=progress
しかし、毎回、異なる画像が生成されます。最初に画像化した 2 枚のカードでは、一貫性のない結果が生成されました。この原因は何でしょうか?
答え1
書き込みアクセス (rw) でマウントするだけで書き込みが行われる可能性があります。ext ファイルシステムでは、少なくとも次の属性が更新されます。
- 最終マウント
- マウント数
- 最終マウント時間
- また、ファイルが読み取られるときに更新される可能性のあるファイル アクセス時間 (マウントによって
noatime
停止されるはずです)。 - 書き込みが発生した場合は「最終書き込み時刻」属性も追加されます)
実は、マウントそれなし書き込みアクセス (マウントの
-r
/を使用-o ro
) はデバイスに書き込む可能性があります。man mount を参照してください。-r, --読み取り専用
ファイルシステムを読み取り専用でマウントします。同義語は -o ro です。
ファイルシステムの種類、状態、カーネルの動作に応じて、システムはデバイスに書き込むことは可能です。 たとえば、ext3とext4はファイルシステムがダーティな場合、ジャーナルを再生します。このような書き込みアクセスを防ぐには、ext3またはext4ファイルシステムを次のようにマウントするとよいかもしれません。ro、無負荷マウントオプションを指定したり、ブロックデバイス自体を読み取り専用モードに設定したりするには、
blockdev
(8)コマンドを参照してください。ブロックデバイスを読み取り専用に設定するコマンドが
blockdev
あります--setro
画像を比較して、cmp
または のように、どのバイトが異なるかを確認できvbindiff
ます。日付またはカウントがどこかにある可能性があるバイトはほんの数バイトです (属性がプレーンテキストとして保存されているか、何らかの方法でエンコードされているかはわかりません)。
または、2 つ (またはそれ以上) のイメージを読み取り専用マウントし、ファイルだけを比較します。Plain ではdiff
ディレクトリ ツリーを比較できますが、 のような GUI の方が好みですkdiff3
。違いがマウント回数または最終マウント時刻のみである場合、ファイルには表示されません (ファイル アクセス時刻が異なっていても、おそらく表示されません)。
あるいは、デバイスや RAM などの何かが故障して、あちこちで異なるバイトを読み取っているのかもしれません。
また、デバイスをアンマウントしたままイメージを作成し、デバイスを取り外して再接続し (まだアンマウントしたまま)、別のイメージを作成して比較すると、同じになるはずです。