Восстановление после сбоя RAID-1 в CentOS

Возникла вполне рядовая ситуация – на сервере под управлением CentOS вылетел один из жестких дисков, образующих массив RAID-1.


Решил задокументировать порядок действий после вставки физической замены в сервер.

Исходное состояние:

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[1]
      1052160 blocks [2/1] [_U]

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

md1 : active raid1 sdb1[1]
      5245120 blocks [2/1] [_U]

unused devices:

Т.е. sdb – целый, sda-замена для вылетевшего.
Копируем таблицу разделов:

# sfdisk -d /dev/sdb | sfdisk /dev/sda
Проверяется, чтобы сейчас никто не использовал этот диск...
ОК

Диск /dev/sda: 30401 цилиндров, 255 головок, 63 секторов/дорожку
Старая ситуация:
Единицы = цилиндры по 8225280 байт, блоки по 1024 байт, начиная с 0

  Устр-во Загр   Нач   Конец    #цил     #блоки   Id  Система
/dev/sda1   *      0+  30400   30401- 244196001   a5  FreeBSD
/dev/sda2          0       -       0          0    0  Пустой
/dev/sda3          0       -       0          0    0  Пустой
/dev/sda4          0       -       0          0    0  Пустой
/dev/sda5        130+  30400   30271- 243147425
/dev/sda6          0+    130-    131-   1048576
Новая ситуация:
Единицы = секторы по 512 байт, начиная с 0

  Устр-во Загр   Начало     Конец   #секторы  Id  Система
/dev/sda1   *        63  10490444   10490382  fd  Автоопределение Linux raid
/dev/sda2      10490445  12594959    2104515  fd  Автоопределение Linux raid
/dev/sda3      12594960 488392064  475797105  fd  Автоопределение Linux raid
/dev/sda4             0         -          0   0  Пустой
Новая таблица разделов успешно записана

Перечитывается таблица разделов...

Если вы создали или изменили раздел DOS, скажем, /dev/foo7, используйте затем dd(1),
чтобы обнулить первые 512 байт:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(См. fdisk(8).)

Пока не забыли, ставим загрузчик:

# 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'.

# this device map was generated by anaconda
(hd0)     /dev/sda
(hd1)     /dev/sdb

Добавляем разделы к массиву:

# mdadm /dev/md0 -a /dev/sda2
mdadm: added /dev/sda2
# mdadm /dev/md1 -a /dev/sda1
mdadm: added /dev/sda1
# mdadm /dev/md2 -a /dev/sda3
mdadm: added /dev/sda3

Смотрим на пересборку массива:

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda2[0] sdb2[1]
      1052160 blocks [2/2] [UU]

md2 : active raid1 sda3[2] sdb3[1]
      237898432 blocks [2/1] [_U]
        resync=DELAYED

md1 : active raid1 sda1[2] sdb1[1]
      5245120 blocks [2/1] [_U]
      [=================>...]  recovery = 87.2% (4576768/5245120) finish=0.2min speed=48689K/sec

unused devices: