Skip to content

[KVM] Restored backup volume not attached to running VM via libvirt - only database updated #12405

@furkandogmus

Description

@furkandogmus

problem

Description

When restoring a volume from backup and attaching it to a running KVM VM, the volume is only attached at the database level but not actually hot-attached to the running VM via libvirt. This means:

  1. The volume appears in CloudStack UI as "attached"
  2. The volume does NOT appear in virsh domblklist <vm-name>
  3. The volume is NOT visible inside the guest OS
  4. User must reboot(forced) the VM to see the restored volume

Root Cause

In KVMGuru.attachRestoredVolumeToVirtualMachine() (line 380-400), the method only:

  • Updates the volume state in the database via _volumeDao.attachVolume()
  • Sets volume state to Ready
    It does NOT:
  • Check if VM is running
  • Send an AttachCommand to the KVM agent to hot-attach the disk via libvirt

Expected Behavior

When attaching a restored volume to a running VM:

  1. CloudStack should detect the VM state
  2. If VM is Running, send a libvirt attach command to hot-attach the disk
  3. Volume should immediately appear in virsh domblklist and inside guest OS
  4. No reboot should be required

versions

CloudStack: 4.21.0
Hypervisor: KVM
Host OS: Rocky Linux 9
Guest OS: Rocky Linux 9 / Windows 10 - 2022 Server

The steps to reproduce the bug

Steps to Reproduce

  1. Create a VM with a data disk
  2. Create a backup of the VM
  3. Start the VM (ensure it's running)
  4. Restore the backed-up volume and attach to the running VM via API:
    restoreVolumeFromBackupAndAttachToVM
  5. Check virsh domblklist <vm-name> on the KVM host
  6. Observe: The restored volume is NOT listed
  7. Check inside guest OS
  8. Observe: The disk is NOT visible
  9. Reboot(forced) the VM
  10. Observe: After reboot(forced), the disk appears

What to do about it?

Either:
A) Add hot-attach logic to KVMGuru.attachRestoredVolumeToVirtualMachine() to send AttachCommand when VM is running
B) Or document this as expected behavior and require users to stop VM before restoring volumes
Option A is preferred as it aligns with how regular attachVolume API works for running VMs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions