[libvirt] Issues with qemu-nbd over AF_UNIX and virDomainAttachDevice

Deepak C Shetty deepakcs at linux.vnet.ibm.com
Fri May 24 04:59:15 UTC 2013


Hi List,
     Facing issues trying to use virDomainAttachDevice API of libvirt 
from python.

Here is what I am trying to do

1) Setup qemu-nbd to export a qcow2 disk image over unix socket on my 
localhost
qemu-nbd -t -k /tmp/mysock2 /home/dpkshetty/work/img/iscsi_disk

The above blocks. and i am able to use
qemu-system-x86_64 -drive file=nbd:unix:/tmp/mysock2

Just to test it...and it works. Since currently the disk is a blank 
disk.. I see "No bootable device" and QEMU stops.. whcih is expected
So qemu-nbd is setup and working properly

2)
 >>> print nbdxml
<disk type='network' device='disk'>
   <driver name="qemu" type="qcow2"/>
   <source protocol="nbd">
     <host name="deepakcs-lx" port="10809" transport="unix" 
socket="/tmp/mysock2" />
   </source>
   <target dev="vdc" bus="virtio" />
</disk>
 >>> dom.attachDevice(nbdxml)
libvir: QEMU error : operation failed: open disk image file failed
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib64/python2.7/site-packages/libvirt.py", line 400, in 
attachDevice
     if ret == -1: raise libvirtError ('virDomainAttachDevice() failed', 
dom=self)
libvirt.libvirtError: operation failed: open disk image file failed

and I see... in the VM's log....

inet_connect_opts: 
connect(ipv4,deepakcs-lx.local.lan,192.168.1.7,10809): Connection refused

3) I tried usign virsh attach-device.. and the same problem happens

4) firewall/iptables are not running. SELinux is permissive

5) I tried appending -p 1111 to the qemu-nbd cmdline and using 
port="1111" in the XML.. but that doesn't help, see the same error


Questions/Observations :

1) What am i doing wrong here ? In the <host> tag, port attr is 
mandatory.. but looking at `netstat -nptl` I don't see any process 
listeing on 10809 or 1111 (when i gave -p 1111 ).
So does this mean there is no way for libvirt to just directly open the 
socket and use it.. Its trying to connect to the port i give in the XML 
and since no one is listening there.. it fails.. hence the error seen in 
the VM logs.... Has anybody tryign usign qemu-nbd and attaching that 
disk as I am doign above ? Is it legal, if not, why ?

2) The VM/Domain is active during all of the above steps.

3) IIUC... for the above usecase... port attr of <host> should be 
optional... such that libvirt can directly do the equivalent of ` -drive 
file=nbd:unix:/tmp/mysock2` and add this as a NBD device to the runnign 
guest/Domain... but currently port and hostname are mandatory. For unix 
sockets... hostname will always be local...so i feel both hostname & 
port should be optional for the above usecase ?

4) I haven't yet tried doing the above when guest/Domain is Inactive.

5) I haven't yet tried doing the above usign nbd-server or qemu-nbd 
usign -c option (which i believe starts qemu-nbd in server mode, but 
need nbd.ko kernel module to be loaded).
I am hoping using either of these might get it working... since we have 
a process listening on a port on the host... but I wanted to get this 
working using plain unix sockets.. lightweight and doesn't need nbd.ko

Comments/Suggestions appreciated.

thanx,
deepak





More information about the libvir-list mailing list