Уменьшить диск виртуальной машины в proxmox
Исходные данные
Виртуальная машина c ID 127, к которой подключен диск 100Гб (ThinLvm).
Требуется уменьшить размер до 50Гб.
состояние до:
root@deb12-test [ none ] ~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 4M 0 rom vda 254:0 0 100G 0 disk ├─vda1 254:1 0 487M 0 part /boot ├─vda2 254:2 0 1K 0 part └─vda5 254:5 0 99,5G 0 part ├─debian--vg-root 253:0 0 98,6G 0 lvm / └─debian--vg-swap_1 253:1 0 980M 0 lvm root@deb12-test [ none ] ~ # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root debian-vg -wi-ao---- 98,56g swap_1 debian-vg -wi-a----- 980,00m root@deb12-test [ none ] ~ # fdisk -l /dev/vda Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x5ac67590 Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 999423 997376 487M 83 Linux /dev/vda2 1001470 209713151 208711682 99,5G 5 Extended /dev/vda5 1001472 209713151 208711680 99,5G 8e Linux LVM
Процедура
Первым делом нужно сделать fstrim -av внутри виртуалки и убедиться, что том сдулся (lvs на pve), а так же убедиться, что на диске занято меньше 10G (или поменять цифры в командах ниже на другие).
на хосте PVE:
cd /var/lib/vz/template/iso wget 'https://fastly-cdn.system-rescue.org/releases/13.02/systemrescue-13.02-amd64.iso'
подключаем к виртуалке как sata, загружаемся с этого CD, далее внутри виртуалки:
e2fsck -f /dev/mapper/debian--vg-root resize2fs /dev/mapper/debian--vg-root 10G lvreduce --size 15G debian-vg/root # у меня том swap_1 был размешен после root, по этому его нужно подвинуть ближе к началу pvdisplay -m /dev/vda5 # ниже нужно заменить "/dev/vda5:25232-25476" на те сегменты, где сейчас swap_1, что выдаст вышеуказанная команда. pvmove --alloc anywhere /dev/vda5:25232-25476 /dev/vda5:0-5118 pvdisplay -m /dev/vda5 pvresize /dev/vda5 --setphysicalvolumesize 20G --verbose fdisk -l /dev/vda parted /dev/vda (parted) unit GiB (parted) resizepart 5 30.5GiB (parted) resizepart 2 30.5GiB (parted) quit fdisk -l /dev/vda poweroff
Далее на хосте PVE:
lvreduce --size 50G vg/vm-127-disk-0 qm disk rescan
Если есть ругань типа WARNING: Thin volume vg_1/vm-127-disk-0 maps 536739708928 while the size is only 107374182400., это значит fstrim в виртуалке не очистил место.
тогда нужно принудительно сделать blkdiscard, для этого:
lvresize -L 100G vg/vm-127-disk-0 blkdiscard -o 40G /dev/vg/vm-127-disk-0 lvreduce --size 50G vg/vm-127-disk-0
отключаем CD, загружаем виртуалку в нормальном режиме, далее внутри виртуалки:
parted /dev/vda resizepart 2 100% parted /dev/vda resizepart 5 100% pvresize /dev/vda5 lvresize --extents +100%FREE --resizefs /dev/mapper/debian--vg-root fstrim -av