KVM VM LVM innerhalb LVM verkleinern

WARNUNG: IMMER BACKUP VORHER MACHEN, und das ganze ist auf eigene Gefahr!

folgendes Szenario, ich habe einen KVM Host Server darauf laufen ein paar VMs. Für fast alle VMs habe ich eine Festplatten große von 20GB angelegt, mit der Zeit musste ich feststellen das 20GB war einfach zu viel und 10GB wurden vollkommen ausreichen, vor allem das ganze kostet zu viel Backup Speicher.

  LV           VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log   Cpy%Sync Convert
  VM1          sunny -wi-ao---- 10.00g                                                   
  VM2          sunny -wi-a----- 20.00g                                                   
  backup-VM1   sunny -wi-a----- 20.00g                                                   
  backup-VM2   sunny -wi-a----- 20.00g                                                   
  home         sunny -wi-ao---- 20.00g                                                   
  root         sunny -wi-ao---- 10.00g                                                   
  swap         sunny -wi-ao----  4.00g                                                   
  tmp          sunny -wi-ao----  5.00g   

Vorbereitung

auf VM2 ist einen debian linux System mit LVM2 Partition installiert, bevor wir die VM verkleinern müssen wir die Machine runter fahren.

virsh shutdown VM2

Backup

wir erstellen erstmal eine neue LV für den Backup, die genau so groß wie die VM2

lvcreate -L 20G sunny -n backup-VM2                                                  

Jetzt machen wir einfach eine 1:1 Copy von die VM, mit dem dd Befehl

dd if=/dev/sunny/VM2 of=/dev/sunny/backup-VM2                                                 

Verkleinern

Jetzt müssen wir die VM2 auf dem Host mounten, da VM2 selber LVM ist benötigen wir das Tool kpartx, falls nicht vorhanden einfach mit apt installieren.

apt install kpartx

nun um die Logical Volumes, die Innerhalb unseren VM2 anzuzeigen, müssen wir folgendes Befehl ausführen:

kpartx -av /dev/sunny/VM2                                          

add map sunny-VM21 (253:9): 0 497664 linear /dev/sunny/VM2 2048
add map sunny-VM22 (253:10): 0 2 linear /dev/sunny/VM2 501758
add map sunny-VM25 : 0 41439232 linear /dev/sunny/VM2 501760

und nun aktivieren wir die LVMs, die innerhalb VM2 sind

vgchange -ay
lvscan

Nun müssen wir, die LVM, die wir verkleinern wollen erstmal auf Fehlern überprüfen

e2fsck -f /dev/VM2-vg/root

Jetzt verkleinern wir die Root Partition

resize2fs /dev/VM2-vg/root 8G

danach verkleinern wir die Root LV

lvreduce -L 8.5G /dev/VM2-vg/root

Jetzt nochmal die Root Partition ändern

resize2fs /dev/VM2-vg/root

auf Fehlern überprüfen

e2fsck -f /dev/VM2-vg/root

Jetzt können wir die LVMs deaktivieren und entfernen

vgchange -an
kpartx -dv /dev/sunny/VM2

Nachher, die Machine booten und folgendes Befehl innerhalb VM2 eingeben:

pvs -v --segments /dev/sda5
root@VM2 ~ # pvs -v --segments /dev/sda5
    DEGRADED MODE. Incomplete RAID LVs will be processed.
    Wiping cache of LVM-capable devices
    Using physical volume(s) on command line
  PV         VG      Fmt  Attr PSize  PFree  Start SSize LV     Start Type   PE Ranges          
  /dev/sda5  VM2-vg lvm2 a--  19,76g 10,41g     0  2176 root       0 linear /dev/sda5:0-2175   
  /dev/sda5  VM2-vg lvm2 a--  19,76g 10,41g  2176  2664            0 free                      
  /dev/sda5  VM2-vg lvm2 a--  19,76g 10,41g  4840   218 swap_1     0 linear /dev/sda5:4840-5057

root@VM2 ~ # sudo pvmove --alloc anywhere /dev/sda5:4840-5057
  /dev/sda5: Moved: 0,0%
  /dev/sda5: Moved: 50,5%
  /dev/sda5: Moved: 100,0%
sudo pvmove --alloc anywhere /dev/sda5:yyyy-end

Nachher die VM2 mit GParted booten um die physikalischen Volumen zu verkleinern.

und am Schluss die LVM selber auf dem Host verkleinern.

lvreduce -L 10G /dev/VM2

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Default top bar text