web-dev-qa-db-ja.com

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

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

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

私はほとんどすべての損傷したハードドライブとすべてのWindows PCでこの問題を経験しました。

ファイルのコピーに使用しているプログラム(Windowsエクスプローラなど)の場合にのみフリーズすることが予想されますが、代わりに私のPC全体が起動します。けがをした、と私は破損したドライブからファイルをコピーしながらWebを閲覧したり、映画を見ることはできません。

長い話.

私は電気に問題がある農村部に住んでいます(電圧低下など)。私は自分でUPSを使用していますが、私のハードドライブはまったく問題ありません。しかし、私の隣人は彼らのPCの問題で助けを求めることがよくあります、そして、私は彼らのハードドライブが損傷していることをしばしば見つける、おそらく電気の問題のためです。もちろん、損傷したドライブを交換した後、私は近所の人にUPSを購入することを勧めます。

私はいつも不思議に思っていました、なぜ私のPCが損傷したドライブからデータを検索している間完全にフリーズします。ハードウェアの問題ですか? OSがデータを読み取る方法が原因ですか。それはWindows特有のものでしょうか、そして私は* nixではそれを経験しませんか?

とにかく、これからはWindows Explorerの代わりに専用のソフトウェア(RoadkilのUnstoppable Copierなど)を使うつもりですが、PC全体をフリーズさせずに動作が異なるかどうかはわかりませんが。

それは助けを求めるものではなく、教育目的のためのものです。だから物事がそのように働く理由を私は知っています。

128
JustAMartin

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

ここにはいくつかの重要なポイントがあります。

  1. SATAでは、ドライブが応答しなくなった場合、これはストレージシステム全体を拘束する可能性があります問題が発生している1つのドライブだけではありません。確かにコントローラー全体を拘束する可能性があり、ほとんどのコンシューマーシステムは単一のディスクコントローラー(マザーボードに統合されたもの)しか持たないため、これはすべてのストレージを意味します。ドライブが何らかの非標準的または予期しない方法で故障すると、さらに悪いことになります。興味があるかもしれません ハードウェアSATA RAID-10アレイ内の1つのディスクがアレイ全体をきしむような停止状態にする方法 on Server Fault。
  2. ほとんどの民生用SATAドライブには長いデフォルトのタイムアウト期間(数分程度)があり、多くの民生用SATAドライブには構成可能な エラー回復制御 がありません。いわゆる「NAS」ドライブには多くの場合、構成可能なERCがありますが、ハイエンドドライブには事実上常にあります。このようなドライブでは、デフォルトのタイムアウトが短くなる場合があります(7秒が一般的な値です)。長いタイムアウト期間は、ドライブがデータの唯一のコピーを保持している場合に有利です。これは残念ながらコンシューマシステムでは一般的です。冗長構成の場合や、ドライブがさらに劣化する前にできるだけドライブからできるだけ離れたい場合、これらは不利です。
  3. ドライブは、タイムアウトしきい値に達するまで、またはホストから中止が通知されるまで、不良セクタの読み取りを試行し続けるになります。 SATAバスは読み取りが完了するのを待つことで縛られる可能性があるため、OSがストレージレベルのコマンドアボートを通知できない場合があり、極端な場合、ドライブがSATAバスのリセットに適切に応答しないこともありますそのような状況で。

ポイント#1は、サーバー上の SAS の主要なセールスポイントの1つです。 SASにはsignificantly SATAよりも優れたエラー処理があります。ポイント#2はドライブファームウェアの制限であり、#3が本当に問題となるのは#2だけです。

それで、OSがディスクに「セクターの読み取り」コマンドを発行し、特定のセクターが何らかの形で損傷します。したがって、ディスクは再試行モードになり、プラッタからデータを取得しようとし、ディスク自体のエラー修正( FEC )が可能な十分なデータを取得するまで何度も読み取りを試行します残りのエラーを修正します。運が悪い場合、これは決してないかもしれませんが、この読み取りが成功しないと判断するまで、ドライブはかなり長い期間試行を続けます。

オペレーティングシステムは読み取りを待機しているため、少なくともコピープロセスの速度が低下し、正確なOSアーキテクチャによっては、OSがぎくしゃくしたり、その間フリーズしたりすることがあります。この時点で、ディスクは元の読み取りでビジーであり、現在実行中のコマンドが終了する(成功または失敗する)まで他の読み取りコマンドに応答せず、他のソフトウェアは一般にオペレーティングシステムよりも良くなりませんで実行されています。

そのため、他の場所で読み取りをトリガーするもの(ideally、破損したドライブでのみ)は、破損したドライブが問題のセクターを正常に読み取るか、読み取りできないと判断するまで、順番に待機する必要があります。読む。 SATAが応答しないドライブを最適に処理できないためこれは、コピー元のドライブだけでI/Oが遅延することを意味します。これにより、オペレーティングシステムが対応できる場合でも、別のI/O要求が完了するのを待機するため、他のソフトウェアが非常に簡単に遅くなったり応答しなくなったりする可能性があります。

ここでは、ディスク上のファイルに明示的にアクセスしていない場合でも、ディスクI/Oが発生する可能性があることに注意することも重要です。これの主な2つの原因は、ロードオンデマンドの実行可能コードとスワップです。システムがメモリ不足になっていない場合でもスワップが使用されることがあり、ロードオンデマンドの実行可能コードは現代のシステムおよび現代の実行可能ファイル形式で一般的であるため、通常の使用中の意図しないディスク読み取りアクティビティは非常に現実的な可能性があります。

Matteo Italia による質問へのコメントで指摘されているように、緩和策の1つは異なるストレージインターコネクトを使用することです。これは「ディスクをUSBエンクロージャーに入れる」という複雑な方法です。 SB大容量記憶装置 プロトコルを介して抽象化することにより、問題のあるSATA部分をシステムの残りの部分から分離します。つまり、理論上、その特定のディスクのI/Oのみです。そのディスク上のI/O問題の影響を受けるはずです。

少し余談ですが、これは、SATA(特に、ドライブレベルのERCを持たないSATA)がRAID(特に、 RAIDレベル 冗長性あり)に推奨されない理由です。 RAID );長いタイムアウト期間と貧弱なエラー処理により、単一の不良セクタに対してデバイス全体がアレイから簡単に破棄される可能性があります。冗長性が存在し、ストレージコントローラがこれが問題であることを認識している場合、RAIDコントローラは適切に処理できます。 SASは、大規模なストレージアレイ用に設計されたため、さまざまなドライブで問題が発生する可能性があるため、単一の問題のあるドライブまたはI/O要求のケースを処理するように設計されました。 gracefullyドライブがそうでなくても。問題のあるディスクは、多くのディスクがインストールされていない傾向があるため、コンシューマシステムではあまり一般的ではなく、インストールされたディスクには事実上冗長性がありません。 SATAはSCSIではなくPATA/IDEを置き換えることを目的としていたため(後者は目的のニッチSAS)、そのエラー処理機能と要求(または保証)は、意図されたユースケースに適していると考えられます。

169
a CVn

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

最善の解決策は、適切なバックアップを維持してリカバリが不要になるようにすることです。これはファームウェアのタイムアウトの問題であるため、リカバリソフトウェアを変更しても効果はありません。

3
John Pace II

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

彼らは(一般的に)する必要はありません。ディスク障害がどのように処理されるかは、実際には特定のファイルシステムによって異なります。

ZFSについて考えてみましょう。ZFSは、かなりのフォールトトレランスを処理するためにゼロから設計されています。ここに、 デモビデオ (と を説明したもの )があります。アンビルでドライブを動かし、スレッジハンマーでスイングして、別のドライブを開けます。 ZFSは稼働し続けます。

2
Jens