これは、SATAが最適ではない分野の1つです。問題はストレージデバイスの相互接続プロトコルレベルにあるため、実行しているソフトウェアとは関係ありません。別のファイルコピー機または別のオペレーティングシステムを使用しても、問題の影響を軽減するために異なるタイムアウト値を設定しようとする場合があります(ハードウェアとファームウェアによっては可能または不可能な場合があります。以下を参照) )。
ここにはいくつかの重要なポイントがあります。
- SATAを使用すると、ドライブが応答しなくなると、問題のある1つのドライブだけでなく、ストレージシステム全体が拘束される可能性があります。確かにコントローラー全体を拘束する可能性があり、ほとんどのコンシューマーシステムは単一のディスクコントローラー(マザーボードに統合されたもの)しか持たないため、これはすべてのストレージを意味します。ドライブが何らかの非標準的および/または予期しない方法で故障すると、さらに悪いことになります。ハードウェアSATA RAID-10アレイ内の単一のディスクがアレイ全体をきしむように停止させる方法に興味があるかもしれません。サーバー障害。
- ほとんどの民生用SATAドライブは、デフォルトのタイムアウト期間が長く(数分)、多くの民生用SATAドライブには構成可能なエラー回復制御がありません。いわゆる「NAS」ドライブには多くの場合、構成可能なERCがあり、ハイエンドドライブには事実上常にあります。このようなドライブでは、デフォルトのタイムアウトが短くなる場合があります(7秒が一般的な値です)。長いタイムアウト期間は、ドライブがデータの唯一のコピーを保持している場合に有利です。これは残念ながらコンシューマシステムで一般的です。冗長構成の場合、またはドライブがさらに劣化する前にドライブからできるだけ多くの情報を取得したい場合、これらは不利です。
- ドライブは、タイムアウトしきい値に達するか、ホストから中止が通知されるまで、不良セクタの読み取りを試行し続けます。SATAバスは読み取りが完了するのを待つことで縛られる可能性があるため、OSがストレージレベルのコマンドアボートを通知できない場合があり、極端な場合、ドライブがSATAバスのリセットに適切に応答しないこともありますそのような状況で。
ポイント#1は、サーバー上のSASの主要なセールスポイントの1つです。SASはSATAよりもエラー処理が大幅に優れています。ポイント#2はドライブファームウェアの制限であり、#3が本当に問題となるのは#2だけです。
そのため、OSがディスクに「セクターの読み取り」コマンドを発行し、特定のセクターが何らかの形で損傷します。したがって、ディスクは再試行モードになり、プラッタからデータを取得しようとし、ディスク自体のエラー修正(FEC)が残りのエラーを修正できる十分なデータを取得するまで何度も読み取りを試行します。運が悪い場合、これは決してないかもしれませんが、この読み取りが成功しないと判断するまで、ドライブはかなり長い期間試行を続けます。
オペレーティングシステムは読み取りを待機しているため、少なくともコピープロセスの速度が低下し、正確なOSアーキテクチャによっては、OSがぎくしゃくしたり、その間フリーズしたりすることがあります。この時点で、ディスクは元の読み取りでビジーであり、現在実行中のコマンドが終了(成功または失敗)するまで、それ以降の読み取りコマンドに応答しません。他のソフトウェアは、通常、オペレーティングシステムで実行されています。
したがって、他の場所(理想的には、破損したドライブのみ)で読み取りをトリガーするものはすべて、破損したドライブが問題のセクターを正常に読み取るか、読み取ることができないと判断するまで順番に待機する必要があります。応答しないドライブのSATAの処理が最適ではないため、コピー元のドライブだけでI / Oが遅延するわけではありません。これにより、オペレーティングシステムが対応できる場合でも、別のI / O要求が完了するのを待つため、他のソフトウェアが非常に簡単に遅くなったり、応答しなくなったりする可能性があります。
また、ディスク上のファイルに明示的にアクセスしていない場合でも、ディスクI / Oが発生する可能性があることに注意してください。これの主な2つの原因は、ロードオンデマンドの実行可能コードとスワップです。システムがメモリ不足になっていない場合でもスワップが使用されることがあり、ロードオンデマンドの実行可能コードは現代のシステムおよび現代の実行可能ファイル形式で一般的であるため、通常の使用中の意図しないディスク読み取りアクティビティは非常に現実的な可能性です。
Matteo Italiaによる質問へのコメントで指摘されているように、緩和策の1つは、異なるストレージインターコネクトを使用することです。これは、「ディスクをUSBエンクロージャーに入れる」という複雑な方法です。USB大容量ストレージプロトコルを介して抽象化することにより、問題のあるSATA部分をシステムの他の部分から分離します。つまり、理論上、特定のディスク上のI / Oのみがそのディスク上のI / O問題の影響を受けることになります。
ちょっとした話ですが、これが、SATA(特に、ドライブレベルのERCを持たないSATA)がRAID(特に冗長性のあるRAIDレベル、特に標準レベルはすべてRAID 0を除く)に推奨されない理由です。長いタイムアウト期間と貧弱なエラー処理により、単一の不良セクタのデバイス全体がアレイから簡単に破棄される可能性があります。冗長性が存在し、ストレージコントローラがこれが問題であることを認識している場合、RAIDコントローラは適切に処理できます。SASは大規模なストレージアレイ用に設計されたため、さまざまなドライブで問題が発生する可能性があるため、単一の問題のあるドライブまたはI / O要求のケースを適切に処理するように設計されました。ドライブがそうでなくても。問題のあるディスクは、多くのディスクがインストールされていない傾向があるため、コンシューマシステムではあまり一般的ではなく、インストールされたディスクには事実上冗長性がありません。SATAはSCSIではなくPATA / IDEを置き換えることを目的としていたため(後者は目的のニッチSASです)、エラー処理機能と要求(または保証)が意図したユースケースに十分であると考えられた可能性があります。