[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Восстановить mdadm raid5 после двойной ошибки



9 июля 2009 г. 14:05 пользователь Maxim Tyurin (mrkooll@bungarus.info) написал:
> Maksym Tiurin 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

Тут надо подчеркнуть самый важный момент: диски нужно перечислять в
соответствии с их номерами (порядковый номер в массиве естественно),
при последней активации.  Можно посмотреть в логах.  Порядок в
принципе может поменяться если до этого уже бы сбой. Также не стоит
добавлять в массив первый вылетевший. вместо него нужно указать
missing.
Если неизвестно какие номера были у дисков, можно попробовать собирать
методом тыка,  меняя порядок перечисления дисков, попутно запуская
проверку файловой системы на целостность (обязательно в режиме ro
!!!!!! ).
Пересборка массива не повреждает данные (ИМХО  :) )
 При правильной комбинации fs  будет читаться. Но она может начать
читаться и при неверной комбинации, так что нужно постараться
проверить максимальное количество комбинаций.


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

Reply to: