Amikor kifogytunk a helyből – qcow2 shrinking

KVM virtualizációnál a dinamikus lemezek mérete annak ellenére növekszik, hogy a rajta felhasznált tárterület relatív nem változik. Ez ott jelent(het) problémát, ha ezt nem kezeli le a mentő szoftver. Proxmox esetében lehet tömörítést is alkalmazni a mentésekhez, de erre az nem megoldás. Két merevlemezen 52GB-ot csökkentettem az alábbi eljárással!

Természetesen az egész ügyet el lehet kerülni, ha a virtuális szerverek telepítésekor jól méretezünk. Esetemben felülméreteztem. Számomra ebből az a tanulság, hogy inkább kevesebb legyen a ráhagyás az egyes partíciókon, mert növelni könnyebb azokat, mint csökkenteni. A másik tanulság, hogy az LVM alkalmazása ezt megkönnyítheti, de ebben a tanulmányban nem térek erre ki.

A megoldás lépései a következők:

1. lépés – a szabad hely kinullázása a VM-ben
2. lépés – a “kinullázott” fájl törlése
3. lépés – a VM leállítása
4. lépés – shrinking qcow2 disks
5. lépés – a diskek felcserélése
6. lépés – a konzisztencia ellenőrzése
7. lépés – a VM elindítása
8. lépés – a VM szolgáltatásainak ellenőrzése
9. lépés – a régi diskek törlése

Lássuk mi a méreteket a virtuális szerveren (vm) és a hypervisoron (proxmox):

root@vm:~# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        76G  <strong>4.5G</strong>   67G   7% /

root@vm:~# df -h /var/www
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdc1       296G   <strong>14G</strong>  268G   5% /var/www

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/
-rw-r--r-- 1 root root  <strong>38G</strong> Apr 21 10:02 vm-103-disk-1.qcow2
-rw-r--r-- 1 root root  <strong>35G</strong> Apr 21 11:45 vm-103-disk-3.qcow2

vda1 = vm-103-disk-1.qcow2

vdc1 = vm-103-disk-3.qcow2

A probléma abból adódik, hogy hogy az 1-es és a 3-as disk együttes mérete 73GB és ahova mentek nincs ennyi többlet hely (azaz ennek tömörített mérete kb. 62GB). A Proxmox mentésére jellemző, hogy előbb elkészíti a mentést, majd ha minden rendben törli a korábbit.

Most pedig nézzük meg a változtatások után:

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/
-rw-r--r-- 1 root root <strong>4.2G</strong> Apr 21 12:40 /mnt/pve/VM/images/103/vm-103-disk-1.qcow2
-rw-r--r-- 1 root root <strong>17G</strong> Apr 21 12:56 /mnt/pve/VM/images/103/vm-103-disk-3.qcow2

Vágjunk bele!

—————————————————————————————————-
1. lépés – Disk1 kinullázása

Figyelem a root partíció méretét:

root@vm:~# watch df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        76G  <strong>4.6G</strong>   67G   7% /

FONTOS, hogy semmiképpen ne írjuk tele!!!

Egy másik konzolon elindítottam a “kinullázást”:

root@vm:~# dd if=/dev/zero of=/zero_file bs=1M
^C47279+0 records in
47279+0 records out
49575624704 bytes (50 GB) copied, 3664.18 s, 13.5 MB/s

Amikor megállítottam, valahogy így nézett ki a mérete:

root@vm:~# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        76G   <strong>51G</strong>   21G  72% /

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/vm-103-disk-1.qcow2
-rw-r--r-- 1 root root <strong>55G</strong> Apr 21 11:41 /mnt/pve/VM/images/103/vm-103-disk-1.qcow2

—————————————————————————————————-
2. lépés –  a “kinullázott” fájl törlése, hogy az eredeti méretet visszakapjuk

root@vm:~# rm /zero_file

root@vm:~# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        76G  <strong>4.6G</strong>   67G   7% /

Itt jegyezném meg, hogy direkt nem írtam végig a szabad helyemet nullával, hanem csak picivel mentem túl az eredeti hypervisor méreten. Valamint azt is figyeltem, hogy a hypervisoron mikor kezd el növekedni a qcow2 disk. Majdnem beérte (néhány GB híja), mikor hízni kezdett. Komoly fejfájást okozhat, ha magára hagyjuk a dd-t és koppig írja a lemezt! Ezt mindenképpen kerüljük el!

—————————————————————————————————-
1. lépés (ismét) – Disk3 kinullázása

root@vm:~# watch df -h /var/www
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdc1       296G   <strong>14G</strong>  268G   5% /var/www

root@vm:~# dd if=/dev/zero of=/var/www/zero_file bs=1M
^C22779+0 records in
22779+0 records out
23885512704 bytes (24 GB) copied, 949.35 s, 25.2 MB/s

root@vm:~# watch df -h /var/www/
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdc1       296G   <strong>36G</strong>  245G  13% /var/www

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/vm-103-disk-3.qcow2
-rw-r--r-- 1 root root <strong>39G</strong> Apr 21 12:01 /mnt/pve/VM/images/103/vm-103-disk-3.qcow2

—————————————————————————————————-
2. lépés (ismét) – a “kinullázott” fájl törlése

root@vm:~# rm /var/www/zero_file

root@vm:~# df -h /var/www/
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdc1       296G   <strong>14G</strong>  268G   5% /var/www

—————————————————————————————————-
3. lépés – a VM leállítása

root@vm:~# shutdown -h now

—————————————————————————————————-
4. lépés – shrinking qcow2 disks

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/
-rw-r--r-- 1 root root  55G Apr 21 12:03 vm-103-disk-1.qcow2
-rw-r--r-- 1 root root  39G Apr 21 12:03 vm-103-disk-3.qcow2

root@proxmox:~# qemu-img convert -c -O qcow2 /mnt/pve/VM/images/103/vm-103-disk-1.qcow2  /mnt/pve/VM/images/103/vm-103-disk-1-shrunk.qcow2

root@proxmox:~# qemu-img convert -O qcow2 /mnt/pve/VM/images/103/vm-103-disk-3.qcow2  /mnt/pve/VM/images/103/vm-103-disk-3-shrunk.qcow2

—————————————————————————————————-
5. lépés – a diskek felcserélése

root@proxmox:~# mv /mnt/pve/VM/images/103/vm-103-disk-1.qcow2 /mnt/pve/VM/images/103/vm-103-disk-1-bak.qcow2
root@proxmox:~# mv /mnt/pve/VM/images/103/vm-103-disk-1-shrunk.qcow2 /mnt/pve/VM/images/103/vm-103-disk-1.qcow2
root@proxmox:~# mv /mnt/pve/VM/images/103/vm-103-disk-3.qcow2 /mnt/pve/VM/images/103/vm-103-disk-3-bak.qcow2
root@proxmox:~# mv /mnt/pve/VM/images/103/vm-103-disk-3-shrunk.qcow2 /mnt/pve/VM/images/103/vm-103-disk-3.qcow2

—————————————————————————————————-
6. lépés – a konzisztencia ellenőrzése

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/vm-103-disk-1*
-rw-r--r-- 1 root root  55G Apr 21 12:14 /mnt/pve/VM/images/103/vm-103-disk-1-bak.qcow2
-rw-r--r-- 1 root root 4.2G Apr 21 12:40 /mnt/pve/VM/images/103/vm-103-disk-1.qcow2

root@proxmox:~# qemu-img check /mnt/pve/VM/images/103/vm-103-disk-1.qcow2
No errors were found on the image.

root@proxmox:~# ls -lh /mnt/pve/VM/images/103/vm-103-disk-3*
-rw-r--r-- 1 root root 39G Apr 21 12:13 /mnt/pve/VM/images/103/vm-103-disk-3-bak.qcow2
-rw-r--r-- 1 root root 17G Apr 21 12:56 /mnt/pve/VM/images/103/vm-103-disk-3.qcow2

root@proxmox:~# qemu-img check /mnt/pve/VM/images/103/vm-103-disk-3.qcow2
No errors were found on the image.

—————————————————————————————————-
7. lépés – a VM elindítása

—————————————————————————————————-
8. lépés – a VM szolgáltatásainak ellenőrzése

—————————————————————————————————-
9. lépés – a régi diskek törlése

root@proxmox:~# rm /mnt/pve/VM/images/103/vm-103-disk-1-bak.qcow2
root@proxmox:~# rm /mnt/pve/VM/images/103/vm-103-disk-3-bak.qcow2

Gondolkodtam azon, hogy mi lenne, ha a partíciókat és a disk méreteket is csökkenteném, de a root file systemhez kicsit komplikált lenne az ügy, így ez kimaradt…

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.