ドライブがすぐに失敗する予定であるため(C5とC6がトリガーされます)、まだ実行できるときに別のバックアップを実行することにしました。これを行うには、同じモデルの他のドライブにddを使用します。期待どおりに入力/出力エラーが発生し、エラーが発生した場合はddが何をするのか知りたいです。何も書かずにそのセクタをスキップしますか?それとも、ターゲットドライブの古いデータをゼロに置き換えますか?
また、64Kブロックを使用しているので、コピーがより多くのデータを取得できない場合は、より小さいブロックサイズでddを実行できますか?
答え1
コメントで述べたように、牛に似た一種の栄養ddrescue
これはユースケースのためのより良いツールです。とにかく、あなたの明白な質問に答えますdd
。
dd
エラーが発生した場合はどうすればよいかを知りたいです。
与えられないと終了し、conv=noerror
ツールは無視されます。入力する間違い。仮定noerror
が与えられ、印刷上のエラーが発生しました。それから
何も書かずにそのセクタをスキップしますか?それとも、ターゲットドライブの古いデータをゼロに置き換えますか?
それはあなたがそれを使用したかどうかによって異なりますconv=sync
。これにより、dd
各入力ブロックが埋められ、ibs=
nullバイトが追加されます。私推測するソースブロックデバイスのセクタサイズとibs
等しい場合、読み取りエラーが発生した場合、出力ストリームは入力と同期したままになります。ただし、誤った場合、ibs
読み取りエラーが原因でストリームが非同期化される可能性が高くなります。この素晴らしい答え。参考になりそうですiflag=fullblock
。
また、読み出しエラーがなくても出力が入力より大きくなることがあります。これは、バッファがいっぱいになる前にsync
最後のブロックがEOFに達した場合にibs
発生する可能性があります。
参考にしてnoerror
いsync
ますPOSIXの要件、fullblock
いいえ。
dd
コピーからより多くのデータをインポートできなかった場合は、より小さいブロックサイズで実行できますか?
理論的にはそうです。ただし、これを行うには、上記の問題を引き続き処理しながらskip=
手動で使用する必要があります。新しいブロックサイズを再計算し、それに合わせる必要があるseek=
ことを忘れないでください。可能ですが、すぐにプロセスを自動化したいと思います。skip
seek
さて、ddrescue
これらすべての問題をGNUの基本的な動作と比較してみましょう。
- 読み取りエラーはスキップされ、後で「疑わしい」セグメントに戻り、ますます小さいチャンクで読み取ろうとします。
- 何があっても適切なオフセットを維持します。