Обычно при создании разделов на серверах и виртуальных машинах я использую lvm, но не в этот раз. Мне нужно было увеличить корневой раздел / с файловой системой xfs и желательно без остановки сервера. Изначально была идея делать маленькие корневые разделы для виртуальных машины, чтобы быстро делать бэкап системы без данных. Но на деле у такого подхода есть свои минусы и неудобства.
В итоге, настал момент, когда мне надоело чистить системный раздел и разгружать символьными ссылками. Я решил его увеличить. Если вы используете lvm, то никаких проблем нет. Просто добавляете еще один диск к виртуальной машине или увеличиваете текущий. Потом новый диск или раздел увеличенного диска добавляете к группе томов и расширяете нужный lvm раздел. Примерно вот так:
# vgextend vg00 /dev/sdb # lvextend -r -l +100%FREE /dev/vg00/root
Работает наживую даже с корневым разделом. Я часто это делал, способ рабочий, но пару раз я ловил проблемы с загрузкой виртуалки после этого. Так что не рекомендую экспериментировать с такими вещами. Если есть возможность, лучше обойтись без изменения разделов. А если не обойтись, то перед этим обязательно сделать бэкап всей информации и продумать варианты быстрого восстановления.
Сегодня я хотел рассказать о другой ситуации. Корневой раздел не на lvm, а на обычном разделе диска с xfs. Изначально диск виртуалки был 10G, через гипервизор я его расширил до 20G. Получилась такая картина:
Сам диск 20G, а его разделы занимают только 10. Мне надо расширить раздел sda2, на котором точка монтирования /.
На сайте redhat нашел казалось бы рабочий вариант с xfs_growfs. Попробовал запустить:
# xfs_growfs / -d
Получил в конце сообщение — data size unchanged, skipping. Стал разбираться, почему не работает команда, хотя вроде должна. Потом сообразил, что я не правильно понял ее назначение. Она расширит файловую систему xfs, если на разделе есть свободное место. Но у меня то раздел /dev/sda2 на 9G и он весь занят файловой системой. Расширять нечего. Надо сначала увеличить сам раздел.
Для увеличения раздела нагуглил другую утилиту — growpart. Устанавливаю на Centos 7:
# yum install cloud-utils-growpart
Напомню, что у меня перед расширением раздела с xfs вот такая картинка по разбиению диска — диск sda, далее /boot раздел sda1 на 1G, потом корень / sda2 на 9G и дальше свободное место 10G. Мне надо увеличить второй раздел свободным местом. Делаю это так:
# growpart /dev/sda 2 CHANGED: partition=2 start=2099200 old: size=18872320 end=20971520 new: size=39843807,end=41943007
Теперь уже расширяю файловую систему xfs на все пространство увеличенного раздела:
# xfs_growfs -d / meta-data=/dev/sda2 isize=512 agcount=4, agsize=589760 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=2359040, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2359040 to 4980475
Корневой раздел root / с xfs расширил на лету, без остановки и перезагрузки системы. Изначально в рунете нашел информацию по увеличению раздела только через размонтирование, а если системный раздел, то через загрузку с livecd с последующим удалением текущего раздела и созданием нового, расширенного.
Покопался в буржунете и собрал вот такой рабочий вариант, который опробовал сам на практике на продуктовом сервере с предварительным бэкапом всей виртуалки. Откатываться не пришлось, все получилось не сложнее, чем с lvm. Изначально не питал больших надежд на такой исход, готовился к переустановке. Но обошелся малой кровью.
If you liked my post, feel free to subscribe to my rss feeds