Jak powiększyć dysk systemowy maszyny wirtualnej?

Poniższe instrukcje dotyczą powiększania przestrzeni dyskowej dla systemu operacyjnego serwera tor7. Ta maszyna wirtualna korzysta z pliku tor7.kvm, który jest obrazem całego dysku /dev/vda, z którego korzysta system operacyjny:

[root@tor7 ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 17.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
1      1049kB  525MB   524MB   primary  ext4         boot
2      525MB   17.2GB  16.7GB  primary               lvm
[root@tor7 ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/centos-root            16G   14G  1.3G  91% /
...
/dev/vda1                         477M  179M  269M  40% /boot
...

Przestrzeń dyskowa /dev/mapper/centos-root jest realizowana poprzez logiczny wolumin

[root@tor7 ~]# lvs
LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
root centos -wi-ao---- <15.49g

który powstał w wyniku wykorzystania całej drugiej partycji /dev/vda jako woluminu fizycznego:

[root@tor7 ~]# pvs
PV         VG     Fmt  Attr PSize   PFree
/dev/vda2  centos lvm2 a--  <15.51g 20.00m

Żeby powiększyć partycję LVM trzeba najpierw powiększyć dysk /dev/vda, czyli cały plik tor7.kvm, który jest używany przez maszynę wirtualną:

[root@hel ~]# dd if=/dev/zero of=tor7large.kvm bs=100M count=300
[root@hel ~]# dd if=tor7.kvm of=tor7large.kvm bs=100M  conv=notrunc
[root@hel ~]# kpartx -l tor7large.kvm
[root@hel ~]# kpartx -a tor7large.kvm
[root@hel ~]# kpartx -d tor7large.kvm
[root@hel ~]# kpartx -a tor7large.kvm
[root@hel ~]# parted /dev/loop0 unit s print
[root@hel ~]# parted /dev/loop0 rm 2
[root@hel ~]# parted /dev/loop0 mkpart primary ..... 100%
[root@hel ~]# parted /dev/loop0 set lvm on

Woluminy logiczne związane z drugą partycja dysku muszą być widoczne w systemie (dla komendy lvs). W tym celu trzeba wykonać komendę:

[root@hel ~]# vgscan --mknodes
[root@hel ~]# vgchange -ay centos

Okazuje się, że dwie różne grupy woluminowe mają tę samą nazwę. W celu ich rozróżnienia trzeba wykonać komendy:

[root@hel ~]# vgdisplay
[root@hel ~]# vgrename SsJ....R centost7

Teraz można przystąpić do powiększenia woluminu fizycznego, który jest powiązany z drugą, powiększoną partycją:

[root@hel ~]# pvresize /dev/mapper/loop0p2
[root@hel ~]# pvs
[root@hel ~]# vgs
[root@hel ~]# lvs

W grupie woluminowej centost7 pojawiła się dodatkowa, wolna przestrzeń, więc można zwiększyć rozmiar woluminu logicznego:

[root@hel ~]# lvextend -L +10G /dev/centost7/root

System plików ext4, który został założony na tym woluminie logicznym musi zostać powiadomiony, że ma do dyspozycji więcej przestrzeni dyskowej:

[root@hel ~]# resize2fs -f /dev/centost7/root

Teraz pozostaje sprawdzenie, czy operacja się powiodła:

[root@hel ~]# mount  /dev/centost7/root /mnt/root/
[root@hel ~]# df -h
[root@hel ~]# umount   /mnt/root/

Na koniec trzeba zdeaktywować grupe woluminową centost7, odmontować plik tor7large.kvm i uruchomić serwer tor7:

[root@hel ~]# vgchange -a n centost7
[root@hel ~]# kpartx -d tor7large.kvm
[root@hel ~]# cp tor7large.kvm tor7.kvm

Teraz należy uruchomić serwer tor7 w trybie pojedynczego użytkownika dokonując zmiany konfiguracji programu ładującego przed uruchomieniem systemu, a następnie utrwalić te zmiany modyfikując /boot/grub2/grub.cfg oraz /etc/fstab, gdzie trzeba zamienić centos na centost7.