I have a KVM virtual machine that is managed via libvirsh. Now I want to use a different ISO image inside the VM.

How do I change the DVD in the virtual drive using virsh?



attach-disk guest01 /root/disc1.iso hdc --driver file --type cdrom
--mode readonly

Change CDROM:

attach-disk guest01 /root/disc2.iso hdc --driver file --type cdrom
--mode readonly

Remove CDROM:

 attach-disk guest01 " " hdc --driver file --type cdrom
 --mode readonly
| improve this answer | |
  • Thanks, rkthr. I test this next week and come back here. +1 anyway :-) – DerMike Jun 10 '11 at 8:24
  • 7
    Thanks for tip. For me it works but only if I remove '--driver file' from the command (version of virsh: 0.9.2). – Lukasz Stelmach Dec 23 '11 at 20:50
  • 2
    I had to add --config to the command. Probably due to the fact that the guest wasn't originally configured with a cdrom. This addressed the following: error: internal error: No device with bus 'ide' and target 'hdc'. cdrom and floppy device hotplug isn't supported by libvirt. – user59156 Oct 19 '15 at 15:59
  • 1
    virsh attach-disk virtual.host.name /tank/kvm/iso/ubuntu-16.04.1-server-amd64.iso hda --type cdrom --mode readonly – Xdg Aug 31 '16 at 8:20
  • It seems that the domain must be started to attach a new source for the cdrom. – imz -- Ivan Zakharyaschev Jan 31 '17 at 12:00

In libvirt 0.9.12 and maybe earlier, a command change-media exists:

change-media <domain> <path> [<source>] [--eject] [--insert] [--update] [--current] [--live] [--config] [--force]

Change CD:

change-media guest01 hdb /pool/disc.iso

Eject CD:

change-media guest01 hdb --eject
| improve this answer | |
  • This is the right command when using SATA controller for CD-ROM. – Xdg Oct 9 '16 at 12:41

I tried the attach-disk command and it didn't work for me. However, I found this doc on fedora which asks you to use the "update-device" command. This worked for me, and you can find it at Attaching and updating a device with virsh. Here are the steps:

  • Create an XML file:

    <target dev='hdc' bus='ide'/>
    <alias name='ide0-1-0'/>
    <address type='drive' controller='0' bus='1' target='0' unit='0'/>

Make sure you don't have the <source> tag in your definition

  • Update the device:

    virsh update-device <guest name> <XML file name>
| improve this answer | |
  • That would remove the device, not change the CD as the OP asks. It's also badly copied from your link - it's malformed XML as it stands. – user84636 Nov 22 '14 at 12:07

First you have to export existing configuration:

virsh dumpxml guest_name > config.xml

Then you have to open file and copy cdrom section and add the line with iso image path like

<source file='some.iso'/>

So the result is something like

<disk type='file' device='cdrom'>
   <source file='some.iso'/>
   <driver name='qemu' type='raw'/>
   <target dev='hdb' bus='ide'/>
   <alias name='ide0-0-1'/>
   <address type='drive' controller='0' bus='0' target='0' unit='1'/>

and save it as cdrom.xml.

After that:

virsh update-device guest_name cdrom.xml

#Device updated successfully
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.