~~NOTOC~~{{ :tux.png?nolink&100 |}}
====== LIBVIRT: Konvertieren von VMs auf physikalischen HDDs in QCOW2-Images ======
----
Script um VMs, die auf physikalischen Platten bzw. in einer Partition angelegt sind, zum Backup in ein QCOW2-Image umwandeln.
Das Script erwartet die zu bearbeitenden Partitionen als Parameter: **''./cavtrans.sh 2 3 4''**
Im Script ist ein assoziatives Array, welches den Partitionen die entsprechenden Image-Namen zuordnet.
**Stand:** 2026-01-23
#!/bin/bash
# vim: ts=4:sw=4
#
# Batch um die VMs in den Partitionen der WD-Caviar in ein QCOW2-Image
# nach /var/lib/libvirt/images zu transferieren, zwecks darauf folgendem
# backup durch BORG
# Device-Pfad zur WD-Caviar ist: /dev/disk/by-id/ata-WDC_WD1002FAEX-00Y9A0_WD-WCAW30645732
# -part1 ist btrfs --> /mnt/caviar
# -part2 ist Linux Mint 22.3 Cinnamon
# -part3 ist Linux Mint 22.3 Mate
# -part4 ist Manjaro-Cinnamon
# -part5 ist Manjaro-KDE
# -part6 ist Windows 10 Enterprise
# -part7 ist Windows 11 Enterprise
DISK="/dev/disk/by-id/ata-WDC_WD1002FAEX-00Y9A0_WD-WCAW30645732"
NBD_TARGET="/dev/nbd0"
IMG_TARGET="/var/lib/libvirt/images/"
declare -A PART_IMG
PART_IMG[2]="mint-cinn-223.qcow2"
PART_IMG[3]="mint-mate-223.qcow2"
PART_IMG[4]="manjaro-cinnamon.qcow2"
PART_IMG[5]="manjaro-kde.qcow2"
PART_IMG[6]="win10ent.qcow2"
PART_IMG[7]="win11ent.qcow2"
#--- NBG kernelmodul laden um QEMU-Images/-Partionen zu mounten
sudo modprobe nbd max_part=8
#--- Partionen laut Commandline verarbeiten
for ARG in $*; do
echo "Bearbeite Partition: $ARG Image: ${PART_IMG[$ARG]}"
TARGET_PARTITION="$DISK-part$ARG"
#--- Partition mit NBD-Device verbinden
sudo qemu-nbd --connect $NBD_TARGET --format=raw $TARGET_PARTITION
#--- Partition konvertieren
sudo virt-sparsify --format raw --compress -o compression_type=zstd --convert qcow2 $NBD_TARGET $IMG_TARGET${PART_IMG[$ARG]}
#--- Partition von NBD-Device trennen
sudo qemu-nbd --disconnect $NBD_TARGET
sudo chmod 666 $IMG_TARGET${PART_IMG[$ARG]}
done
#--- Kernelmodul entladen
sudo rmmod nbd