Error: Device xxxx (vbd) could not be connected

Error: Device 51712 (vbd) could not be connected. Failed to find an unused loop device
或者这个:
Error: Device 51712 (vbd) could not be connected. losetup /dev/loop8 /vm/suse_100.img failed

出现错误的原因很明显,由 loop 设备不足造成的。Linux 下默认只有 0-7 个 loop 设备。

通过修改 modprobe.conf 文件来增加默认的 loop:

# vi /etc/modprobe.conf
options loop max_loop=64

重启或者停用所有的 DomU 之后先卸载(rmmod) loop 模块再加载(modprobe)。
上面的 64 可以改为适用于你系统的值。

除了通过增加 loop 设备解决问题之外,还可以使用下面的方式。

半虚拟化的 DomU 可以通过 blktp 驱动器来直接访问虚拟的 block 驱动,而不必通过 loop 设备。为了实现这样的方式,需要在定义 disk 指令时将其指定为 tap:aio 用以代替 file。上面的方式不适用于全虚拟化。当然不管是半虚拟化还是全虚拟化,都可以使用物理设备分区,也就是 /dev/sdxx 等,而不是通过 dd 来生成一个文件,这个可以通过 phy 来实现。
对于半虚拟化来说,建议使用 phy 或者 tap:aio;而对于全虚拟化来说,可以使用 phy 或者 file。这里是这二者的区别。

参考:

http://www.centos.org/docs/5/html/Virtualization-en-US/ch-virt-loop-device-errors.html