I’m using Xen 4.1 / Linux 3.5 on a recent AMD (FX class) box for Audeo internal VMs. I decided to use wheezy on a few of these VMs for various reasons.
I normally use xen-create-image to create new VMs, but when I tried to start a wheezy VM created in this manner, Xen complained of the following:
Error: Boot loader didn't return any data!
You’ll also see the following in xend.log:
[2012-09-13 16:25:04 1506] ERROR (XendDomainInfo:108) Domain construction failed
Traceback (most recent call last):
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendDomainInfo.py", line 106, in create
vm.start()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendDomainInfo.py", line 474, in start
XendTask.log_progress(31, 60, self._initDomain)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendTask.py", line 209, in log_progress
retval = func(*args, **kwds)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendDomainInfo.py", line 2838, in _initDomain
self._configureBootloader()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendDomainInfo.py", line 3285, in _configureBootloader
bootloader_args, kernel, ramdisk, args)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendBootloader.py", line 215, in bootloader
raise VmError, msg
VmError: Boot loader didn't return any data!
As it turns out, with a default install of wheezy from xen-create-image, you won’t get anything in /boot, or grub; pygrub depends on at least the existence of /boot/grub/menu.lst.
The easiest way to fix this is to just chroot into the (mounted) disk image and install grub, and make sure it gets installed in the future by making appropriate changes to your x-c-i configuration.