2

David Heffernanの助けのおかげで、私は Freepascal で書かれたプログラムを持っています (しかし、私の質問に対する Delphi ソリューションで十分です)。物理ディスクをセクターごとに読み取ります。これは、ディスク ハンドルに Windows API の CreateFileW 関数を使用し、次にFileFileFileSeekなどを使用してナビゲートおよび読み取りを行います。すべてのセクターに問題がなければ、正常に動作します。ただし、ディスクに不良セクタがある場合は、別の方法で処理する必要があります。

私の質問は、これらのセクターの読み取り中に、それらが不良セクターであるかどうかを判断するために使用できる手順またはライブラリがあるかどうかです。そうでない場合は、どうすればよいですか?どのセクターが不良で、どのセクターがそうでないかを知っているのはディスクコントローラーだと思うので、プログラムが実際に不良セクターにアクセスできるとは思わないので、どの不良セクターを検出してそれに応じて行動するにはどうすればよいですか? SMART をクエリする必要がありますか? もしそうなら、どのように?

私はこのサイトを検索し(コードではなくプログラムに関連するこのC投稿のみを見つけました)、Googleで調べましたが、明らかな解決策はありませんでした。

4

2 に答える 2

2

セクターとそのハードウェア ステータスは、通常のユーザー レベルのコードで処理する必要がないため、この目的で使用できる簡単なコピー/貼り付け API はありません。

また、一般に、セクターの概念は複数のレベルで抽象化されています。1 つの例については、Wikipedia: logical disk address translationを参照してください。物理セクターのステータスは非常に低レベルの概念です。一部のハードウェア ベンダーは、パブリック API を介してまったく公開していません。多くの場合、不良 (または疑わしい) セクターはハードウェア自体で検出され、自動的に他の場所にリダイレクトされます。したがって、一般に、不良ディスク セクタの概念は存在しません。

MSDN ログのガイドライン

...不良セクタ。ディスク ドライバが不良セクタに遭遇した場合、操作を再試行した後、セクタからの読み取りまたはセクタへの書き込みが可能になる場合がありますが、セクタは最終的に不良になります。ディスク ドライバが続行できる場合は、警告イベントをログに記録する必要があります。それ以外の場合は、エラー イベントをログに記録する必要があります。ファイル システム ドライバが多数の不良セクタを検出して修正する場合、警告イベントをログに記録することで、管理者はディスクに障害が発生する可能性があることを判断できます...

この低レベルの概念を実際に扱う必要がある場合は、まず要件として Pascal または Delphi を忘れてください。

Windows API の使用方法を学び、それが選択した言語の API にバインドされることを理解したら (Win32 ユーザー レベルの API 関数を Free Pascal に簡単にマップできます)。

私の意見では、あなたは懐中電灯や浮き輪なしで暗くて深い海を泳ぐつもりであり、あなた(またはあなたのユーザー)が本当に必要/望んでいるものについてよく考え、適切なサイズのトピックを得るために質問を改善する必要があります.答え

于 2014-06-19T18:27:32.750 に答える