web-dev-qa-db-ja.com

障害が発生し、I / Oが保留になっているRAID5アレイを停止して修復するにはどうすればよいですか?

短いバージョン:RAID 5アレイに障害が発生し、I/O操作を待機している多数のプロセスがハングしています。どうすればこれから回復できますか?

長いバージョン:昨日、Sambaへのアクセスが非常に散発的であることに気づきました。 Windowsからサーバーの共有にアクセスすると、1つまたは2つのディレクトリをクリックした後、エクスプローラーがランダムに完全にロックされます。 Windowsが苦痛だと思って、そのままにしておきました。今日も問題は同じなので、少し掘り下げました。私が最初に気付いたのは、ps aux | grep smbdを実行すると次のような行がたくさん表示されることです。

ben        969  0.0  0.2  96088  4128 ?        D    18:21   0:00 smbd -F
root      1708  0.0  0.2  93468  4748 ?        Ss   18:44   0:00 smbd -F
root      1711  0.0  0.0  93468  1364 ?        S    18:44   0:00 smbd -F
ben       3148  0.0  0.2  96052  4160 ?        D    Mar07   0:00 smbd -F
...

「D」状態でスタックしているプロセスがたくさんあります。 ps aux | grep " D"を実行すると、夜間のバックアップスクリプトを含む他のプロセスが表示されます。これらのプロセスはすべて、ある時点でRAIDアレイにマウントされているボリュームにアクセスする必要があります。少しグーグルした後、RAIDアレイに障害が発生している可能性があることがわかったので、/proc/mdstatを確認しました。これは次のことを示しています。

ben@jack:~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdb1[3](F) sdc1[1] sdd1[2]
      2930271872 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]

unused devices: <none>

そして、mdadm --detail /dev/md0を実行すると、次のようになります。

ben@jack:~$ Sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sat Oct 31 20:53:10 2009
     Raid Level : raid5
     Array Size : 2930271872 (2794.53 GiB 3000.60 GB)
  Used Dev Size : 1465135936 (1397.26 GiB 1500.30 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Mon Mar  7 03:06:35 2011
          State : active, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 1
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : f114711a:c770de54:c8276759:b34deaa0
         Events : 0.208245

    Number   Major   Minor   RaidDevice State
       3       8       17        0      faulty spare rebuilding   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1

これは、sdb1に障害が発生したことを示していると思います。そのため、アレイは3つの「アップ」のうち2つのドライブで実行されています。私が見つけたいくつかのアドバイスは、/ var/log/messagesで失敗の通知をチェックするように言っていましたが、十分にたくさんあることを確認してください。

ben@jack:~$ grep sdb /var/log/messages

...

Mar  7 03:06:35 jack kernel: [4525155.384937] md/raid:md0: read error NOT corrected!! (sector 400644912 on sdb1).
Mar  7 03:06:35 jack kernel: [4525155.389686] md/raid:md0: read error not correctable (sector 400644920 on sdb1).
Mar  7 03:06:35 jack kernel: [4525155.389686] md/raid:md0: read error not correctable (sector 400644928 on sdb1).
Mar  7 03:06:35 jack kernel: [4525155.389688] md/raid:md0: read error not correctable (sector 400644936 on sdb1).
Mar  7 03:06:56 jack kernel: [4525176.231603] sd 0:0:1:0: [sdb] Unhandled sense code
Mar  7 03:06:56 jack kernel: [4525176.231605] sd 0:0:1:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Mar  7 03:06:56 jack kernel: [4525176.231608] sd 0:0:1:0: [sdb] Sense Key : Medium Error [current] [descriptor]
Mar  7 03:06:56 jack kernel: [4525176.231623] sd 0:0:1:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed
Mar  7 03:06:56 jack kernel: [4525176.231627] sd 0:0:1:0: [sdb] CDB: Read(10): 28 00 17 e1 5f bf 00 01 00 00

私には、デバイスsdbに障害が発生したことは明らかです。アレイを停止し、シャットダウンし、交換し、再起動してから、アレイを修復し、元に戻してファイルシステムをマウントする必要があります。交換用ドライブをホットスワップできず、アレイを劣化状態で実行したままにしたくありません。配列を停止する前にファイルシステムをアンマウントすることになっていると思いますが、それは失敗していて、それが私が今立ち往生しているところです:

ben@jack:~$ Sudo umount /storage
umount: /storage: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

本当に忙しいです。 I/Oを待機しているプロセスは約30または40あります。

私は何をすべきか?これらすべてのプロセスを強制終了して再試行する必要がありますか?彼らが「中断できない」とき、それは賢明な動きですか?再起動しようとするとどうなりますか?

私が何をすべきだと思うか教えてください。また、問題を診断したり、支援したりするために追加情報が必要かどうかを尋ねてください。

4
Ben Hymers

アレイを停止する必要はないと思います。/dev/sdbに障害が発生し、それを取り外し(プラグ可能なハードドライブだと思います)、ホットスペアとして宣言する新しいドライブを接続するだけです。

4
wazoox

I/Oを試行しているプロセスを強制終了することはできません。あなたがしなければならないことは、umountコマンドのlazyオプションを使用して、ファイルシステムの名前空間からファイルシステムを削除することです。その上のファイルはまだ開いています。これ(およびLinuxの設計のこの側面の他の「癖」)の詳細については、 Neil Brown を参照してください。

umount -l /storage
3
sciurus

また、書き込み中のファイルシステムをアンマウントするのではなく、ディスクへの書き込みを停止して現在の書き込みを終了できるようにするsambaプロセスを停止することもできます。

1
Mike