Pull to refresh

Миграция с RAID1 на RAID5 в mdadm без потери данных

Reading time 2 min
Views 9.9K
Допустим есть у нас под Linux софтварный RAID1 собранный с помощью mdadm:
# 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 без каких либо потерь. Проверено мной лично! Правда на виртуалке… ;)
Tags:
Hubs:
+43
Comments 51
Comments Comments 51

Articles