Back to basics. Расширение LVM

Иногда приходят вопросы, ответы на которые не всегда можно найти в самой первой ссылке по запросу в поисковой системе. В связи с этим я решил запустить небольшую «рубрику» back to basics (b2b), в которой будут решаться насущные задачи администрирования.

Первой темой станет расширение разделов LVM в системах Linux.

Прежде чем заняться вопросом расширения разделов на LVM, вспомним из чего все это состоит:

  1. Physical Volume (PV) – основа LVM. Это блочное устройство в системе Linux. Например, жесткий диск, LUN с СХД и т.п.;
  2. Volume Group (VG) – один или несколько PV, объединенных в одну сущность. Представляет суммарную емкость нижележащих устройств;
  3. Logical Volume (LV) – Логический том. Выделенный раздел заданного размера, на котором в последствии создается файловая система и который доступен в итоге пользователю.
Картинки по запросу "lvm"

Довольно частая задача в администрировании – расширение файловых систем, на которых недостаточно места. Случиться это может по множеству причин: непредвиденное увеличение количества данных, неверно рассчитанный изначальный объем и т.д.

Решать эту задачу, если раздел изначально сконфигурирован под LVM, достаточно просто.

Как мы уже знаем, пользователь системы работает непосредственно с логическими томами (LV), которые монтируются в системе, а значит, для решения поставленной задачи с нехваткой места необходимо расширить наш логический том.

В моем примере имеется директория /opt/1, пространство в которой подходит к концу и имеется необходимость в расширении.

Из предоставленного вывода не сложно догадаться, что устройство /dev/mapper/vg_opt-lv_opt_1 смонтировано в директорию /opt/1 и, значит, его нам и необходимо расширить.

С помощью команды lvs уточним название Volume Group, на которой располагается наш логический том:

Интересующий нас том располагается в Volume Group под названием vg_opt. Исходя из представленной выше информации о структуре LVM, не трудно догадаться, что расширение логических томов происходит за счет пространства в Volume Group.

Проверим наличие свободного пространства в VG vg_opt. Выведем список всех Volume Group командой vgs:

Интересные столбцы:

  1. PV – количество Physical Volume, из которых состоит VG;
  2. LV – количество логических томов на данной Volume Group;
  3. VSize – размер VG;
  4. VFree – свободное пространство в VG.

Как можно заметить, свободного пространства в VG vg_opt нет, следовательно, в первую очередь необходимо расширить группу, после чего расширять том.

Сделать это можно двумя способами:

  1. Расширить существующий PV;
  2. Добавить новый Physical Volume (PV) в существующую группу.

Вариант 1. Увеличение размера существующего PV.

Иногда, расширить существующий PV не представляется возможным, например, когда диск поделен на партиции и расширить существующую партицию уже нельзя, за ней уже идет следующая, и единственное решение – добавить новый диск, но в нашем случае такой проблемы нет.

Проверим список PV, из которых состоит наша VG. Для этого используем команду pvs:

Видно, что наша VG состоит из одного Physical Volume /dev/sdb, размер которого составляет 10GB.

Увеличим размер PV до 20GB в консоли виртуальной машины (идентификация дисков в виртуальных машинах — это отдельная тема):

Проверим, изменился ли размер диска:

Размер диска в системе не изменился после выполнения операций с виртуальной машиной, поскольку не было выполнено последующее сканирование измененных блочных устройств:

echo "1" > /sys/class/block/sdb/device/rescan

Отлично. Теперь наш диск отображается объемом 20GB. При этом, если ввести команду pvs, размер Physical Volume будет так же отображаться 10GB:

Увеличим размер PV с помощью команды pvresize:

Теперь PV /dev/sdb имеет размер 20GB, и 10GB отмечено как PFree, аналогично, 10GB свободного пространства появляется и в Volume Group:

Дело за малым. Увеличим наш логический том на 5GB. Используем команду lvextend:

Интересный в данной команде ключ –L+5G, который указывает, что к текущему размеру необходимо добавить 5GB пространства.

Расширим существующую файловую систему и проверим свободное пространство:

xfs_growfs /opt/1

Как можно заметить, результат расширения успешен. В системе появилось 5 дополнительных гигабайт свободного пространства.

Вариант 2. Расширение за счет добавления дополнительного диска.

В данном случае алгоритм следующий:

  1. Выделяется устройство для расширения Volume Group;
  2. Инициализируется как Physical Volume;
  3. Расширяется Volume Group за счет нового Physical Volume;
  4. Расширяется логический том (LV).

К своей виртуальной машине я добавил новый диск размером на 10GB, который именуется в системе как /dev/sdc.

Инициализируем на нем Physical Volume с помощью команды pvcreate:

Расширим Volume Group с помощью команды vgextend:

С помощью команды vgs просмотрим результат изменений:

Как можно заметить, Volume Group vg_opt теперь состоит из двух PV и свободна на 50%.

Расширим Logical Volume:

lvextend -l+100%FREE -r /dev/mapper/vg_opt-lv_opt_1

В данном примере используются следующие интересные ключи:

-l+100%FREE – расширяет LV на максимально доступное в VG пространство;

-r – автоматически вызывает resize2fs, отсутствует необходимость в вызове xfs_growfs.

Смонтированная директория теперь имеет размер 30GB:

В качестве заключения:

Расширение LVM не такая сложная процедура, но все же, иногда она вызывает ряд вопросов у администраторов систем.

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

2 thoughts on “Back to basics. Расширение LVM”

  1. Спасибо!
    Подробно и понятно.
    То что искал )

  2. Есть прекрасная утилита для расширения дисков, которая автоматизирует перечисленные и опущенные шаги (например, возню с fdisk при увеличении дефолтной rhel-root):
    https://github.com/rekby/fsextender/releases

Leave a Reply

Your email address will not be published. Required fields are marked *