Допустим есть у нас под Linux софтварный RAID1 собранный с помощью mdadm:
И появился у нас еще один винчестер который хотелось бы воткнуть в данную машину расширив доступное дисковое пространство не потеряв при этом в отказоустойчивости т.е. перейти с RAID1 на RAID5.
Для этого останавливаем имеющийся массив командой:
Если вы загружаетесь с этого рейда то остановить его разумеется не получится и необходимо будет использовать какой-нибудь LiveCD…
Затем перезаписываем метаданные старого RAID1 создав поверх него RAID5 из тех же двух дисков:
Программа ругнется что эти диски уже участвуют в RAID1, но мы смело продолжим создание:
Подождем немного пока пройдет ребилд новосозданного рейда:
Получится по сути тот же RAID1.
После окончания процесса добавим в рейд наш новый диск (как spare):
И расширим рейд до трех активных дисков:
Ждем пока не закончится reshape рейда:
После этого расширим пересозданный дисковый раздел проверив его на ошибки перед этим (пример для ext2/3):
Также не забываем обновить конфиг:
и при необходимости пересобрать initrd.
Если в процессе этих операций не произойдет никаких сбоев то все данные которые были на RAID1 перенесутся на RAID5 без каких либо потерь. Проверено мной лично! Правда на виртуалке… ;)
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb[1] sda[0]
8387572 blocks super 1.2 [2/2] [UU]И появился у нас еще один винчестер который хотелось бы воткнуть в данную машину расширив доступное дисковое пространство не потеряв при этом в отказоустойчивости т.е. перейти с RAID1 на RAID5.
Для этого останавливаем имеющийся массив командой:
# mdadm --stop /dev/md0Если вы загружаетесь с этого рейда то остановить его разумеется не получится и необходимо будет использовать какой-нибудь LiveCD…
Затем перезаписываем метаданные старого RAID1 создав поверх него RAID5 из тех же двух дисков:
# mdadm --create /dev/md0 --level 5 --raid-devices 2 /dev/sda /dev/sdbПрограмма ругнется что эти диски уже участвуют в RAID1, но мы смело продолжим создание:
mdadm: /dev/sda appears to be part of a raid array:
level=raid1 devices=2 ctime=Wed Aug 4 08:28:45 2010
mdadm: /dev/sdb appears to be part of a raid array:
level=raid1 devices=2 ctime=Wed Aug 4 08:28:45 2010
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.Подождем немного пока пройдет ребилд новосозданного рейда:
md0 : active raid5 sdb[2] sda[0]
8387072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
[>....................] recovery = 4.2% (355076/8387072) finish=2.2min speed=59179K/sec
Получится по сути тот же RAID1.
После окончания процесса добавим в рейд наш новый диск (как spare):
# mdadm --add /dev/md0 /dev/sdcИ расширим рейд до трех активных дисков:
# mdadm --grow /dev/md0 --raid-disks=3Ждем пока не закончится reshape рейда:
md0 : active raid5 sdc[3] sdb[2] sda[0]
8387072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
[>....................] reshape = 2.5% (212480/8387072) finish=9.6min speed=14165K/secПосле этого расширим пересозданный дисковый раздел проверив его на ошибки перед этим (пример для ext2/3):
# e2fsck -f /dev/md0
# resize2fs -p /dev/md0
Также не забываем обновить конфиг:
# mdadm --examine --scan >> /etc/mdadm.confи при необходимости пересобрать initrd.
Если в процессе этих операций не произойдет никаких сбоев то все данные которые были на RAID1 перенесутся на RAID5 без каких либо потерь. Проверено мной лично! Правда на виртуалке… ;)