diff --git a/scripts/vm/hypervisor/kvm/nasbackup.sh b/scripts/vm/hypervisor/kvm/nasbackup.sh index e298006f7a8c..9ad1f7434bca 100755 --- a/scripts/vm/hypervisor/kvm/nasbackup.sh +++ b/scripts/vm/hypervisor/kvm/nasbackup.sh @@ -141,7 +141,8 @@ backup_running_vm() { break ;; Failed) echo "Virsh backup job failed" - cleanup ;; + cleanup + exit 1 ;; esac sleep 5 done @@ -177,6 +178,7 @@ backup_stopped_vm() { if ! qemu-img convert -O qcow2 "$disk" "$output" > "$logFile" 2> >(cat >&2); then echo "qemu-img convert failed for $disk $output" cleanup + exit 1 fi name="datadisk" done @@ -221,6 +223,20 @@ mount_operation() { cleanup() { local status=0 + # Resume the VM if it was paused (e.g. by virsh backup-begin) + if [[ -n "$VM" ]]; then + local vm_state + vm_state=$(virsh -c qemu:///system domstate "$VM" 2>/dev/null) + if [[ "$vm_state" == "paused" ]]; then + if virsh -c qemu:///system resume "$VM" > /dev/null 2>&1; then + log -ne "Resumed VM $VM after backup failure" + else + echo "Failed to resume VM $VM - manual intervention required (virsh resume $VM)" + status=1 + fi + fi + fi + rm -rf "$dest" || { echo "Failed to delete $dest"; status=1; } umount "$mount_point" || { echo "Failed to unmount $mount_point"; status=1; } rmdir "$mount_point" || { echo "Failed to remove mount point $mount_point"; status=1; }