Замена жесткого диска в программном RAID

В этой статье описана последовательность действий необходимых для восстановление программного RAID в Linux после замены одного из диска. Действия описаны с момента как вы уже заменили винчестер и загрузили ОС с неполного массива. Для полноценного восстановления массива необходимо выполнить три основных шага:

1. Создать таблицу разделов на новом диске.

2. Синхронизировать данные на дисках.

3. Установить загрузчик (GRUB) на  новый диск.

Допустим что дисковая массив был собран из двух жестких дисков объединенных в RAID 1.

На нем были созданы отдельные разделы для корня, директории /boot, /var/ и swap.

/ - /dev/md2
/boot - /dev/md1
swap - /dev/md0
/var - /dev/md3

Текущее состояние массива можно увидеть с помощью команды «cat /proc/mdstat«:

# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md3 : active raid1 sdb4[1]
347734848 blocks [2/1] [_U]

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

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

md0 : active (auto-read-only) raid1 sdb1[1]
16777856 blocks [2/1] [_U]

Из нее видно что сейчас массив работает с одного жесткого диска /dev/sdb. Необходимо синхронизировать новый диск (/dev/sda) с ним .

В начале создаем таблицу разделов на новом диске  аналогичную /dev/sdb :

# sfdisk -d /dev/sdb | sfdisk /dev/sda
Checking that no-one is using this disk right now ...
OK

Disk /dev/sda: 91201 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sda: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot Start End #sectors Id System
/dev/sda1 3906 33559784 33555879 fd Linux raid autodetect
/dev/sda2 33559785 35664299 2104515 fd Linux raid autodetect
/dev/sda3 35664300 769674149 734009850 fd Linux raid autodetect
/dev/sda4 769674150 1465144064 695469915 fd Linux raid autodetect
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

Команда sfdisk -d /dev/sdb — выводит текущее разбиение рабочего диска (делает дамп параметров) и передает по конвееру команде sfdisk /dev/sda которая воссоздает таблицу разделов на новом диске.

После создания таблицы разделов необходимо добавить в RAID новый диск, в первую очередь необходимо синхронизировать /, /boot и swap. Они обычно меньше объемом и их синхронизация проходит намного быстрее чем /var . А пока будет синхронизироваться /var мы установим загрузчик на новый диск.

Добавляем новые диски в RAID:

# mdadm --manage /dev/md1 --add /dev/sda2
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: added /dev/sda2
# mdadm --manage /dev/md0 --add /dev/sda1
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: added /dev/sda1
# mdadm --manage /dev/md2 --add /dev/sda3
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: added /dev/sda3

Логика добавления проста — смотрим из какого раздела второго диска состоит программный RAID и добавляем аналогичный из первого.

Увидеть прогресс синхронизации можно с помощью команды » watch cat /proc/mdstat«.

После того как мы синхронизировали основные разделы, можем добавлять новый раздел и в /dev/md3 (директории /var):

root@683:~# mdadm --manage /dev/md3 --add /dev/sda4
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: metadata format 00.90 unknown, ignored.
mdadm: added /dev/sda4

Для того что бы синхронизация RAID забирала не все наши ресурсы, ограничим её скорость:

# echo 15000 > /proc/sys/dev/raid/speed_limit_max

Теперь необходимо установить загрузчик GRUB на новый диск, что бы мы могли загрузить ОС в случае выхода из строя второго диска. Загрузчик устанавливается из командной оболочки grub. При этом необходимо указать на каком разделе находится директория /boot . Так же следует учитывать что grub ведет отсчет разделов с 0, а не с 1 как ядро Linux.

В моем случае /boot — это /dev/sdb, для grub это будет hd0,1 :

# grub
deviceProbing devices to guess BIOS drives. This may take a long time.
Unknown partition table signature
Unknown partition table signature
GNU GRUB version 0.97 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> device (hd0) /dev/sda
devicedevice (hd0) /dev/sda

Error 27: Unrecognized command
grub> device (hd0) /dev/sda
device (hd0) /dev/sda
grub> root (hd0,1)
root (hd0,1)
Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 17 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> quit

После окончания синхронизации дисков массив вернется к полностью штатной работе.

 

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий