物理的に焼き付けたCDとその元のISOイメージを持っています。 CDコンテンツの参照チェックサムファイルは提供されませんでした。実際のCDが正しく(元のイメージに対応)、完全に読み取り可能であることを確認するにはどうすればよいですか?
まず、CDを一時ファイルにリッピングします。
dd if=/dev/sr0 of=copy.iso
次に、copy.iso
とorig.iso
が同じサイズかどうかを確認します。たとえば、次のようにします。
stat -c '%s %n' orig.iso copy.iso
サイズが同じであれば簡単です。
sha1sum orig.iso copy.iso
ただし、コピーまたは元の画像のいずれかに後続ゼロが存在するため、サイズが多少異なる場合があることに気付きました。たとえば、copy.iso
がorig.iso
より小さい場合:
sha1sum copy.iso
head -c $(stat -c %s copy.iso) orig.iso | sha1sum
もちろん、後続バイトがゼロであることも確認する必要があります。
od -j $(stat -c %s copy.iso) orig.iso
オフセットを除いて、最初の行はゼロのみでなければなりません。 2行目はアスタリスクである必要があります。アスタリスクは、連続する同一の行を表示しないようにするためのものです。
ISOファイルがCDの書き込みに使用されたものと同じである場合、以下が私の2つのお気に入りです。
diff /dev/sr0 /tmp/file.iso
記録された画像を画像ファイルと比較します。あなたがもう少しマゾヒズムを感じるなら、あなたはこのようなことを試すことができます:
sha1sum /dev/sr0 /tmp/file.iso
署名を比較します。これは、SHA1サムがすでにどこかにある場合に、より便利です。どちらのコマンドもメディアを最後まで読み取ります。
@ Marki555が提案する方法でそれを行う場合は、最初に光学ドライブとイメージの両方をマウントする必要があります。これが完全なスクリプトです:(もちろん、rootであればSudo
を省くことができます—一般的に悪い考えです)
Sudo mkdir /tmp/{a,b}
Sudo mount /dev/sr0 /tmp/a -o ro # or whatever
Sudo mount /tmp/file.iso /tmp/b -o loop,ro
diff -dur /tmp/{a,b}
Sudo umount /tmp/a
Sudo umount /tmp/b
Sudo rmdir /tmp/{a,b}
ISOがまだある場合は、cmp
を使用してバイト単位でISOを比較できます。これは単純なコマンドであり、最初に見つかった違いで終了するので、実際に早い段階で実際にエラーが発生した場合にチェックサムを作成するよりもかなり高速です。
cmp /dev/cdrom /path/cdrom.iso
成功の可能性のある結果:
&& echo OK
を追加できます。cmp: EOF on cdrom.iso
:同一ですが、CD-ROMにはISOファイルよりも多くのバイトがあります。これは通常、CD-ROMの最後のゼロパディングが原因です。それは実際には問題ではないので、それはまだ成功です。失敗した場合の考えられる結果:
cmp: EOF on /dev/cdrom
:何らかの理由で、CDROMのデータが不完全です。 ISOが大きすぎて実際のCDに収まらない可能性があります。/dev/cdrom cdrom.iso differ: byte 18296321, line 71780
:CDROMとISOイメージの間に予期しない違いがあります。dd
を使用して、CDが完全に読み取り可能であることを確認できます(例:dd if=/dev/cdrom of=/dev/null
)。ただし、ISOイメージと直接比較することはできません。これらの異なるISOイメージはすべて同じCDコンテンツ(ディレクトリ構造、ファイル属性、およびファイルコンテンツ)を提供しますが、各ソフトウェアはわずかに異なるISOファイル(おそらくいくつかの異なるヘッダーまたはパディング)を作成します。
したがって、CDをマウントし、ISOイメージをマウントし、ある種のディレクトリ比較ツールを使用してファイルシステムレベルで比較することしかできません(申し訳ありませんが、Linuxではまだ使用していません)。