Home » Полезные советы » Расширение (увеличение) xfs корневого раздела / без остановки

Расширение (увеличение) xfs корневого раздела / без остановки

Обычно при создании разделов на серверах и виртуальных машинах я использую lvm, но не в этот раз. Мне нужно было увеличить корневой раздел  / с файловой системой xfs и желательно без остановки сервера. Изначально была идея делать маленькие корневые разделы для виртуальных машины, чтобы быстро делать бэкап системы без данных. Но на деле у такого подхода есть свои минусы и неудобства.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .

В итоге, настал момент, когда мне надоело чистить системный раздел и разгружать символьными ссылками. Я решил его увеличить. Если вы используете lvm, то никаких проблем нет. Просто добавляете еще один диск к виртуальной машине или увеличиваете текущий. Потом новый диск или раздел увеличенного диска добавляете к группе томов и расширяете нужный lvm раздел. Примерно вот так:

# vgextend vg00 /dev/sdb
# lvextend -r -l +100%FREE /dev/vg00/root

Работает наживую даже с корневым разделом. Я часто это делал, способ рабочий, но пару раз я ловил проблемы с загрузкой виртуалки после этого. Так что не рекомендую экспериментировать с такими вещами. Если есть возможность, лучше обойтись без изменения разделов. А если не обойтись, то перед этим обязательно сделать бэкап всей информации и продумать варианты быстрого восстановления.

Сегодня я хотел рассказать о другой ситуации. Корневой раздел не на lvm, а на обычном разделе диска с xfs. Изначально диск виртуалки был 10G, через гипервизор я его расширил до 20G. Получилась такая картина:

Расширение раздела xfs

Сам диск 20G, а его разделы занимают только 10. Мне надо расширить раздел sda2, на котором точка монтирования /.

Увеличить xfs

На сайте 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. Изначально не питал больших надежд на такой исход, готовился к переустановке. Но обошелся малой кровью.

Онлайн курс "Администратор Linux"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Есть возможность отблагодарить автора

16 комментариев

  1. Аватар

    Вообще в линухе можно расширить раздел и штатными средствами — с помощью fdisk. Самый волнительный момент — сначала удаляется существующий раздел! Главное новый раздел начать с того же блока что и старый. Как пример — https://devops.ionos.com/tutorials/increase-the-size-of-a-linux-root-partition-without-rebooting/
    Пару недель назад именно по этой статье делал — всё успешно!

    • Zerox

      Этот способ известен, но, насколько я понял, раздел нужно отмонтировать для удаления существующего раздела. В случае с корневым разделом такой способ не подходит.

      • Аватар

        Пяткой в грудь бить не буду — у меня задача была расширить несистемный раздел, но делал я это без размонтирования. Надо будет ради интереса попробовать с системным.

      • Аватар

        Попробовал с корневым разделом — успешно!
        Как в приведённой ссылке удалил партицию и создал заново большего размера. Потом дал команду «partprobe» чтобы данные перечитались налету.
        Поскольку делал на Centos с LVM, о потребовалось дополнительно расширить PV командой «pvresize /dev/sda2». VG у меня расширилась автоматом, а вот LV так же пришлось пнуть «lvextend -l +100%FREE /dev/centos/root». Ну и вишенка на тортике — «xfs_growfs /».
        В итоге корневой раздел увеличен без размонтирований и перезагрузок.

        • Zerox

          Разве с lvm надо делать xfs_growfs / ? Команда расширения lv сама файловую систему расширяет. Ну и в целом для lvm операции расширения раздела не имеет смысла. Можно создать новый раздел, добавить к pv, потом расширить lv.

          • Аватар

            По xfs_growfs / не скажу — я как то сходу команду ввёл и не посмотрел расширил lvextend файловую систему или нет.
            По lvm — у меня под рукой такая машина была, поэтому с ним и делал опыт.

  2. Аватар

    а как на счет etx4?

    • Аватар

      С ext4 ровно то же самое. Это файловая система и она стоит поверх раздела. Если раздел не изменён, то и расшиться некуда.

  3. Аватар

    в твоем примере диск был изначально 20G? или с начало 10G и ты его увеличил в виртуальной машине

    • Zerox

      Был 10, увеличил в свойствах диска на гипервизоре до 20.

      • Аватар

        и без перезагрузки он увиделся 20? и для этого не чего не делал?

        • Zerox

          Все, что я сделал — описал в статье. Вопрос не понял.

          • Аватар

            просто не всегда даже для lv раздела получается увеличить его при увеличении диска в vm без перезагрузки этой vm, просто не видит диск увеличенного размера

            • Zerox

              В kvm сразу видит. В hyper-v, по-моему, тоже. Вот в Xen перезагрузка нужна была, чтобы виртуалка увидела диск с новым размером. То же самое в vmware, возможно от версии зависело. Точно не помню, где встречался с этим, но был удивлен, когда узнал, что надо виртуалку перезагрузить, чтобы увидеть новый размер диска.

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.