Установка программного RAID1 массива на работающей системе с установкой загрузчика GRUB2 на Ubuntu10.04 (Часть 2)

Ну вот и вторая часть создание нашего RAID массива на работающей системе Ubuntu 10.04

7. Подготовка /dev/sda

 

Если все пойдет хорошо, мы должны получить /dev/md0 и /dev/md2

 

df -h

 

root@server1:~# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/md2 4.0G 815M 3.0G 22% /

none 243M 192K 243M 1% /dev

none 247M 0 247M 0% /dev/shm

none 247M 40K 247M 1% /var/run

none 247M 0 247M 0% /var/lock

none 247M 0 247M 0% /lib/init/rw

none 4.0G 815M 3.0G 22% /var/lib/ureadahead/debugfs

/dev/md0 472M 27M 421M 6% /boot

root@server1:~#

 

Вывод команды

 

cat /proc/mdstat

 

должен быть следующим:

 

root@server1:~# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid1 sdb1[1]

498624 blocks [2/1] [_U]

 

md1 : active raid1 sdb2[1]

499648 blocks [2/1] [_U]

 

md2 : active raid1 sdb3[1]

4242368 blocks [2/1] [_U]

 

unused devices:

root@server1:~#

 

Теперь мы должны изменить тип раздела /dev/sda из наших трех разделов в Linux raid autodetect:

 

fdisk /dev/sda

 

root@server1:~# fdisk /dev/sda

 

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

switch off the mode (command 'c') and change display units to

sectors (command 'u').

 

Command (m for help): <-- t

Partition number (1-4): <-- 1

Hex code (type L to list codes): <-- fd

Changed system type of partition 1 to fd (Linux raid autodetect)

 

Command (m for help): <-- t

Partition number (1-4): <-- 2

Hex code (type L to list codes): <-- fd

Changed system type of partition 2 to fd (Linux raid autodetect)

 

Command (m for help): <-- t

Partition number (1-4): <-- 3

Hex code (type L to list codes): <-- fd

Changed system type of partition 3 to fd (Linux raid autodetect)

 

Command (m for help): <-- w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

root@server1:~#

 

Теперь мы можем добавить /dev/sda1, /dev/sda2 и /dev/sda3 в соответствующий RAID массив:

 

mdadm --add /dev/md0 /dev/sda1

mdadm --add /dev/md1 /dev/sda2

mdadm --add /dev/md2 /dev/sda3

 

Теперь посмотрим командой

 

cat /proc/mdstat

 

и мы должны будем увидеть что RAID массивы синхронизированы:

 

root@server1:~# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid1 sda1[0] sdb1[1]

498624 blocks [2/2] [UU]

 

md1 : active raid1 sda2[2] sdb2[1]

499648 blocks [2/1] [_U]

resync=DELAYED

 

md2 : active raid1 sda3[2] sdb3[1]

4242368 blocks [2/1] [_U]

[===========>.........] recovery = 55.1% (2338176/4242368) finish=0.3min speed=83506K/sec

 

unused devices:

root@server1:~#

 

Теперь запустим командой

 

watch cat /proc/mdstat

 

для получения текущего вывода процесса создания нашего RAID массива. Для остановки просмотра нажмите комбинацию Ctrl + C

 

Подождите, пока синхронизация закончится. Вывод должен выглядеть следующим образом:

 

root@server1:~# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid1 sda1[0] sdb1[1]

498624 blocks [2/2] [UU]

 

md1 : active raid1 sda2[0] sdb2[1]

499648 blocks [2/2] [UU]

 

md2 : active raid1 sda3[0] sdb3[1]

4242368 blocks [2/2] [UU]

 

unused devices:

root@server1:~#

 

Затем исправим и установим в файле /etc/mdadm/mdadm.conf и новую уонфигурацию:

 

cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf

mdadm --examine --scan >> /etc/mdadm/mdadm.conf

 

/etc/mdadm/mdadm.conf должен выглядеть примерно вот так:

 

cat /etc/mdadm/mdadm.conf

 

# mdadm.conf

 

#

 

# Please refer to mdadm.conf(5) for information about this file.

 

#

 

 

 

# by default, scan all partitions (/proc/partitions) for MD superblocks.

 

# alternatively, specify devices to scan, using wildcards if desired.

 

DEVICE partitions

 

 

 

# auto-create devices with Debian standard permissions

 

CREATE owner=root group=disk mode=0660 auto=yes

 

 

 

# automatically tag new arrays as belonging to the local system

 

HOMEHOST

 

 

 

# instruct the monitoring daemon where to send mail alerts

 

MAILADDR root

 

 

 

# definitions of existing MD arrays

 

 

 

# This file was auto-generated on Mon, 21 Jun 2010 13:21:00 +0200

 

# by mkconf $Id$

 

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=68686c40:b924278e:325ecf68:79913751

 

ARRAY /dev/md1 level=raid1 num-devices=2 UUID=9719181e:3071f655:325ecf68:79913751

 

ARRAY /dev/md2 level=raid1 num-devices=2 UUID=c3360f0f:7f3d47ec:325ecf68:79913751

 

8. Подготовка загрузчика GRUB2 (часть 2)

 

Сейчас мы удалим файл /etc/grub.d/09_swraid1_setup...

 

rm -f /etc/grub.d/09_swraid1_setup

 

И обновим нашу конфигурацию загрузчика GRUB2 :

 

update-grub

update-initramfs -u

 

Теперь если мы посмотрим /boot/grub/grub.cfg мы обнаружим в строке menuentry ### BEGIN /etc/grub.d/10_linux ### Секция должна быть такая же как мы прописывали в etc/grub.d/09_swraid1_setup. Следовательно у нас настроен раздел /dev/md0 на загрузку вместо (hd0, 1) или (hd1, 1), поэтому мы больше не нуждаемся в /etc/grub.d/09_swraid1_setup

 

Перезагрузим систему:

 

reboot

 

Теперь система должна загрузится без проблем.

 

Вот и все, мы успешно создали наш RAID массив на нашей работающей системе Ubuntu10.04

 

9. Тестирование нашей системы

 

Теперь протестируем наш RAID массив и сделаем имитацию отказа жесткого диска. В данном случае не имеет значения какой вы выберете жесткий диск /dev/sda или /dev/sdb . В виде примера я буду считать что /dev/sdb вышел из строя.

 

Для имитации сбоя жесткого диска, можно завершить работу системы и отключить жесткий диск /dev/sdb из системы, или можно произвести через soft-remove вот таким образом:

 

mdadm --manage /dev/md0 --fail /dev/sdb1

mdadm --manage /dev/md1 --fail /dev/sdb2

mdadm --manage /dev/md2 --fail /dev/sdb3

 

mdadm --manage /dev/md0 --remove /dev/sdb1

mdadm --manage /dev/md1 --remove /dev/sdb2

mdadm --manage /dev/md2 --remove /dev/sdb3

 

Выключаем систему

 

shutdown -h now

 

Теперь подключаем новый жесткий диск /dev/sdb (если вы имитируете сбой жесткого диска /dev/sda то необходимо в таком случае жесткий диск /dev/sdb переключить вместо /dev/sda, и новый жесткий диск подключить вместо /dev/sdb) и загружаем нашу систему. Наша система должна загрузится без проблем.

 

Далее запускаем:

 

cat /proc/mdstat

 

и мы увидим следующую картину, что наш RAID массив находится в состоянии распада

 

root@server1:~# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md2 : active raid1 sda3[0]

4242368 blocks [2/1] [U_]

 

md1 : active raid1 sda2[0]

499648 blocks [2/1] [U_]

 

md0 : active raid1 sda1[0]

498624 blocks [2/1] [U_]

 

unused devices:

root@server1:~#

 

Вывод команды

 

fdisk –l

 

должен быть следующим:

 

root@server1:~# fdisk -l

 

Disk /dev/sda: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000246b7

 

Device Boot Start End Blocks Id System

/dev/sda1 * 1 63 498688 fd Linux raid autodetect

Partition 1 does not end on cylinder boundary.

/dev/sda2 63 125 499712 fd Linux raid autodetect

Partition 2 does not end on cylinder boundary.

/dev/sda3 125 653 4242432 fd Linux raid autodetect

Partition 3 does not end on cylinder boundary.

 

Disk /dev/sdb: 5368 MB, 5368709120 bytes

255 heads, 63 sectors/track, 652 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

 

Disk /dev/sdb doesn't contain a valid partition table

 

Disk /dev/md0: 510 MB, 510590976 bytes

2 heads, 4 sectors/track, 124656 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

 

Disk /dev/md0 doesn't contain a valid partition table

 

Disk /dev/md1: 511 MB, 511639552 bytes

2 heads, 4 sectors/track, 124912 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

 

Disk /dev/md1 doesn't contain a valid partition table

 

Disk /dev/md2: 4344 MB, 4344184832 bytes

2 heads, 4 sectors/track, 1060592 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

 

Disk /dev/md2 doesn't contain a valid partition table

root@server1:~#

 

Сейчас мы скопируем таблицу разделов с /dev/sda в /dev/sdb

 

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

 

root@server1:~# sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Checking that no-one is using this disk right now ...

OK

 

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track

 

sfdisk: ERROR: sector 0 does not have an msdos signature

/dev/sdb: 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/sdb1 * 2048 999423 997376 fd Linux raid autodetect

/dev/sdb2 999424 1998847 999424 fd Linux raid autodetect

/dev/sdb3 1998848 10483711 8484864 fd Linux raid autodetect

/dev/sdb4 0 - 0 0 Empty

Warning: partition 1 does not end at a cylinder boundary

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

You have new mail in /var/mail/root

root@server1:~#

 

Потом мы удалим остатки предыдущего RAID массива с /dev/sdb ...

 

mdadm --zero-superblock /dev/sdb1

mdadm --zero-superblock /dev/sdb2

mdadm --zero-superblock /dev/sdb3

 

Теперь посмотрим

 

cat /proc/mdstat

 

root@server1:~# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md2 : active raid1 sdb3[2] sda3[0]

4242368 blocks [2/1] [U_]

[===>.................] recovery = 16.1% (683520/4242368) finish=0.6min speed=97645K/sec

 

md1 : active raid1 sdb2[2] sda2[0]

499648 blocks [2/1] [U_]

resync=DELAYED

 

md0 : active raid1 sdb1[1] sda1[0]

498624 blocks [2/2] [UU]

 

unused devices:

root@server1:~#

 

Осталось подождать пока закончится синхронизация и снова посмотрим на наш массив:

 

root@server1:~# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md2 : active raid1 sdb3[1] sda3[0]

4242368 blocks [2/2] [UU]

 

md1 : active raid1 sdb2[1] sda2[0]

499648 blocks [2/2] [UU]

 

md0 : active raid1 sdb1[1] sda1[0]

498624 blocks [2/2] [UU]

 

unused devices:

root@server1:~#

 

Затем установим загрузчик на оба жестких диска:

 

grub-install /dev/sda

grub-install /dev/sdb

 

Ну вот и все, мы только что заменили неисправный жесткий диск в нашем RAID1 массиве

 

Ссылки:

 

The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html

 

Ubuntu: http://www.ubuntu.com/

 

Howtoforge: http://www.howtoforge.org/