読み取りエラー、スキップ/シーク番号を含む dd を再開します

読み取りエラー、スキップ/シーク番号を含む dd を再開します

次のコマンドを使用して、かなり損傷した CD からデータをコピーしようとしています。

dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress

ただし、「of」デバイスが切断され、dd が停止しました (出力は以下のとおり)。

...
dd: error reading '/dev/sr1': Input/output error
1074889+17746 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s
dd: writing to 'IDT.img': Input/output error
1074889+17747 records in
1092635+0 records out
559429120 bytes (559 MB, 534 MiB) copied, 502933 s, 1.1 kB/s

以下で再開できますか:

dd if=/dev/sr1 of=IDT.img conv=sync,noerror status=progress seek=1092635 skip=1092635

それとも、シーク/スキップ番号は両方とも にすべきでしょうか1092636、それともスキップ/シークは互いに異なるものにすべきでしょうか、それともまったく別のものにすべきでしょうか?

PS おそらく、これに対して間違ったコマンドを使用していることはわかっています。たとえば、ddrescue のほうがおそらく適しています。しかし、おそらく今は dd に固執しているのでしょう(?)。出力ファイル側でこれ以上のエラーは発生しないと思います。

答え1

読み取りエラーが発生したため、オプションによってconv=sync,noerrorデータ ストリームが変更された可能性が非常に高く、残念ながら出力ファイルが無価値になったか、少なくとも不正確なコピーになっています。

入力に不正な読み取り (短い読み取り) があるたびに、conv=syncオプションはブロックを NUL バイトで埋めます。ddコマンドは中断したところから入力ストリームを続行しようとしますが、出力には不明な数の NUL バイトが挿入されます。

使用をやめてdd使用してくださいddrescue不良メディアからデータを回復するために作成されました。

類似トピックの参照回答

答え2

使用ddrescuedd ではできない、破損した部分を「保存」したまま破損したメディアを読み取ることができます。

元のデータを想像してください:

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c d e f g h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

ダメージ(X)を受けた後は、次のようになります。

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c X X X X h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

dd conv=sync,noerror が読み取る内容:

  +-+-+-+-+-+-+-+-+
  |a b c h i j k l|
  +-+-+-+-+-+-+-+-+

ddrescue が読み取るもの。

  +-+-+-+-+-+-+-+-+-+-+-+-+
  |a b c 0 0 0 0 h i j k l|
  +-+-+-+-+-+-+-+-+-+-+-+-+

ご覧のとおり、dd によって読み取られた元のメッセージは歪んでおり、この方法でファイルシステム イメージを作成すると、使用できなくなります。ddrescue イメージは問題なくマウントできるため、破損していないデータには通常どおりアクセスでき、破損したデータは簡単に保管して次に処理できます。

関連情報