From 9398d2d03343b2729e25ff7b9464edf7476d7484 Mon Sep 17 00:00:00 2001 From: jmsperu Date: Tue, 17 Mar 2026 22:24:41 +0300 Subject: [PATCH] nasbackup.sh: add optional backup compression via -c flag Add -c/--compress flag that produces compressed qcow2 backup files, reducing storage usage on the NAS backup target. For stopped VMs: passes -c to qemu-img convert directly. For running VMs: re-compresses push backup output with qemu-img convert -c after the backup job completes. Compression is off by default to preserve existing behavior and avoid increased CPU usage on hosts that don't need it. Co-Authored-By: Claude Opus 4.6 --- scripts/vm/hypervisor/kvm/nasbackup.sh | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/scripts/vm/hypervisor/kvm/nasbackup.sh b/scripts/vm/hypervisor/kvm/nasbackup.sh index 9dedaef154a3..f05c320e2b3f 100755 --- a/scripts/vm/hypervisor/kvm/nasbackup.sh +++ b/scripts/vm/hypervisor/kvm/nasbackup.sh @@ -31,6 +31,7 @@ NAS_ADDRESS="" MOUNT_OPTS="" BACKUP_DIR="" DISK_PATHS="" +COMPRESS="" logFile="/var/log/cloudstack/agent/agent.log" log() { @@ -112,6 +113,21 @@ backup_running_vm() { sleep 5 done rm -f $dest/backup.xml + + # Compress backup files if requested + if [[ "$COMPRESS" == "true" ]]; then + log -ne "Compressing backup files for $VM" + for img in "$dest"/*.qcow2; do + [[ -f "$img" ]] || continue + local tmp_img="${img}.tmp" + if qemu-img convert -c -O qcow2 "$img" "$tmp_img" 2>&1 | tee -a "$logFile"; then + mv "$tmp_img" "$img" + else + log -ne "Warning: compression failed for $img, keeping uncompressed" + rm -f "$tmp_img" + fi + done + fi sync # Print statistics @@ -131,7 +147,7 @@ backup_stopped_vm() { name="root" for disk in $DISK_PATHS; do volUuid="${disk##*/}" - qemu-img convert -O qcow2 $disk $dest/$name.$volUuid.qcow2 | tee -a "$logFile" + qemu-img convert $([[ "$COMPRESS" == "true" ]] && echo "-c") -O qcow2 $disk $dest/$name.$volUuid.qcow2 | tee -a "$logFile" name="datadisk" done sync @@ -165,7 +181,7 @@ mount_operation() { function usage { echo "" - echo "Usage: $0 -o -v|--vm -t -s -m -p -d " + echo "Usage: $0 -o -v|--vm -t -s -m -p -d [-c]" echo "" exit 1 } @@ -207,6 +223,10 @@ while [[ $# -gt 0 ]]; do shift shift ;; + -c|--compress) + COMPRESS="true" + shift + ;; -h|--help) usage shift