web-dev-qa-db-ja.com

コマンドを実行すると「入出力エラー」が発生する

先週の月曜日の朝、サーバーがコマンドを実行できないことがわかり、「入出力エラー」と表示されました。 30分試してみたところ、実行できるコマンドはSudo poweroff -fのみであることがわかりました(フラグ-fを使用する必要があります。そうしないと、「入出力エラー」が発生します)。
サーバーを手動で起動してシステムログを確認しましたが、特別なことは何もありませんでした。そして、smartctlテストを行って、ハードディスクに問題がないか確認しました。そして、それはエラーなしで通過しました。
そして今週月曜日にこの問題が再び現れます。サーバーをシャットダウンして手動で起動すると、何も起こらなかったように見えます。次に、メモリスティックに問題がなければ、msmtest86 8.2テストを使用します。また、SATAケーブルとハードディスクが良好な状態であり、確実に接続されていることを確認してください。
OSやファイルシステムの問題かもしれません。私のOSはDebian 8.11です。アドバイスをいただけますか?皆さん、ありがとうございました!

1
fajin yu

サーバーがコマンドを実行できないことがわかり、「入出力エラー」が表示されます

コマンド起動時のエラーコードEIO( "入出力エラー")は、ファイルシステムが破損している場合に発生します。または、不良なストレージで実行している場合。

指をクロスします。どちらにしても、この時点では、本当に必要でない限りサーバーの電源をオンにしないでください。1

テスト

2つの根本原因を区別する確実な方法が1つあります。システムでブロックレベルの読み取りスキャンを実行し、カーネルメッセージに注意します。

  1. GNU/Linuxリカバリブートディスクでシステムを起動します。
  2. システムを通常のテキストコンソールに変更します(Ctrl + Alt + F1を押します)。 これにはグラフィカル端末を使用しないでください
  3. Rootとしてログインします。
  4. dmesg -Eを実行して、コンソールでのカーネルメッセージのライブ表示を有効にします。
  5. dmesg -n debugを実行すると、低レベルのカーネルメッセージが表示されます。
  6. blkidを実行して、どのdiskにシステムパーティションが含まれているかを確認します。 (blkidはパーティションを一覧表示します。パーティションパスの末尾から番号を削除すると、ディスクが取得されます)
  7. time -p dd if=/dev/sda of=/dev/null bs=4Mを実行して-disk全体の読み取りテストを実行します(これは慎重に入力してください)。システムdisk/dev/sdaでない場合は、適宜置き換えてください。
  8. 画面を見る(しばらく時間がかかります)...

結果

  • ddが問題なく正常に完了した最良の場合は、ファイルシステムの問題である可能性があります。

    • ブートディスクからファイルシステムチェックを実行することに問題がなければ、今すぐ実行できます(推奨)。
    • システムが自動的に並べ替えるようにしたい場合は、再起動し(ブートディスクも削除します)、通常のシステムを起動しますが、カーネルコマンドラインの最後にfsck.mode=forceを追加します。 (詳細は この質問 を参照)
    • ただし、ファイルシステムチェックの結果について議論する場合は、別の質問が必要になります。
  • ただし、最悪の場合では、次のようなカーネルメッセージが画面に表示されます。

    ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
    ata2.00: irq_stat 0x40000001
    ata2.00: failed command: READ DMA EXT
    ata2.00: cmd 25/00:08:78:15:c5/00:00:6c:00:00/e0 tag 0 dma 4096 in
             res 51/40:00:78:15:c5/00:00:6c:00:00/e0 Emask 0x9 (media error)
    ata2.00: status: { DRDY ERR }
    ata2.00: error: { UNC }
    ata2.00: configured for UDMA/100
    sd 1:0:0:0: [sda] Unhandled sense code
    sd 1:0:0:0: [sda]  
    Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
    sd 1:0:0:0: [sda]  
    Sense Key : Medium Error [current] [descriptor]
    Descriptor sense data with sense descriptors (in hex):
            72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
            6c c5 15 78 
    sd 1:0:0:0: [sda]  
    Add. Sense: Unrecovered read error - auto reallocate failed
    sd 1:0:0:0: [sda] CDB: 
    Read(10): 28 00 6c c5 15 78 00 00 08 00
    end_request: I/O error, dev sda, sector 1824855416
    Buffer I/O error on device sda, logical block 228106927
    ata2: EH complete
    

    重要な部分を探します。

    • 中括弧内のDRDYERRおよびUNC
    • Medium Errorステータス
    • Unrecovered read errorセンスメッセージ

    これらをちらっと見てメッセージで(一度でも)見つけると、物理ディスクエラーが発生していることが示されます。

    この場合、ddを終了させずに、Ctrl + Cを押して停止します。NOW;システムをシャットダウンし、信頼できるデータ復旧ショップにディスクを持ち込みます。

  • 上記の最悪の事例を見つけられず、この種のカーネルメッセージが繰り返し見つかった場合:

    ata2: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen
    ata2: irq_stat 0x00000040, connection status changed
    ata2: SError: { CommWake DevExch }
    ata2: hard resetting link
    ata2: link is slow to respond, please be patient (ready=0)
    

    重要なパーツ:

    • hard resetting link
    • link is slow to respond

    次に、SATAリンクの問題(ケーブル不良など)に直面しています。Ctrl+ Cを押して停止し、システムをシャットダウンして、ディスクケーブルと接続を修正してから、再試行してください。

サイドノート

また、smartctlテストを実行して、ハードディスクに問題がないか確認しました。そして、それはエラーなしで通過しました。

一部のハードディスクでは、S.M.A.R.Tステータス(私はあなたを見ている、東芝);私の以前のラップトップのハードディスクは、読み取り時に読み取りを停止して読み取りエラーを吐き出し、ステータスレジスタにまだ「何も問題はない」と表示されていました。

サーバーがミッションクリティカルな場合は、 [〜#〜] raid [〜#〜] ベースのセットアップを検討する必要があります。


  • 1注意物語:私のハウスメイトはかつてこの警告を無視し、とにかくファイルシステムチェッカーを彼のデスクトップシステムで削っていました。最終的に起動に失敗するまで、彼は私がそれをチェックするのを待ちませんでした。それを確認する機会を得たとき、ディスクの損傷はすでに回復の域を超えていました(500 GBのディスクはカタツムリのペースのKB /秒でかろうじて読み取ることができ、数日後でも重要な継続的な読み取り可能領域は見つかりませんでした)。

    一方、同じ症状の別のケースでは、マシンの所有者が私の警告に耳を傾け、それをチェックできるようになるまでその状態を残しました。もちろん、それはハードディスクの故障でした。 GNU DDRescue セッションの半日と1台の新しいハードディスクの後、私は彼にシステムとデータがブロックレベルで100%回復したこと、つまりすべてのファイルが完全であり、起動する準備ができていることを彼に朗報しました改造せずに。