Иногда приходят вопросы, ответы на которые не всегда можно найти в самой первой ссылке по запросу в поисковой системе. В связи с этим я решил запустить небольшую «рубрику» back to basics (b2b), в которой будут решаться насущные задачи администрирования.
Первой темой станет расширение разделов LVM в системах Linux.
Прежде чем заняться вопросом расширения разделов на LVM, вспомним из чего все это состоит:
- Physical Volume (PV) – основа LVM. Это блочное устройство в системе Linux. Например, жесткий диск, LUN с СХД и т.п.;
- Volume Group (VG) – один или несколько PV, объединенных в одну сущность. Представляет суммарную емкость нижележащих устройств;
- Logical Volume (LV) – Логический том. Выделенный раздел заданного размера, на котором в последствии создается файловая система и который доступен в итоге пользователю.
Довольно частая задача в администрировании – расширение файловых систем, на которых недостаточно места. Случиться это может по множеству причин: непредвиденное увеличение количества данных, неверно рассчитанный изначальный объем и т.д.
Решать эту задачу, если раздел изначально сконфигурирован под 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
:
Интересные столбцы:
- PV – количество Physical Volume, из которых состоит VG;
- LV – количество логических томов на данной Volume Group;
- VSize – размер VG;
- VFree – свободное пространство в VG.
Как можно заметить, свободного пространства в VG vg_opt нет, следовательно, в первую очередь необходимо расширить группу, после чего расширять том.
Сделать это можно двумя способами:
- Расширить существующий PV;
- Добавить новый 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. Расширение за счет добавления дополнительного диска.
В данном случае алгоритм следующий:
- Выделяется устройство для расширения Volume Group;
- Инициализируется как Physical Volume;
- Расширяется Volume Group за счет нового Physical Volume;
- Расширяется логический том (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 не такая сложная процедура, но все же, иногда она вызывает ряд вопросов у администраторов систем.
Никогда не забывайте о необходимости выполнения резервного копирования перед операциями на файловых системах. Всегда предварительно проверяйте команды и ожидаемый от них результат в лабораторных условиях. Если используете виртуальную машину, сперва создайте снапшот, а потом делайте изменения. Проще откатить машину и перезагрузить, чем восстанавливать. Если еще будет чем.
Спасибо!
Подробно и понятно.
То что искал )
Есть прекрасная утилита для расширения дисков, которая автоматизирует перечисленные и опущенные шаги (например, возню с fdisk при увеличении дефолтной rhel-root):
https://github.com/rekby/fsextender/releases