Имеется 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 persistentUpdate Time : Fri Jul 3 22:15:39 2009
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0UUID : ad1a23ec:d3e5f6c4:2bb9068d:214a3c20
Events : 0.452106Number Major Minor RaidDevice State
0 8 4 0 active sync /dev/sda4
1 0 0 1 removed2 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 закончится синхронизация, не привлекает.
>Вопрос: как вернуть диск из состояния "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