Go to content Go to menu Go to search

Уменьшить диск виртуальной машины в 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


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved