「ディスクの検証」機能は、新しく書き込んだディスクが正常に動作したかどうかを確認するのに最適ですが、正確にはどのように機能するのでしょうか?今日の SuperUser Q&A 投稿には、好奇心旺盛な読者の質問に対する答えが記載されています。
今日の質疑応答セッションは、コミュニティ主導の Q&A Web サイトのグループである Stack Exchange の下位部門である SuperUser のご好意で提供されました。
写真提供: cobalt123 (Flickr) 。
質問
スーパーユーザーの読者 user1301428 は、ディスクの書き込み後にどのように検証されるかを知りたいと考えています。
![]()
書き込み後のディスク検証では、データを検証するために実際に何を行うのでしょうか?元のファイルとディスクに書き込まれたファイルとの間の何らかの比較であると想像しますが、それが低レベルで実際にどのように行われるかを知っている人はいますか?
つまり、ソースと宛先のコンテンツのハッシュを作成して、それらを比較するのでしょうか?もしそうなら、書き込まれたコンテンツのハッシュは RAM に保存されますか?それともハードドライブ上の一時ファイルに保存されますか?何が起こっているかを記録したログ ファイルはありますか?
この機能がどのように機能するかを正確に知りたいと思っています。ここで私が言及しているのは Windows Image Burner です。
ディスクの検証プロセスはどのように行われますか?
答え
SuperUser の寄稿者である Frank Thomas と Synetech が答えを教えてくれました。まずはフランク・トーマスです。
IBurnVerification インターフェイスと IMAPI_BURN_VERIFICATION_LEVEL 列挙型については、Windows API に関するこれらの MSDN ページを確認してください。
データ ディスクの場合、クイック モードではディスク全体のチェックサムは行われず、選択されたセクタのみがチェックサムされるようです。次に、API 呼び出し READ_DISC_INFO および READ_TRACK_INFO が新しいディスクに対して成功することを確認します。
完全な検証の場合、上記のチェックを実行し、次に、書き込み中のメモリ ストリームで計算されたチェックサムと比較して、新しいディスクの最後のセッションで完全なチェックサムを実行します。チェックサムは RAM に保存する必要がありますが、有効期間が短い値である可能性があります。比較はソース メディア自体ではなく、RAM 内のディスク イメージに対して行われるため、ソース データが正しく読み取られなかった場合、正しく書き込まれないことに注意してください。検証ではこれを検出できません。
音楽ディスクの場合、READ_TRACK_INFO とディスクの目次のチェックに重点を置きますが、チェックサムの計算は実行しません。音楽には完全な検証モードはありません。
Synetech からの回答は次のとおりです。
Frank は Windows 固有の検証についてわかりやすく説明しました。より一般的な回答をさせていただきます。
- 書き込み後のディスクの検証では、データを検証するために実際にどのようなことが行われますか?
- つまり、ソースと宛先のコンテンツのハッシュを作成して、それらを比較するのでしょうか?もしそうなら、書き込まれたコンテンツのハッシュは RAM に保存されますか?それともハードドライブ上の一時ファイルに保存されますか?何が起こっているかを記録したログ ファイルはありますか?
これは確かに比較を実装できる方法の 1 つです。つまり、1 つのファイルをハッシュし (できれば十分に大きな、衝突の可能性が低い読み取りアルゴリズムを使用して)、もう一方のファイルに対して繰り返し、ハッシュを比較します。このように検証が実装されている場合は、ドライブの LED がしばらく点滅し、その後 CD/DVD の LED がしばらく点滅することがわかります。
検証を実装するもう 1 つの方法は、一方のファイルのブロックを読み取り、次にもう一方のファイルから同じブロックを読み取り、それらを比較し、ファイルの終わりに達するまで繰り返すことです。この場合、2 つのドライブの LED が交互に表示されます。
もちろん、ハードドライブと光学ドライブに LED がない場合は、それほど明白ではありません。ただし、ProcessMonitor などを使用すると、一方からの一連の読み取りをログに記録し、次にもう一方を単一の大きなバーストまたは交互の小さなバーストで記録するため、これを確認することができます。
- 元のファイルとディスクに書き込まれたファイルとの間の何らかの比較であると想像しますが、それが低レベルで実際にどのように行われるかを知っている人はいますか?
実際には、比較関数がメモリ キャッシュからではなく実際のディスクからデータを読み取るようにドライブ キャッシュをフラッシュするだけです。検証がキャッシュから行われる場合、実際にディスク上にあるものを表していないため、破損が容易にすり抜ける可能性があるため、これは明らかに重要なステップです。
比較がドライブから行われたのか、RAM 内のキャッシュから行われたのかは、比較の実行速度によってわかります。単純な比較を手動で (つまり、WinDiff、WinMerge を使用して、またはハッシュ ツールでハッシュして) 実行すると、メモリ キャッシュからファイルを読み取るため、比較が予想よりもはるかに高速に行われることがわかります。実際のディスクから強制的に読み取るには、キャッシュをフラッシュする必要があります。光学式ドライブ (およびフラッシュ ドライブやメモリ カードなどのその他のリムーバブル メディア) の場合は、ドライブを取り出すだけでキャッシュをフラッシュできますが、ハード ドライブの場合はそれほど単純ではありません (ただし、通常は問題になりません。新しいコピーがテストするコピーです)。
説明に何か追加することはありますか?コメントでは音を消してください。他のテクノロジーに精通した Stack Exchange ユーザーからの回答をさらに読みたいですか? ここで完全なディスカッション スレッドを確認してください 。





