web-dev-qa-db-ja.com

4つのディスクを備えたRAID5は、1つの障害のあるディスクでは動作しませんか?

mdadmスペアディスク についての質問を見つけました。これはほとんど私の質問に答えますが、何が起こっているのかわかりません。

RAID5は4つのディスクでセットアップされており、通常の操作ではすべてactive/syncとラベル付けされています。

    Update Time : Sun Sep 29 03:44:01 2013
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

.。

Number   Major   Minor   RaidDevice State
   0     202       32        0      active sync   /dev/sdc
   1     202       48        1      active sync   /dev/sdd
   2     202       64        2      active sync   /dev/sde 
   4     202       80        3      active sync   /dev/sdf

しかし、ディスクの1つに障害が発生すると、RAIDは機能しなくなりました。

    Update Time : Sun Sep 29 01:00:01 2013
          State : clean, FAILED 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1

.。

Number   Major   Minor   RaidDevice State
   0     202       32        0      active sync   /dev/sdc
   1     202       48        1      active sync   /dev/sdd
   2       0        0        2      removed
   3       0        0        3      removed

   2     202       64        -      faulty spare   /dev/sde
   4     202       80        -      spare   /dev/sdf

ここで本当に何が起こっているのですか?

修正はRAIDを再インストールすることでした-幸いにも私はそれを行うことができます。次回はおそらくいくつかの深刻なデータが含まれているでしょう。これを理解して、単一ディスクの障害が原因で障害が発生しないRAIDを使用できるようにする必要があります。

期待したことと起こったことをリストしていないことに気づきました。

3つの良好なディスクと1つの不良なディスクを備えたRAID5は、劣化モードで動作することを期待しています。3つはアクティブ/同期、1つは障害です。

起こったのは、スペアが薄い空気から作成され、障害があると宣言された-その後、新しいスペアがまた薄い空気から作成され、音を宣言された-その後RAIDは動作不能と宣言されました。

これはblkidからの出力です。

$ blkid
/dev/xvda1: LABEL="/" UUID="4797c72d-85bd-421a-9c01-52243aa28f6c" TYPE="ext4" 
/dev/xvdc: UUID="feb2c515-6003-478b-beb0-089fed71b33f" TYPE="ext3" 
/dev/xvdd: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3" 
/dev/xvde: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3" 
/dev/xvdf: UUID="feb2c515-6003-478b-beb0-089fed71b33f" SEC_TYPE="ext2" TYPE="ext3" 

RAIDにはext3ではなくXFSがあるため、TYPEとSEC_TYPEは興味深いものです。

このディスクで試行されたマウントのログ(他のすべてのマウントと同様に、前にリストされた最終結果になりました)には、次のログエントリがあります。

Oct  2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct  2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct  2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct  2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct  2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct  2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
Oct  2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct  2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
Oct  2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct  2 15:08:51 it kernel: [1686185.634024]  md0: unknown partition table
Oct  2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.
Oct  2 15:22:25 it kernel: [1686999.697076] XFS (md0): Mounting Filesystem
Oct  2 15:22:26 it kernel: [1686999.889961] XFS (md0): Ending clean mount
Oct  2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct  2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423368 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423376 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423384 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423392 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423400 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423408 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423416 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423424 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423432 on xvde).
Oct  2 15:24:19 it kernel: [1687113.432129] md: md0: recovery done.
Oct  2 15:24:19 it kernel: [1687113.685151] Buffer I/O error on device md0, logical block 96
Oct  2 15:24:19 it kernel: [1687113.691386] Buffer I/O error on device md0, logical block 96
Oct  2 15:24:19 it kernel: [1687113.697529] Buffer I/O error on device md0, logical block 64
Oct  2 15:24:20 it kernel: [1687113.703589] Buffer I/O error on device md0, logical block 64
Oct  2 15:25:51 it kernel: [1687205.682022] Buffer I/O error on device md0, logical block 96
Oct  2 15:25:51 it kernel: [1687205.688477] Buffer I/O error on device md0, logical block 96
Oct  2 15:25:51 it kernel: [1687205.694591] Buffer I/O error on device md0, logical block 64
Oct  2 15:25:52 it kernel: [1687205.700728] Buffer I/O error on device md0, logical block 64
Oct  2 15:25:52 it kernel: [1687205.748751] XFS (md0): last sector read failed

そこにxvdfがリストされていません...

6
Mei

これはRAID5の根本的な問題です。再構築時の不良ブロックはキラーです。

Oct  2 15:08:51 it kernel: [1686185.573233] md/raid:md0: device xvdc operational as raid disk 0
Oct  2 15:08:51 it kernel: [1686185.580020] md/raid:md0: device xvde operational as raid disk 2
Oct  2 15:08:51 it kernel: [1686185.588307] md/raid:md0: device xvdd operational as raid disk 1
Oct  2 15:08:51 it kernel: [1686185.595745] md/raid:md0: allocated 4312kB
Oct  2 15:08:51 it kernel: [1686185.600729] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
Oct  2 15:08:51 it kernel: [1686185.608928] md0: detected capacity change from 0 to 2705221484544
⋮

アレイは組み立てられ、劣化しています。 xvdc、xvde、およびxvddでアセンブルされています。どうやら、ホットスペアがあります:

Oct  2 15:08:51 it kernel: [1686185.615772] md: recovery of RAID array md0
Oct  2 15:08:51 it kernel: [1686185.621150] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
Oct  2 15:08:51 it kernel: [1686185.627626] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
Oct  2 15:08:51 it kernel: [1686185.634024]  md0: unknown partition table
Oct  2 15:08:51 it kernel: [1686185.645882] md: using 128k window, over a total of 880605952k.

「パーティションテーブル」メッセージは無関係です。他のメッセージは、mdがおそらくホットスペア(削除/再追加を試みた場合、以前に失敗したデバイスである可能性があります)に対してリカバリを実行しようとしていることを示しています。

⋮
Oct  2 15:24:19 it kernel: [1687112.817845] end_request: I/O error, dev xvde, sector 881423360
Oct  2 15:24:19 it kernel: [1687112.820517] raid5_end_read_request: 1 callbacks suppressed
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: read error not correctable (sector 881423360 on xvde).
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Disk failure on xvde, disabling device.
Oct  2 15:24:19 it kernel: [1687112.821837] md/raid:md0: Operation continuing on 2 devices.

そしてこれは、xvde(残りの3つのデバイスの1つ)からセクターを読み取ろうとしているmdです。それは失敗し[おそらく不良セクタ]、md(アレイが劣化しているため)は回復できません。したがって、ディスクがアレイから追い出され、ダブルディスク障害が発生すると、RAID5は停止します。

なぜスペアとしてラベル付けされているのかわかりません—それは奇妙です(ただし、私は通常/proc/mdstatを見ていると思うので、mdadmがラベル付けする方法かもしれません)。また、新しいカーネルは不良ブロックを追い出すことをはるかに躊躇していると思いましたが、おそらく古いものを実行しているのでしょうか。

あなたはこれについて何ができますか?

良いバックアップ。これは、データを存続させるための戦略の重要な部分です。

アレイが不良ブロックを定期的にスクラブするようにしてください。お使いのOSには、このためのcronジョブがすでに含まれている場合があります。これを行うには、repairまたはcheck/sys/block/md0/md/sync_actionにエコーします。 「修復」は、検出されたパリティエラーも修復します(たとえば、パリティビットがディスク上のデータと一致しません)。

# echo repair > /sys/block/md0/md/sync_action
#

進行状況は、cat /proc/mdstat、またはそのsysfsディレクトリ内のさまざまなファイルで監視できます。 ( Linux Raid Wiki mdstatの記事 でやや最新のドキュメントを見つけることができます。

注:古いカーネル(正確なバージョンがわからない)では、チェックしても不良ブロックが修正されない場合があります。

最後のオプションの1つは、RAID6に切り替えることです。これには別のディスクが必要になります(can4ディスクまたは3ディスクのRAID6を実行できますが、おそらく実行したくないでしょう)。十分に新しいカーネルを使用すると、不良ブロックは可能な場合はその場で修正されます。 RAID6は2つのディスク障害に耐えることができるため、1つのディスクに障害が発生した場合でも、不良ブロックに耐えることができます。したがって、不良ブロックをマップして再構築を続行します。

4
derobert

次のようにRAID5アレイを作成していると想像しています。

$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
       /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

それはあなたが望むものではありません。むしろ、次のようにディスクを追加する必要があります。

$ mdadm --create /dev/md0 --level=5 --raid-devices=4 \
       /dev/sda1 /dev/sdb1 /dev/sdc1
$ mdadm --add /dev/md0 /dev/sdd1

または、mdadmのオプションを使用して、次のようなスペアを追加できます。

$ mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
       /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

リストの最後のドライブがスペアになります。

mdadmのマニュアルページからの抜粋

-n, --raid-devices=
      Specify the number of active devices in the array.  This, plus the 
      number of spare devices (see below) must  equal the  number  of  
      component-devices (including "missing" devices) that are listed on 
      the command line for --create. Setting a value of 1 is probably a 
      mistake and so requires that --force be specified first.  A  value 
      of  1  will then be allowed for linear, multipath, RAID0 and RAID1.  
      It is never allowed for RAID4, RAID5 or RAID6. This  number  can only 
      be changed using --grow for RAID1, RAID4, RAID5 and RAID6 arrays, and
      only on kernels which provide the necessary support.

-x, --spare-devices=
      Specify the number of spare (eXtra) devices in the initial array.  
      Spares can also be  added  and  removed  later. The  number  of component
      devices listed on the command line must equal the number of RAID devices 
      plus the number of spare devices.
2
slm