windows – なぜ破損したハードドライブは、システム全体を凍結するのですか?

bad-sectors freeze hard-drive windows

不良ブロック(HDTuneとHDDScanで検証)があることが知られているハードドライブが、システム全体をフリーズさせるのはなぜですか?

OSドライブではなく、別のSATAポートに接続されていて、そこから別の健全なドライブにファイルをコピーしようとしています

私は、ほぼすべての破損したハードドライブと、すべてのWindows PCでこの問題を経験しています

ファイルをコピーするのに使っているプログラム(Windowsエクスプローラなど)だけがフリーズするのではないかと期待していたのですが、その代わりにPC全体がギクシャクしてしまい、破損したドライブからファイルをコピーしている間はWebの閲覧や動画の視聴ができなくなってしまいました

長い話

私は地方に住んでいて、電気の問題(停電など)があります。私自身はUPSを使用していますが、自分のハードドライブは全く問題ありません。しかし、近所の人からPCの問題で助けを求められることが多いのですが、私はよく彼らのハードドライブが破損していることに気がつきます。もちろん、破損したドライブを交換した後、私は近所の人にUPSの購入を勧めています

私はいつも不思議に思っていたのですが、なぜ破損したドライブからデータを取得している間にPCが完全にフリーズしてしまうのでしょうか?それはハードウェアの問題ですか?それはOSがデータを読み取る方法によって引き起こされるのですか?それは何かWindows固有のものであり、私は*nix上でそれを経験することはありませんか?

とにかく、これからはWindowsエクスプローラーの代わりに、PC全体をフリーズさせずに、何かしらの専用ソフト(ロードキルの「止められないコピー機」など)を使うことにしていますが、これがまた違った効果を発揮するかはわかりません

助けを求めているのではなく、教育目的なので、物事がなぜそのように動くのかがわかります

  131  JustAMartin  2015-08-09


ベストアンサー

これは、SATAが最適ではない分野の一つです。問題はストレージデバイスの相互接続プロトコルレベルにあるため、実行しているソフトウェアとは関係ありません。別のファイルコピー機や別のオペレーティングシステムを使用しても、問題の影響を軽減するために異なるタイムアウト値を設定しようとすることはありますが、魔法のように状況が改善されることはありません(これはハードウェアとファームウェアによって可能な場合と不可能な場合があります;以下を参照)

ここで重要なポイントがいくつかあります

  1. SATAでは、ドライブが応答しなくなると、問題のある1台のドライブだけでなく、ストレージシステム全体に影響を及ぼす可能性があります。これは確かにコントローラ全体を縛る可能性があり、ほとんどのコンシューマ・システムには単一のディスク・コントローラ(マザーボードに統合されたもの)しかないため、これはすべてのストレージを意味します。ドライブが規格外および/または予期せぬ方法で故障した場合は、さらに悪いことになります。How can a single disk in a hardware SATA RAID-10 array, bring the array entire entire the screeching halt? on Server Faultに興味があるかもしれません
  2. ほとんどのコンシューマ向けSATAドライブのデフォルトのタイムアウト時間は長く(数分単位)、多くのコンシューマ向けSATAドライブには構成可能なエラー回復制御がありません。いわゆる「NAS」ドライブには構成可能なERCが搭載されていることが多く、ハイエンドドライブは事実上常に搭載されています。長いタイムアウト期間は、ドライブがデータの唯一のコピーを保持している場合には有利ですが、残念ながらコンシューマシステムでは一般的です
  3. ドライブは、不良セクタがタイムアウトしきい値に達するまで、またはホストから中止の合図が出るまで、不良セクタの読み取りを試み続けます。SATAバスは、読み取りが終了するまでの待ち時間に拘束される可能性があるため、OSがストレージレベルのコマンドの中止を通知することができない場合があり、極端な場合、ドライブはそのような状況でSATAバスのリセットにもうまく反応しない場合があります

ポイント1は、SASサーバーの主なセールスポイントの1つです。ポイント#2はドライブのファームウェアの制限であり、#3は本当に#2のためだけに問題になります

そこで何が起こるかというと、OS がディスクに “read sectors” コマンドを発行し、特定のセクタが何らかの形で破損しているということです。このように、ディスクはプラッタからデータを取得しようとして再試行モードに入り、何度も何度も読み込もうとすると、ディスク自身のエラー訂正(FEC)が残りのエラーを訂正することができるほどの十分なデータが得られるまで読み込まれます。運が悪ければ、これは決してないかもしれませんが、ドライブは、この読み取りが成功しないと判断する前に、かなり長い期間試し続けます

オペレーティングシステムは読み込みを待っているので、これは少なくともコピープロセスをクロールに遅くし、正確なOSアーキテクチャによっては、OSが不安定になったり、その間フリーズしたりすることがあります。ディスクは、この時点では、元の読み取りに忙しく、現在実行中の読み取りコマンドが終了するまで(成功しても失敗しても)、それ以上の読み取りコマンドには反応しませんし、他のソフトウェアは、一般的には、それが実行されているオペレーティングシステムよりも良いことはありません

したがって、他の場所(理想的には破損したドライブのみ)で読み取りをトリガするものは、破損したドライブが問題のセクタの読み取りに成功するか、または読み取り不可能と判断されるまで待機しなければなりません。SATAでは、応答しないドライブの処理が最適化されていないため、コピー元のドライブだけでなく、I/Oの遅延が発生する可能性があります。これは、オペレーティング・システムが対応できても、そのソフトウェアが別のI/O要求の終了を待つため、他のソフトウェアの動作が遅くなったり、応答不能になったりする原因となります

ここで注意しなければならないのは、ディスク上のファイルに明示的にアクセスしていなくても、ディスク I/O が発生する可能性があるということです。その原因としては、ロードオンデマンド実行コードとスワップの2つが考えられます。スワップは、システムがメモリ圧迫を受けていなくても使用されることがありますし、ロードオンデマンドの実行可能コードは、最新のシステムや最新の実行可能ファイルフォーマットでは一般的なので、通常の使用中に意図しないディスクリードが発生する可能性は非常に現実的です

Matteo Italia の質問に対するコメントで指摘されているように、一つの緩和策は、異なるストレージのインターコネクトを使用することです。USBマスストレージ プロトコルを介して抽象化することで、問題のあるSATA部分をシステムの残りの部分から分離し、理論的には特定のディスク上のI/Oのみがそのディスク上のI/O問題の影響を受けることを意味します

余談ですが、SATA (特にドライブレベルの ERC を持たない SATA) が RAID (特に 冗長性のある RAID レベルでは、標準的なものの中では RAID 0)を除くすべての標準的なものです。長いタイムアウト期間と貧弱なエラー処理は、単一の不良セクタのためにデバイス全体がアレイから投げ出される原因となります。SAS は大規模なストレージアレイ用に設計されているため、時々様々なドライブに問題が発生することを想定して設計されています。問題のあるディスクはコンシューマ・システムではあまり一般的ではありませんが、それは単に、それらのシステムには多くのディスクがインストールされていない傾向があり、インストールされているディスクには実質的に冗長性がないからです。SATAはSCSIではなくPATA/IDEを置き換えることを目的としていたので(後者はSASが目指していたニッチである)、そのエラー処理機能と要求(または保証)は、意図された使用ケースに適していると考えられた可能性があります

170  user  2015-08-09


上述したように、不良ハードドライブによるシステムフリーズの問題は、主にドライブが不良セクタから読めないデータを回復しようとする時間が長いことが原因です。エンタープライズ・ドライブのセールスポイントの1つは、故障したセクタの読み取りタイムアウトが非常に短いことです。エンタープライズ・ドライブを使用することで、問題をある程度軽減することはできますが、問題を解決することはできません

今後の最善の答えは、リカバリーが必要ないように適切なバックアップを維持することです。これはファームウェアのタイムアウトの問題なので、リカバリーソフトウェアを変更しても違いはありません

3  John Pace II  2015-08-11


破損したハードドライブがシステム全体をフリーズさせるのはなぜですか?

(一般的には)その必要はありません。ディスク障害がどのように処理されるかは、特定のファイルシステムに依存します

かなりの耐障害性に対応できるように一から設計されている ZFS を考えてみましょう。ここでは、デモビデオ (および より多くの説明をしたもの) があり、彼らは金床の上に実行中のドライブを置き、スレッジハンマーでスイングを取り、別のドライブを掘削します。ZFS が稼働し続けている間は、すべて

2  Jens  2015-08-11


あなたが遭遇している問題は、OSの低レベルな部分が、あきらめる前に何度も不良ブロックを読み込もうとしていることだと思います。このルーチンは、起動時などのスタンドアロン動作中に必要になった場合に備えて低レベルで実装されているため、再入室させることが難しいのです。オペレーティングシステムは通常の動作中に継続的にページングを行い、低レベルのシステムはページング要求を所有するプロセスの優先度を知らないので、競合する要求に優先度を与えることは困難である

-2  jrrk  2015-08-10


タイトルとURLをコピーしました