RAID 5 с 4 дисками не работает при выходе из строя одного диска?

RAID 5 с 4 дисками не работает при выходе из строя одного диска?

Я нашел вопрос озапасные диски 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

Но затем, когда один из дисков вышел из строя, 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, который не выйдет из строя из-за отказа одного диска.

Я понял, что не сопоставил то, что я ожидал, с тем, что произошло.

Я ожидаю, что RAID5 с 3 исправными дисками и 1 плохим будет работать в ухудшенном режиме — 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" 

Параметры TYPE и SEC_TYPE интересны, поскольку в RAID-массиве используется XFS, а не ext3....

В журналах попытки монтирования этого диска, которая, как и все остальные попытки монтирования, привела к указанному выше результату, имеются следующие записи:

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...

решение1

Это фундаментальная проблема 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.

А это md пытается прочитать сектор из xvde (одно из трех оставшихся устройств). Это не удается [вероятно, плохой сектор], и md (поскольку массив деградировал) не может восстановиться. Таким образом, он выкидывает диск из массива, и при отказе двух дисков ваш RAID5 умирает.

Я не уверен, почему он помечен как запасной — это странно (хотя, полагаю, я обычно смотрю на /proc/mdstat, так что, возможно, mdadm просто так его помечает). Кроме того, я думал, что новые ядра гораздо медленнее выкидывают плохие блоки — но, может быть, вы используете что-то более старое?

Что вы можете с этим сделать?

Хорошие резервные копии. Это всегда важная часть любой стратегии сохранения данных.

Убедитесь, что массив регулярно очищается от плохих блоков. Ваша ОС может уже включать задание cron для этого. Вы можете сделать это, выполнив команду echo или repairв check. /sys/block/md0/md/sync_action"Repair" также исправит любые обнаруженные ошибки четности (например, бит четности не совпадает с данными на дисках).

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

Ход выполнения можно отслеживать с помощью cat /proc/mdstat, или различных файлов в этом каталоге sysfs. (Вы можете найти относительно актуальную документацию наСтатья mdstat на Linux Raid Wiki.

ПРИМЕЧАНИЕ: В старых ядрах (точная версия неизвестна) проверка может не исправить поврежденные блоки.

Последний вариант — перейти на RAID6. Для этого потребуется еще один диск (вамможетзапускать RAID6 из четырех или даже трех дисков, вам, вероятно, не захочется). С достаточно новыми ядрами плохие блоки исправляются на лету, когда это возможно. RAID6 может пережить отказ двух дисков, поэтому, если один диск вышел из строя, он все еще может пережить плохой блок — и, таким образом, он и отобразит плохой блок, и продолжит восстановление.

решение2

Я представляю, что вы создаете свой массив 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.

Связанный контент