[Sysadmins] Восстановить mdadm raid5 после двойного сбоя

Maxim Tyurin mrkooll на bungarus.info
Чт Июл 9 15:03:57 MSD 2009


Maxim Tyurin writes:

> Загружаюсь с rescue cd и пытаюсь восстановить рейд на последних трех
> работающих дисках. Не восстанавливается
>
> mdadm --assemble --force /dev/md0 --force /dev/sdb /dev/sde /dev/sdd
> mdadm: /dev/md0 assembled from 2 drives and 1 spare - not enough to
> start the array.
>
> mdadm считает что sdd - hot spare 
>
> cat /proc/mdstat
> Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
> md0 : inactive sdb[0](S) sdd[4](S) sde[3](S)
>      1465159488 blocks
>
> unused devices: <none>
>
>
> cat /sys/block/md0/md/array_state 
> inactive

\skip


> В суперблоке sdd и записано что он spare.
>
> Два диска видно что активные

\skip

Рассказываю как восстановил (пусть для истории будет).

Для восстановления нужно знать какой был рейд, его уровень, количество
дисков и какой диск в каком слоте был.
Ну и порядок их вылета тоже совсем не помешает.

У меня был raid5 из 4-х дисков с таким раскладом по слотам
HDD        slot
sdb        0
sdc        1
sdd        2
sde        3

Сначала вылетел sdc, потом sdd

Зная это восстановить просто:
# mdadm --create --verbose /dev/md0 --assume-clean --level=raid5 --raid-devices=4 --spare-devices=0  /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/sdb appears to be part of a raid array:
   level=raid5 devices=4 ctime=Wed Apr 16 19:31:35 2008
mdadm: /dev/sdd appears to be part of a raid array:
   level=raid5 devices=4 ctime=Wed Apr 16 19:31:35 2008
mdadm: /dev/sde appears to be part of a raid array:
   level=raid5 devices=4 ctime=Wed Apr 16 19:31:35 2008
mdadm: size set to 488386496K
Continue creating array? y
mdadm: array /dev/md0 started.

Рейд запустился
# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sde[3] sdd[2] sdc[1] sdb[0]
     1465159488 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>

# cat /sys/block/md0/md/array_state
clean

После этого для минимизации количества сбойных файлов переподключаю
первый вылетевший диск
# mdadm /dev/md0 --fail /dev/sdc && mdadm /dev/md0 --remove /dev/sdc && mdadm /dev/md0 --add /dev/sdc

Подождал пока рейд синхронизируется, обновил описание рейда в
mdadm.conf (mdadm --create создает новый рейд с другим UUID).

После чего запустил LVM который был на рейде и fsck на все файловые
системы.

Вот в принципе и вся success story ;)
-- 

With Best Regards, Maxim Tyurin
JID:	MrKooll на jabber.pibhe.com
   ___                                 
  / _ )__ _____  ___ ____ _______ _____
 / _  / // / _ \/ _ `/ _ `/ __/ // (_-<
/____/\_,_/_//_/\_, /\_,_/_/  \_,_/___/
               /___/  


Подробная информация о списке рассылки Sysadmins