Допустим есть у нас под 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 без каких либо потерь. Проверено мной лично! Правда на виртуалке… ;)