idediskkvmhotplugging

Problem with virsh commands


I have been trying to use virsh attah-disk to attach a qcow2 file as additional storage source. The syntax i am using is (from internet):

virsh attach-disk --driver file vm2 disk2.qcow2 hdc

If the vm is running or paused it shows:

error: this function is not supported by the hypervisor: disk bus 'ide' cannot be hotplugged.

If the vm is shutdown it shows:

error: Requested operation is not valid: cannot attach device on inactive domain

I am not sure about the hdc parameter. I have tried using attach-device function also with xml file as:

<disk type="file" device="disk">
    <driver name="file"/>
    <source file="/gfs1/disk2.qcow2"/>
    <target dev="hdc"/>
</disk>

But this also shows:

error: Failed to attach device from /gfs1/disk2tovm2.xml
error: this function is not supported by the hypervisor: disk bus 'ide' cannot be hotplugged.

I looked at many examples but none of them worked and all had almost the same syntax. If someone could help me figure out the error.

COMPLETE CONFIGURATION FILE OF VM

root@blade1:/vms# virsh dumpxml vm2
<domain type='kvm' id='33'>
  <name>vm2</name>
  <uuid>70affd5d-af95-72c5-2d96-c131f46409b6</uuid>
  <description>--autostart</description>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>2</vcpu>
  <os>
    <type arch='i686' machine='pc-0.14'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/vms/vm2.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <interface type='bridge'>
      <mac address='52:54:00:5e:98:e4'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/0'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='6900' autoport='no' listen='0.0.0.0'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='apparmor'>
    <label>libvirt-70affd5d-af95-72c5-2d96-c131f46409b6</label>
    <imagelabel>libvirt-70affd5d-af95-72c5-2d96-c131f46409b6</imagelabel>
  </seclabel>
</domain>

Solution

  • The reason this doesn't work is because you are trying to attach the disk to a running domain using IDE architecture.

    Imagine you have a real physical server, can you open it up while it is running and plug in an IDE drive? No, the architecture does not support it. KVM/QEMU, trying to emulate this architecture, must then present the error you are seeing: "disk bus 'ide' cannot be hotplugged."

    One solution is to attach the disk using SCSI archicture. SCSI supports hot plugging. The command you would use would be:

    virsh attach-disk --driver file vm2 disk2.qcow2 sdc

    The only change is "sdc" instead of "hdc". This hints to KVM/QEMU that you want SCSI instead of IDE, and it will attach the disk.

    Also, when the domain is stopped, you can't use attach-disk because this function is meant for running domains.