Статья
Версия для печати
Обсудить на форуме (3)
Online resize ext3 in Linux Software RAID

© Филатов Максим aka McZim (18.11.2011 — 17.01.2012)


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

# cat /root/sda.part
# partition table of /dev/sda
unit: sectors

/dev/sda1 : start= 63, size=205905042, Id=fd, bootable
/dev/sda2 : start=205905105, size= 66717945, Id=fd
/dev/sda3 : start=        0, size=        0, Id= 0
/dev/sda4 : start=        0, size=        0, Id= 0

Например, у нас есть два диска: sda и sdb. Первый раздел у нас отдан под корневую файловую систему, второй раздел отдан под swap и все это не занимает полного объема диска, по этому оставшаяся часть остается под будущие нужды. Обратите внимание на Id=fd — тип у разделов должен быть Linux raid autodetect, иначе рэйд собираться не будет.

Первое, что нужно сделать, это выключить свап. Надеюсь, он у вас на данный момент не используется!

# swapoff /dev/md2

Затем убираем из рэйда одну половинку зеркала. В нашем случае это диск /dev/sda.

# mdadm /dev/md1 --fail /dev/sda1 --remove /dev/sda1
# mdadm /dev/md2 --fail /dev/sda2 --remove /dev/sda2

Применяем новую разметку диска

# sfdisk /dev/sda < /root/sda.part

И добавляем новые разделы в рэйд.

# mdadm --add /dev/md1 /dev/sda1
# mdadm --add /dev/md2 /dev/sda2

Тут важно отметить, что вы НЕ должны увидеть "re-added" — должно произойти новое добавление раздела. В противном случае перезатрите заголовок раздела.
Ждем, когда закончится рекомпиляция рэйда. Одновременно рекомпилируется только один массив, второй будет стоят в состоянии ожидания. Дождитесь завершения рекомпиляции обоих разделов.

# cat /proc/mdstat

Далее проделываем все тоже самое со второй половинкой зеркала. Это диск /dev/sdb.

# mdadm /dev/md1 --fail /dev/sdb1 --remove /dev/sdb1
# mdadm /dev/md2 --fail /dev/sdb2 --remove /dev/sdb2

# sfdisk /dev/sdb < /root/sda.part

# mdadm --add /dev/md1 /dev/sdb1
# mdadm --add /dev/md2 /dev/sdb2

После того, как все рекомпиляции завершены, необходимо дать команду массиву на расширение.

# mdadm --grow /dev/md1 --size=max

Ждем завершения ресинка.
Теперь необходимо изменить раздел файловой системы.

# resize2fs /dev/md1

Теперь необходимо пересоздать свап.

# mkswap /dev/md2
# swapon /dev/md2

Смотрим, что у нас получилось.

# mdadm --detail /dev/md1
# df -h

Важно! Если в рэйд типа зеркало добавить половинку меньшего размера от уже существующего размера, произойдет ошибка и ничего не выйдет. Такие операции можно делать только с разделами большего размера относительно тех, что уже участвуют в конфигурации рэйда.
Версия для печати
Обсудить на форуме (3)