FastNetMon

Saturday, 21 November 2009

Linux, RAID-1 восстановление после сбоя, замена жесткого диска

Сейчас хочется рассмотреть случай, когда 1 диск зеркального RAID массива отказывает и отдается на замену. Мы будем экспериментировать с двумя дисками: /dev/sda и /dev/sdb.

Проверим статус RAID массива:

cat /proc/mdstat
Personalities : [raid1] [raid10] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
4200896 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
286728000 blocks [2/2] [UU]

unused devices:


Эмуляция отказа диска

Эмулировать будем отказ диска /dev/sda, это делается следующим образом:


mdadm /dev/md0 --fail /dev/sda1
mdadm /dev/md1 --fail /dev/sda2
mdadm /dev/md2 --fail /dev/sda3


В итоге получаем ситуацию аналогичную выходу из строя диска /dev/sda:

cat /proc/mdstat
Personalities : [raid1] [raid10] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[2](F)
4200896 blocks [2/1] [_U]

md1 : active raid1 sdb2[1] sda2[2](F)
2104448 blocks [2/1] [_U]

md2 : active raid1 sdb3[1] sda3[2](F)
286728000 blocks [2/1] [_U]

unused devices:


После этого попробуем перезагрузиться для чистоты эксперимента (но в случае "вылета" /dev/sda лучше этого не делать, будет не с чего грузиться, если он реально отказал).

Замена диска

Продолжаем, теперь нам нужно заменить отказавший диск, возможности это сделать у нас нету, так что обойдемся форматированием диска.

После перезагрузки RAID принял следующий вид:

cat /proc/mdstat
Personalities : [raid1] [raid10] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1]
4200896 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
2104448 blocks [2/1] [_U]

md2 : active raid1 sdb3[1]
286728000 blocks [2/1] [_U]

unused devices:



Внимание! Прочиатйте следующий абзац прежде чем выполнять эти команды! Предварительно, необходимо /dev/sda выбросить из RAID а, это делается так:

mdadm /dev/md0 --remove /dev/sda1
mdadm /dev/md1 --remove /dev/sda2
mdadm /dev/md2 --remove /dev/sda3


Если RAID откажется выбрасывать раздел, то стоит заюзать флаг -f:


mdadm /dev/md0 --remove -f /dev/sda1
mdadm /dev/md1 --remove -f /dev/sda2
mdadm /dev/md2 --remove -f /dev/sda3



Но в моем случае, это не потребовалось, т.к. все упоминания о /dev/sda были выброшены автоматически после перезагрузки.

Форматирование диска для эмуляции "замены"

Теперь посредством fdisk отформатируем /dev/sda:
fdisk /dev/sda
и далее последовательно командой d удаляем все разделы

В итоге получаем следующую картину:

fdisk -l /dev/sda

Disk /dev/sda: 300.0 GB, 300069052416 bytes
255 heads, 63 sectors/track, 36481 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System


Все, еще раз перезагружаемся для честной симуляции процесса выемки диска из системного блока :)

Копируем таблицы разделов на новый диск

Теперь копируем таблицу разделов с /dev/sdb на /dev/sda:

sfdisk -d /dev/sdb | sfdisk /dev/sda


В итоге получаем следующее:

fdisk /dev/sda -l

Disk /dev/sda: 300.0 GB, 300069052416 bytes
255 heads, 63 sectors/track, 36481 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 523 4200966 fd Linux raid autodetect
/dev/sda2 524 785 2104515 fd Linux raid autodetect
/dev/sda3 786 36481 286728120 fd Linux raid autodetect


Ставим GRUB на новый диск

grub-install /dev/sda

Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/sda
(hd1) /dev/sdb



Либо если вариант выше не помог пробуем ставить GRUB вручную:


grub /dev/sda
grub>
grub> root (hd0,0) # указать, где находится каталог /boot/grub на вторичном диске
grub> setup (hd0) # установить GRUB-загрузчик в MBR вторичного диска
grub> quit


Сборка RAID
Теперь дело за малым, снова добавить указанные разделы в RAID массив:


mdadm /dev/md0 -a /dev/sda1
mdadm /dev/md1 -a /dev/sda2
mdadm /dev/md2 -a /dev/sda3


Следим за сборкой RAID массива


cat /proc/mdstat
Personalities : [raid1] [raid10] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0] sdb1[1]
4200896 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
2104448 blocks [2/1] [_U]
resync=DELAYED

md2 : active raid1 sda3[2] sdb3[1]
286728000 blocks [2/1] [_U]
[>....................] recovery = 0.0% (150592/286728000) finish=95.1min speed=50197K/sec

unused devices:



P.S. вообще, самый правильный путь следующий: сначала необходимо добавить в RAID раздел, на котором располагается /boot, дождаться, пока он соберется, после этого установить grub и уже самым последним шагом - собрать остальные разделы.

2 comments :

  1. С sudo все намного сложнее (ниже рассмотрен случай замены sdb).

    sudo sfdisk -d /dev/sda > partmap
    sudo sfdisk /dev/sdb < partmap

    ReplyDelete
  2. Спасибо, то что нужно.

    ReplyDelete

Note: only a member of this blog may post a comment.