bz home

Как лечить "DataVolume is in degraded mode"

Опять попугал wd-кубик своими чудачествами, зажёг красную лампочку. Веб-интерфейс после логина показывает страшную надпись:

03/20 08:02:32 [Volume Status] Volume 'DataVolume' is in degraded mode.

и предлагает кнопочку "Acknowledge". Два раза уже такую вещь видел, это уже третий. Значит пора записывать, чтобы потом самому легче вспоминать было. Тем более, что в первый раз я попробовал решить проблему через штатный веб-интерфейс, и проблему-то вроде как решил, но в результате том пересобрался пустой. Мало того, что жужжало двадцать часов, так ещё и данные все потёрло. Так что *не надо устранять эту ошибку через штатный веб-интерфейс*! Лучше в консоли с сохранением данных. Иначе зачем он RAID5? Поехали.

Как чинить. Логинимся по ssh рутом, смотрим что там случилось:

[root@wdcube ~]# export PATH=/opt/bin:/opt/sbin:$PATH
[root@wdcube ~]# mount
trusteesfs on /trustees type trusteesfs (rw)
/dev/md2 on /DataVolume type ext3 (rw,usrquota)
/dev/md3 on /ExtendVolume type ext3 (rw,usrquota)

Проблема произошла с /dev/md2. Смотрим подробности

[root@wdcube ~]# mdadm -D -v /dev/md2
/dev/md2:
        Version : 0.90
  Creation Time : Sun Jul  3 11:49:02 2011
     Raid Level : raid5
     Array Size : 2925438336 (2789.92 GiB 2995.65 GB)
  Used Dev Size : 975146112 (929.97 GiB 998.55 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Wed Mar 20 23:08:41 2013
          State : clean, degraded
 Active Devices : 3
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : e8216f93:d8cde971:0cd9d232:d925edf0
         Events : 0.4628225

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       20        1      active sync   /dev/sdb4
       2       8       36        2      active sync   /dev/sdc4
       3       8       52        3      active sync   /dev/sdd4

       4       8        4        -      faulty spare   /dev/sda4

Опять, как и в прошлый раз, отвалился диск /dev/sda4. Починка проста: убрать сбойный диск из массива, добавить заново.

[root@wdcube ~]# mdadm /dev/md2 --remove /dev/sda4
mdadm: hot removed /dev/sda4
[root@wdcube ~]# mdadm -D -v /dev/md2
/dev/md2:
        Version : 0.90
  Creation Time : Sun Jul  3 11:49:02 2011
     Raid Level : raid5
     Array Size : 2925438336 (2789.92 GiB 2995.65 GB)
  Used Dev Size : 975146112 (929.97 GiB 998.55 GB)
   Raid Devices : 4
  Total Devices : 3
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Wed Mar 20 23:09:36 2013
          State : clean, degraded
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : e8216f93:d8cde971:0cd9d232:d925edf0
         Events : 0.4628240

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       20        1      active sync   /dev/sdb4
       2       8       36        2      active sync   /dev/sdc4
       3       8       52        3      active sync   /dev/sdd4
[root@wdcube ~]# mdadm /dev/md2 --add /dev/sda4
mdadm: hot added /dev/sda4
[root@wdcube ~]# mdadm -D -v /dev/md2
/dev/md2:
        Version : 0.90
  Creation Time : Sun Jul  3 11:49:02 2011
     Raid Level : raid5
     Array Size : 2925438336 (2789.92 GiB 2995.65 GB)
  Used Dev Size : 975146112 (929.97 GiB 998.55 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Wed Mar 20 23:10:13 2013
          State : clean, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

 Rebuild Status : 0% complete

           UUID : e8216f93:d8cde971:0cd9d232:d925edf0
         Events : 0.4628243

    Number   Major   Minor   RaidDevice State
       4       8        4        0      spare rebuilding   /dev/sda4
       1       8       20        1      active sync   /dev/sdb4
       2       8       36        2      active sync   /dev/sdc4
       3       8       52        3      active sync   /dev/sdd4

Всё, массив пошёл перестраиваться, процесс длинный. Следить за прогрессом можно так:

[root@wdcube ~]# cat /proc/mdstat

Попытаемся ускорить (у меня принципиальной разницы в скорости не получилось). По многочисленным материалам из инета, делаем так:

[root@wdcube ~]# cat /proc/sys/dev/raid/speed_limit_min
1000
[root@wdcube ~]# cat /proc/sys/dev/raid/speed_limit_max
200000
[root@wdcube ~]# echo 50000 > /proc/sys/dev/raid/speed_limit_min
[root@wdcube ~]# cat /proc/sys/dev/raid/speed_limit_min
50000

Итого у меня получается скорость (по статистике из /proc/mdstat) около 18Мб/сек и общее время перестройки массива в районе 14-17 часов, это зависит ещё от внешней нагрузки, массив же работает в процессе дисковым хранилищем.

Следить за прогрессом удобно так:

[root@wdcube ~]# watch -n 30 cat /proc/mdstat
Every 30s: cat /proc/mdstat             Wed Mar 20 23:43:33 2013

Personalities : [linear] [raid0] [raid1] [raid5] 
md1 : active raid1 sdd2[3] sdc2[2] sdb2[1] sda2[0]
      1044160 blocks [4/4] [UUUU]

md2 : active raid5 sda4[4] sdd4[3] sdc4[2] sdb4[1]
      2925438336 blocks level 5, 64k chunk, algorithm 2 [4/3] [_UUU]
      [>....................]  recovery =  3.5% (34891904/975146112) finish=849.1min speed=18452K/sec
md0 : active raid1 sdd1[3] sdc1[2] sdb1[1] sda1[0]
      208768 blocks [4/4] [UUUU]

unused devices: [[none]]

Если в процессе починки развалился массив, то вот тут очень-очень ползеное, как пересоздать его (чтобы не потерять все данные) http://lists.altlinux.org/pipermail/sysadmins/2009-July/030477.html.

Остановить массив с mdadm --stop /dev/md2. Потом магия:

[root@wdcube ~]# mdadm --create --verbose /dev/md2 --assume-clean --level=raid5 --raid-devices=4 \
--spare-devices=0 /dev/sda4 /dev/sdb4 /dev/sdc4 /dev/sdd4

После чего полезно убрать последний, не до конца сихнронизированный диск, если таковые есть, и добавить его заново с целью синхронизировать массив.