LVM. Расширение объема раздела LV за счет свободного места на физическом диске
Описание
В данной инструкции мы увеличиваем системный раздел root, но она также подойдет и для увеличения НЕсистемного раздела.
Расширение
Вариант 1. Простой. Все действия производим онлайн в рабочей системе. БЕЗ удаления раздела root.
Если расширяемый раздел LV имеет ФС EXT4
Сначала убедимся что на нашем физическом диске есть свободная от разделов область (дополнительный незанятый разделами объем).
Или, если у нас виртуальная машина - сначала увеличиваем объем диска в ВМ.
Далее смотрим информацию о физическом диске и разделах. Должны увидеть что объем физического диска имеет необходимый объем для расширения (или что общий объем диска увеличился, если мы увеличили его в ВМ гипервизора).
fdisk -l
Смотрим что изначальный объем раздела LV root - 21G, а свободного места - 86M
df -h
Filesystem Size Used Avail Use% Mounted on /dev/mapper/almalinux_alma-root 21G 20G 86M 99% /
Если мы посмотрим на PV, то увидим что свободного места для расширения на нем нет, несмотря на то, что физически диск имеет свободную область (или что мы вручную увеличили объем физического диска в ВМ).
pvs
PV VG Fmt Attr PSize PFree /dev/sda2 almalinux_alma lvm2 a-- <21.00g 0
Так и должно быть, идем далее.
Для начала необходимо расширить логический раздел /dev/sdbX для root на физическом диске (например, если на диске было свободное от разделов место или мы прибавили место к виртуальному диску в виртуальной машине (если машина в гипервизоре)). Иначе pvs и vgs будут показывать что размер раздела не увеличился и неоткуда брать место для создания LV большего объема.
Если PV создан на партиции /dev/sdaX
Интерактивное расширение через parted
parted
Смотрим
(parted) print
... Model: VMware Virtual disk (scsi) Disk /dev/sda: 4295MB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 1074MB 1073MB primary ext4 2 1075MB 4295MB 4294MB primary ext4 ...
Система не даст расширить раздел до объема большего, чем объем самого диска, будет ошибка:
(parted) resizepart 2 4296
Error: The location 4296 is outside of the device /dev/sdb.
! Если logical раздел находится на extended разделе, то сначала расширяем extended раздел, а потом logical.
Расширяем объем раздела до полного объема физического диска - 4295MB
(parted) resizepart 2 4295
Смотрим
(parted) print
... Model: VMware Virtual disk (scsi) Disk /dev/sda: 4295MB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 1075MB 1074MB primary ext4 boot 2 1075MB 4295MB 4294MB primary ext4 display the version number and copyright information of GNU Parted ...
Выходим из "parted"
(parted) quit
НЕинтерактивное расширение через growpart
-N - Можно предварительно запустить в холостом режиме с данным ключом
3 - номер раздела (/dev/sdb3)
growpart -v /dev/sda 3
Расширяем PV
pvresize /dev/sdaX
Если PV создан на голом диске /dev/sda
Просто расширяем PV
pvresize /dev/sde
Идем далее.
Смотрим что есть дополнительный незанятый объем
pvs
PV VG Fmt Attr PSize PFree /dev/sda2 almalinux_alma lvm2 a-- <31.00g 8.00g
vgs
VG #PV #LV #SN Attr VSize VFree almalinux_alma 1 2 0 wz--n- <31.00g 8.00g
Расширяем LV на весь свободный объем
lvresize /dev/almalinux_alma/root /dev/sda2
или
Расширяем раздел и одновременно расширяем ФС (только если данный раздел отформатирован в XFS), используя ключ "-r" (используется xfs_growfs).
В данном случае после расширения раздела нет необходимости использовать xfs_growfs
Расширение на весь объем
lvresize -r /dev/almalinux_alma/root /dev/sda2
Расширение на +определенный объем
lvresize -r -L +5G /dev/vg00/root /dev/vda2
Расширение до итогового объема 20GB
lvresize -r -L 20G /dev/vg00/root /dev/vda2
ИЛИ
Расширяем LV на конкретное значение в GB
-A n - Turn off auto-backup of metadata (see man page for details and cautions) which should prevent having to write to /etc/lvm You can then run vgcfgbackup after you have been successful in resizing. Необходимая опция если на расширяемом разделе осталось 0 свободного места.
lvextend -A n -L +5G /dev/almalinux_alma/root
Смотрим что объем LV увеличился
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root almalinux_alma -wi-ao---- 28.59g swap almalinux_alma -wi-ao---- 2.40g
Расширяем ФС EXT4 на LV root на весь доступный объем
resize2fs /dev/almalinux_alma/root
ИЛИ
Если расширяемый раздел LV имеет ФС XFS
Указываем именно директорию с примонтированным расширенным разделом (/ в данном случае, или, например, /mnt/d1, если расширяли не системный диск)
xfs_growfs -d /
Смотрим что общий объем раздела root и объем свободного места увеличился
df -h
Filesystem Size Used Avail Use% Mounted on /dev/mapper/almalinux_alma-root 29G 20G 7.7G 72% /
Готово!
Вариант 2. Сложный. Увеличение раздела через удаление текущего раздела и создание нового увеличенного раздела. (Лучше использовать Вариант 1 как более простой, без удаления раздела.)
Грузимся с загрузочного LIVE дистрибутива Linux. Предпочтительно с SystemRescueCD. Все действия производим в LIVE системе SystemRescueCD. В ней имеются необходимые утилиты, например, fsarchiver.
Если расширяемый раздел LV имеет ФС XFS
Активируем LVM разделы
vgchange -ay
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos_centos7-test01 -wi-ao---- 10.00g
Создаем директорию для монтирования системы root
mkdir /mnt/root_lv
Создаем директорию для бэкапа файлов раздела root в образ
mkdir /mnt/root_backup
Монтируем раздел root в директорию
mount /dev/centos_centos7-test01/root /mnt/root_lv/
Монтируем сетевую шару, на которую будем бэкапировать файлы раздела root (для этого подойдет и обычный раздел локального диска, например, подключенного через USB)
mount -t cifs -o username=admin,password=PassWord#1 //192.168.17.12/img/tmp/root /mnt/root_backup/
Бэкапим файлы раздела root в образ
xfsdump -l 0 -L "root_backup" -M "root_backup" -f /mnt/root_backup/root_backup.img /mnt/root_lv
Демонтируем раздел root
umount /mnt/root_lv
Удаляем раздел root, чтобы на его месте создать новый root увеличенного размера
lvremove /dev/centos_centos7-test01/root
СКОРЕЕ ВСЕГО ПЕРЕД СОЗДАНИЕМ НОВОГО РАЗДЕЛА LV НЕОБХОДИМО РАСШИРИТЬ ЛОГИЧЕСКИЙ РАЗДЕЛ НА ДИСКЕ
ВОЗМОЖНО Я НЕ УЧЕЛ ЭТО ПРИ НАПИСАНИИ МАНУАЛА
ЭТО МОЖНО СДЕЛАТЬ С ИСПОЛЬЗОВАНИЕМ parted
СМОТРИ НИЖЕ - РАСШИРЕНИЕ РАЗДЕЛА EXT4 ЭТОГО МАНУАЛА
ДОПОЛНИТЬ ЭТОТ МАНУАЛ КОГДА БУДУ РАСШИРЯТЬ LVM С XFS
Создаем новый root увеличенного размера
lvcreate -Zy -L 15G -n root centos_centos7-test01
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos_centos7-test01 -wi-a----- 15.00g
vgs
VG #PV #LV #SN Attr VSize VFree centos_centos7-test01 1 2 0 wz--n- <30.00g <15.00g
Форматируем новый раздел root
В mkfs.xfs (начиная с версии 3.2.4 xfsprogs) недавно стал использоваться по умолчанию суперблок версии 5 с множеством новых улучшений, таких как контрольные суммы метаданных CRC.
Чтобы избежать ошибки, требуется "-m reflink=0", что отключает несовместимую поддержку копирования при записи reflink.
Иначе при загрузке основной системы root раздел загрузится в RO режиме
mkfs.xfs -m reflink=0 /dev/centos_centos7-test01/root
Монтируем новый раздел в директорию
mount /dev/centos_centos7-test01/root /mnt/root_lv/
Восстанавливаем файлы root из сохраненного образа
xfsrestore -f /mnt/root_backup/root_backup.img /mnt/root_lv
Демонтируем раздел root и директорию для бэкапа
umount /mnt/root_*
Отключаем подключенный SystemRescueCD
Грузимся в основную систему
Система должна загрузиться
reboot
Если расширяемый раздел LV имеет ФС EXT4.
Активируем LVM разделы
vgchange -ay
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root vg01 -wi-ao---- 10.00g
Создаем директорию для бэкапа раздела root в образ
mkdir /mnt/root_backup
Монтируем сетевую шару, на которую будем бэкапировать раздел root (для этого подойдет и обычный раздел локального диска, например, подключенного через USB)
mount -t cifs -o username=admin,password=PassWord#1 //192.168.17.12/img/tmp/root /mnt/root_backup/
Создаем образ раздела root
Будет создан образ /mnt/root_backup/root_lv.fsa
fsarchiver savefs /mnt/root_backup/root_lv /dev/vg01/root
Statistics for filesystem 0 * files successfully processed:....regfiles=27662, directories=5301, symlinks=1186, hardlinks=4250, specials=23 * files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
Удаляем раздел root
lvremove /dev/vg01/root
Теперь необходимо расширить логический раздел /dev/sdbX для root на физическом диске (например, если на диске было свободное от разделов место или мы прибавили место к виртуальному диску в виртуальной машине (если машина в гипервизоре)). Иначе pvs и vgs будут показывать что размер раздела не увеличился и неоткуда брать место для создания LV большего объема.
parted
Смотрим
(parted) print
... Model: VMware Virtual disk (scsi) Disk /dev/sdb: 4295MB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 1074MB 1073MB primary ext4 ...
Система не даст расширить раздел до объема большего, чем объем самого диска, будет ошибка:
(parted) resizepart 1 4296
Error: The location 4296 is outside of the device /dev/sdb.
Расширяем объем раздела
(parted) resizepart 1 4295
Смотрим
(parted) print
... Model: VMware Virtual disk (scsi) Disk /dev/sdb: 4295MB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 4295MB 4294MB primary ext4 display the version number and copyright information of GNU Parted ...
Выходим из "parted"
(parted) quit
Расширяем PV
pvresize /dev/sdbX
Создаем раздел root с увеличенным объемом
lvcreate -Zy -L 15G -n root vg01
Форматируем root
mkfs.ext4 /dev/vg01/root
Восстанавливаем раздел root из сохраненного ранее образа
fsarchiver restfs /mnt/root_backup/root_lv.fsa id=0,dest=/dev/vg01/root
Statistics for filesystem 0 * files successfully processed:....regfiles=27662, directories=5301, symlinks=1186, hardlinks=4250, specials=23 * files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0
vgs
VG #PV #LV #SN Attr VSize VFree vg01 1 2 0 wz--n- <30.00g 15.00g
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root vg01 -wi-ao---- 15.00g
Отключаем подключенный SystemRescueCD
Грузимся в основную систему
Система должна загрузиться
reboot