読み取りエラーを無視した光メディアからの回復
-
02-07-2019 - |
質問
光学メディア(CDおよびDVD)にアーカイブされたファイルのバックアップがあります。これらにはすべて、par2リカバリファイルがあり、別々のメディアに保存されています。 par2ファイルが存在しない場合でも、ある光学ドライブでの読み取り時の軽微なエラーは、別のドライブで正常に読み取ることができます。
問題は、障害のあるメディアを読み取るとき、デバイスが複数回再試行する傾向があるため、読み取り時間が非常に長いことです。
問題は、再試行の回数を制御するにはどうすればよいか(つまり、再試行なしまたは1回のみの試行に設定するか)です。いくつかのシステムコール?ダウンロードできるライブラリですか? SCSIレイヤーで作業する必要がありますか?
質問は主にLinuxについてですが、Win32ポインターも歓迎です。
解決
man readom
、cdrecordに付属のプログラム:
-noerror
Do not abort if the high level error checking in readom found an
uncorrectable error in the data stream.
-nocorr
Switch the drive into a mode where it ignores read errors in
data sectors that are a result of uncorrectable ECC/EDC errors
before reading. If readom completes, the error recovery mode of
the drive is switched back to the remembered old mode.
...
retries=#
Set the retry count for high level retries in readom to #. The
default is to do 128 retries which may be too much if you like
to read a CD with many unreadable sectors.
他のヒント
利用可能な最良のツールはdd_rhelpです。ただ
dd_rhelp /dev/cdrecorder /home/myself/DVD.img
、お茶を飲んで素敵なグラフィックを見る。
dd_rhelp rpmパッケージ情報:
dd_rhelpはディスク全体でddrescueを使用し、最大値を収集しようとします 不良セクターの年齢を試す前の有効なデータ。 dd_rhelpを終了する場合 無限の時間、単純なdd_rescueと同様の効果があります。しかし理由は あなたはこの無限の時間を持っていないかもしれません、dd_rhelpは不良セクタを飛び越えて救助します 有効なデータ。長期的には、dd_rescueを使用してすべてのデバイスを解析します。
Ctrl-Cでいつでも好きなときに再実行できます。dd_rhelpは dd_rescueが作成するログファイルに依存するジョブ。また、進捗状況 救助されているデバイスのASCII画像に表示されます。
私はそれを自分でたくさん使用しましたが、非常に現実的です。
ディストリビューションのようにDAGからRed Hatにインストールできます。
hdparm
が再試行の回数を変更できるかどうかを確認しながら(そうではないようですが)、エラーの種類によっては、CD-ROMの速度を下げると回数が減る可能性があると思いました読み取りエラーの数。これにより、実際の平均読み取り速度が向上します。ただし、一部のセクターが完全に読み取れない場合、CD-ROMの速度を下げても効果はありません。
ddが提案されたので、存在を知ってsg_ddを使用したことに注意する必要がありますが、私の質問はコマンド(1)または(1m)ではなく、システムコール(2)またはライブラリ(3)についてです。
編集
もう1つの役立つLinuxコマンドラインユーティリティは sdparm
です。次のフラグはハードウェアの再試行を無効にしているようです:
sudo sdparm --set=RRC=0 /dev/sr0
ここで、 / dev / sr0
は私の場合の光学ドライブのデバイスです。
ドライバレベルのアクセスについて尋ねているので、SCSIコマンド、またはAPIのようなASPIを調べる必要があります。 Windowsでは、VSOソフトウェア(以下のブラインドリード/ブラインドライトの開発者)が、ロックされた低レベルアクセスを提供する、より優れたAPIであるPatin-Couffinを開発しました。
http://en.wikipedia.org/wiki/Patin-Couffin
それで始められるかもしれません。ただし、実際にはUSB、SATA、ATA、IDEなどであっても、1日の終わりにドライブはSCSIコマンドとインターフェイスされます。また、このCD-ROM SCSI層インターフェースの最初の仕様の1つであるATAPIに関連する用語を調べることもできます。
適切なLinuxライブラリが見つからない場合や、上記の検索用語と概念を使用して下位レベルのコマンドを処理する例が見つからない場合は、驚くでしょう。
以前の回答:
Blindread / blindwrite は、意図的に不良セクタを使用することが多いcd-rom保護スキームの全盛期に開発されました。元のCDを確認するためのエラー情報。
再試行を含む多数のパラメーターを設定できます。 CD-ROMドライブ自体が再試行の回数を決定することに注意してください。また、これが多くの(ほとんどの?)CD-ROMドライブのソフトウェアを介して設定できるかどうかはわかりません。
エラーを無視してディスクをISO形式にコピーしてから、ISOユーティリティを使用してデータを読み取ることができます。
-アダム
ASPI インターフェースをご覧ください。 WindowsとLinuxの両方で利用可能。
dd(1)はあなたの友達です。
dd if = / dev / cdrom of = image bs = 2352 conv = noerror、notrunc
ドライブはまだ少し再試行する可能性がありますが、ファームウェアを変更しなくても良くなるとは思いません。