dd は何らかの検証を行いますか?

dd は何らかの検証を行いますか?

古いハードドライブから新しいハードドライブにデータをコピーするために使用していますdd。データの整合性が確保されていることを確認したいです。

これについて答えジルは言う

[dd] が正常に終了した場合、ハードウェア障害がない限り、バックアップは正常です。

それは正確にはどういう意味ですか?dd何らかの検証機能が組み込まれているのですか?

代わりに rsync を使用する場合は、--checksum確認のために 2 回目のパスも実行します。このような偏執病は正当化されるのでしょうか?

答え1

ddあるいは、他のアプリケーションには、おそらくあなたが考えているような意味での「何らかの組み込み検証」がありません。つまり、ストレージ メディアからデータを読み戻して、書き込まれた内容と比較することはありません。これはオペレーティング システムの仕事です。

アプリケーションからハードウェアまで読み取り検証を行うことは実際には不可能です。いくつかのシナリオでは機能しますが、ほとんどの場合は何も達成できません。アプリケーションは、書き込んだばかりのものを読み戻すことができます。ストレージメディアに直接書き込む場合しかし、それは通常、メモリ内のキャッシュから読み戻すため、有用な保証は得られません。あなたが挙げた例ddパイプに書き込んでおり、その場合、その後のデータに何が起こるかを制御できません。rsync の例では、 の 2 回目のパスはrsync --checksum無意味です。理論上はエラーをキャッチできますが、実際にはエラーが発生した場合、2 回目のパスでは何も問題が報告されない可能性が高いため、実際に役立つ保証を与えないものに労力を無駄にしていることになります。

しかし、アプリケーションするデータに何が起こるかを検証します。つまり、オペレーティング システムがデータに対する責任を受け入れたことを確認します。すべてのシステム コールはエラー ステータスを返します。システム コールがエラー ステータスを返す場合、アプリケーションは、通常、エラー メッセージを表示し、ゼロ以外の終了ステータスを返すことによって、そのエラーをユーザーに伝える必要があります。

例外であることに注意してくださいdd。コマンドラインパラメータによっては、ddいくつかのエラーを無視する可能性があるこれは非常に珍しいことです。は、ddこのプロパティを持つ唯一の共通コマンドです。catの代わりにを使用してください。ddそうすれば、破損のリスクがなく、それはもっと速いかもしれない

データのコピーの連鎖では、2 種類のエラーが発生する可能性があります。

  • 破損: 転送中にビットが反転します。アプリケーション レベルでこれを検証する方法はありません。このようなことが発生した場合、プログラミング バグまたはハードウェア エラーが原因で、読み戻すときに同じ破損が発生する可能性が非常に高いためです。このような破損が発生していないことを確認する唯一の有効な方法は、メディアを物理的に切断して再試行することです。問題が RAM にある場合は、できれば別のコンピューターで再試行してください。
  • 切り捨て: コピーされたデータはすべて正しくコピーされましたが、一部のデータはまったくコピーされませんでした。コマンドの複雑さに応じて、時々チェックする価値があります。そのためにデータを読み取る必要はなく、サイズをチェックするだけです。

答え2

いいえ、dd明示的な検証は行いません。ディスクまたはその一部の法医学的に検証されたコピーが必要な場合は、米国国防総省のコンピュータフォレンジック研究所によって開発されたdcflddの拡張バージョンを使用してください。dd

答え3

「確実」にする唯一の方法は、追加の読み取りおよび比較パスを実行することです (キャッシュを削除した後)。

それ以外にも、dd他のすべてのプログラムと同じ方法で読み取りおよび書き込みエラーを検出します...ドライブ (および関連するその他のコンポーネント) がエラーを報告した場合に機能します。実際にデータを書き込まずにデータを黙って受け入れるドライブの場合は、運が悪いです。

そのような妄想は正当化されるのでしょうか?

ハードウェアの信頼性を信頼できない場合、事態は複雑になります...

答え4

からman dd

終了すると、dd は、完全および部分的な入力および出力ブロック、切り捨てられた入力レコード、および奇数長のバイトスワッピング ブロックの数を標準エラー出力に表示します。

部分的な入力ブロックとは、入力ブロック サイズよりも小さいサイズが読み取られたブロックです。部分的な出力ブロックとは、出力ブロック サイズよりも小さいサイズが書き込まれたブロックです。テープ デバイスへの部分的な出力ブロックは、致命的なエラーとみなされます。それ以外の場合は、ブロックの残りが書き込まれます。文字デバイスへの部分的な出力ブロックは、警告メッセージを生成します。

ddは、ブロックをコピーするたびに、入力/出力ブロック サイズが一致しているかどうかを確認します。一致しない場合は、警告または致命的なエラー ( で上書きされますnoerror) でエラーを処理します。これが、 がdd事実上常に機能する理由です。

それでも、ディスクの整合性を手動で検証する代わりにはなりません。情報があなたにとって価値があるなら、あなたの妄想は正当化されるdd完了したら手動で検証を実行します。

関連情報