B.6. Guest virtual machine booting stalls with error: No boot device
- Symptom
- After building a guest virtual machine from an existing disk image, the guest booting stalls with the error message
No boot device
. However, the guest virtual machine can start successfully using theQEMU
command directly. - Investigation
- The disk's bus type is not specified in the command for importing the existing disk image:
# virt-install \ --connect qemu:///system \ --ram 2048 -n rhel_64 \ --os-type=linux --os-variant=rhel5 \ --disk path=/root/RHEL-Server-5.8-64-virtio.qcow2,device=disk,format=qcow2 \ --vcpus=2 --graphics spice --noautoconsole --import
However, the command line used to boot up the guest virtual machine using QEMU directly shows that it usesvirtio
for its bus type:# ps -ef | grep qemu /usr/libexec/qemu-kvm -monitor stdio -drive file=/root/RHEL-Server-5.8-32-virtio.qcow2,index=0,if=virtio,media=disk,cache=none,format=qcow2 -net nic,vlan=0,model=rtl8139,macaddr=00:30:91:aa:04:74 -net tap,vlan=0,script=/etc/qemu-ifup,downscript=no -m 2048 -smp 2,cores=1,threads=1,sockets=2 -cpu qemu64,+sse2 -soundhw ac97 -rtc-td-hack -M rhel5.6.0 -usbdevice tablet -vnc :10 -boot c -no-kvm-pit-reinjection
Note thebus=
in the guest's XML generated by libvirt for the imported guest:<domain type='qemu'> <name>rhel_64</name> <uuid>6cd34d52-59e3-5a42-29e4-1d173759f3e7</uuid> <memory>2097152</memory> <currentMemory>2097152</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='rhel5.4.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'> <timer name='pit' tickpolicy='delay'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/root/RHEL-Server-5.8-64-virtio.qcow2'/> <emphasis role="bold"><target dev='hda' bus='ide'/></emphasis> <address type='drive' controller='0' bus='0' unit='0'/> </disk> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='54:52:00:08:3e:8c'/> <source bridge='br0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target port='0'/> </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/> <video> <model type='cirrus' vram='9216' heads='1'/> </video> </devices> </domain>
The bus type for the disk is set aside
, which is the default value set by libvirt. This is the incorrect bus type, and has caused the unsuccessful boot for the imported guest. - Solution
Procedure B.2. Correcting the disk bus type
- Undefine the imported guest, then re-import it with
bus=virtio
and the following:# virsh destroy rhel_64 # virsh undefine rhel_64 # virt-install \ --connect qemu:///system \ --ram 1024 -n rhel_64 -r 2048 \ --os-type=linux --os-variant=rhel5 \ --disk path=/root/RHEL-Server-5.8-64-virtio.qcow2,device=disk,bus=virtio,format=qcow2 \ --vcpus=2 --graphics spice --noautoconsole --import
- Edit the imported guest's XML using
virsh edit
and correct the disk bus type.