URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 85837
[ Назад ]

Исходное сообщение
"Как на лету восстановить SoftRAID1 в Линуксе?"

Отправлено Ilya Evseev , 03-Июл-09 22:20 
Имеется RAID1, сделан через mdadm, рассыпался при сбое питания:

# mdadm -D /dev/md2
/dev/md2:
        Version : 00.90.03
  Creation Time : Mon Jun 30 15:30:22 2008
     Raid Level : raid1
     Array Size : 204796544 (195.31 GiB 209.71 GB)
  Used Dev Size : 204796544 (195.31 GiB 209.71 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Fri Jul  3 22:15:39 2009
          State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
  Spare Devices : 0

           UUID : ad1a23ec:d3e5f6c4:2bb9068d:214a3c20
         Events : 0.452106

    Number   Major   Minor   RaidDevice State
       0       8        4        0      active sync   /dev/sda4
       1       0        0        1      removed

       2       8       20        -      faulty spare   /dev/sdb4

Вопрос: как вернуть диск из состояния "faulty spare" в рабочее?

"mdadm /dev/md2 -r /dev/sdb4" отрабатывает,
но "mdadm /dev/md2 -a /dev/sdb4" или "--re-add" ругаются:
mdadm: add new device failed for /dev/sdb4 as 2: Invalid argument
По strace видно, что ошибка происходит при выполнении
ioctl(3, 0x40140921, 0x7fffe26586f0) на /dev/md2.

Помогает перезагрузка в single mode: добавление проходит,
начинается синхронизация, но после "telinit 3" диск снова оказывается "faulty spare".
Ждать сутки, пока в single mode закончится синхронизация, не привлекает.


Содержание

Сообщения в этом обсуждении
"Как на лету восстановить SoftRAID1 в Линуксе?"
Отправлено ronin , 04-Июл-09 16:37 

>Вопрос: как вернуть диск из состояния "faulty spare" в рабочее?

mdadm --manage /dev/md2 --fail /dev/sdb4
mdadm --manage /dev/md2 --remove /dev/sdb4


После этого надо убедиться что /dev/sdb живой:
dd if=/dev/sdb of=/dev/null

Если споткнётся на считывании - надо заменить диск. Если всё пройдёт без проблем - тогда рекомендуется затереть ошмётки рейда на /dev/sdb4:

dd if=/dev/zero of=/dev/sdb4

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


После этого добавляем диск обратно в массив:

mdadm --manage /dev/md2 --add /dev/sdb4


>Помогает перезагрузка в single mode: добавление проходит,
>начинается синхронизация, но после "telinit 3" диск снова оказывается "faulty spare".
>Ждать сутки, пока в single mode закончится синхронизация, не привлекает.

А вот это очень интересно. И весьма непонятно. Рекомендую убрать автоматическое распознавание и сборку массива на старте системы (просто убив соответствующую запись в  /etc/mdadm.conf или /etc/mdadm/mdadm.conf - зависит от того какой у Вас Линух). И только после этого - telinit 3.

После того, как система успешно взлетит, проверяем наличие массивов:

mdadm --examine --scan


Далее -- ручная сборка массива:

mdadm --assemble /dev/md2 /dev/sda4

Для начала рекомендую собирать только с 1 диском. Тем, который наверняка живой.

Ну, и контрольный в голову:

mdadm --query --detail /dev/md2

Просто чтоб убедиться, что массив взлетел.


После успешного взлёта массива нужно попытаться добавить второй диск:

mdadm --manage /dev/md2 --add /dev/sdb4


И опять:

mdadm --query --detail /dev/md2


Если всё прошло нормально - массив должен начать ребилдаться.


Когда успешно закончит ребилдаться - обязательно:

fsck /dev/md2


После этого - для очистки совести:

mdadm --stop /dev/md2

и ребут системы (с отключенным автораспознаванием и сборкой массива!).


После ребута - ещё одна ручная сборка, чтоб убедиться что всё пучком, и только после этого
восстанавливать автосборку массива:

mdadm --examine --scan >> /etc/mdadm.conf (или /etc/mdadm/mdadm.conf)


Успехов!

respect,
ronin