RBD volume not made available to Xen virtual guest on openSUSE 15.2 (with libvirt 6.0.0)
Marcel Juffermans
mjuffermans at paradigmone.com.au
Tue Oct 27 23:35:57 UTC 2020
Thanks Jim,
Looking at the logs for the working and non-working setups, the command
line for QEMU is identical and the qmp commands almost the same: they
both do "query-chardev" and "query-vnc" and the working setup does an
additional "qmp_capabilities" which is likely not relevant.
So I guess it must be in QEMU - I'll head over to the bug tracker.
Thanks for your help!
Marcel
On 28/10/20 9:26 am, Jim Fehlig wrote:
> On 10/22/20 6:48 PM, Marcel Juffermans wrote:
>> Hi there,
>>
>> Since upgrading to openSUSE 15.2 (which includes libvirt 6.0.0) the
>> virtual guests don't get their RBD disks made available to them. On
>> openSUSE 15.1 (which includes libvirt 5.1.0) that worked fine. The
>> XML is as follows:
>>
>> <domain type='xen' id='7'>
>> <name>mytwotel-a</name>
>> <uuid>a56daa5d-c095-49d5-ae1b-00b38353614e</uuid>
>> <description>mytwotel-a</description>
>> <memory unit='KiB'>1048576</memory>
>> <currentMemory unit='KiB'>1048576</currentMemory>
>> <vcpu placement='static'>1</vcpu>
>> <cputune>
>> <vcpupin vcpu='0' cpuset='8-23'/>
>> </cputune>
>> <os>
>> <type arch='x86_64' machine='xenpv'>linux</type>
>> <kernel>/usr/lib/grub2/x86_64-xen/grub.xen</kernel>
>> </os>
>> <clock offset='utc'/>
>> <on_poweroff>destroy</on_poweroff>
>> <on_reboot>restart</on_reboot>
>> <on_crash>restart</on_crash>
>> <devices>
>> <disk type='network' device='disk'>
>> <driver name='qemu' type='raw' cache='writethrough'/>
>> <source protocol='rbd' name='guests/mytwotel-a'>
>> <auth username='libvirt'>
>> <secret type='ceph'
>> uuid='3f88b59a-d85b-4b47-946d-a4c4cce3fec0'/>
>> </auth>
>> </source>
>> <backingStore/>
>> <target dev='xvda' bus='xen'/>
>> </disk>
>> <controller type='xenbus' index='0'/>
>> <interface type='bridge'>
>> <mac address='00:16:3e:a3:ba:9f'/>
>> <source bridge='br0'/>
>> <target dev='vif7.0'/>
>> </interface>
>> <console type='pty' tty='/dev/pts/0'>
>> <source path='/dev/pts/0'/>
>> <target type='xen' port='0'/>
>> </console>
>> <input type='mouse' bus='xen'/>
>> <input type='keyboard' bus='xen'/>
>> <memballoon model='xen'/>
>> </devices>
>> </domain>
>>
>> The virtual guest starts, but then sits in the Grub 2 boot prompt
>> because the disk is not available. The qemu log shows:
>>
>> qemu-system-i386: failed to create 'qdisk' device '51712': failed to
>> create drive: Could not open
>> 'rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\;none':
>> No such file or directory
>> qemu-system-i386: failed to create 'qdisk' device '51712': failed to
>> create drive: Could not open
>> 'rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\;none':
>> No such file or directory
>> qemu-system-i386: failed to create 'qdisk' device '51712': failed to
>> create drive: Could not open
>> 'rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\;none':
>> No such file or directory
>> qemu-system-i386: failed to create 'qdisk' device '51712': failed to
>> create drive: Could not open
>> 'rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\;none':
>> No such file or directory
>> ...
>>
>> I tried to strace libvirtd. The results are as follows:
>>
>> On openSUSE 15.2 with libvirt 6.0.0 (not working), we see this:
>>
>> 1682 openat(AT_FDCWD,
>> "rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\\;none",
>> O_RDWR|O_CLOEXEC) = -1 ENOENT (No such file or directory)
>> 1682 rt_sigprocmask(SIG_BLOCK, NULL, [BUS USR1 ALRM IO], 8) = 0
>> 1682 mmap(NULL, 1052672, PROT_READ|PROT_WRITE,
>> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f538aefd000
>> 1682 mprotect(0x7f538aefd000, 4096, PROT_NONE <unfinished ...>
>> 1682 <... mprotect resumed>) = 0
>> 1682 rt_sigprocmask(SIG_SETMASK, [BUS USR1 ALRM IO], [BUS USR1 ALRM
>> IO], 8) = 0
>> 1682 rt_sigprocmask(SIG_BLOCK, NULL, [BUS USR1 ALRM IO], 8) = 0
>> 1682 mmap(NULL, 1052672, PROT_READ|PROT_WRITE,
>> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 <unfinished ...>
>> 1682 <... mmap resumed>) = 0x7f538adfc000
>> 1682 mprotect(0x7f538adfc000, 4096, PROT_NONE <unfinished ...>
>> 1682 <... mprotect resumed>) = 0
>> 1682 rt_sigprocmask(SIG_SETMASK, [BUS USR1 ALRM IO], <unfinished ...>
>> 1682 <... rt_sigprocmask resumed>[BUS USR1 ALRM IO], 8) = 0
>> 1682 write(2, "qemu-system-i386: failed to crea"..., 232 <unfinished
>> ...>
>> ...
>>
>> On the other hand, on openSUSE 15.1 with libvirt 5.1.0 (working), we
>> see this:
>>
>> 16267 openat(AT_FDCWD,
>> "rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\\;none",
>> O_RDONLY|O_NONBLOCK|O_CLOEXEC) = -1 ENOENT (No such file or directory)
>> 16267
>> stat("rbd:guests/mytwotel-a:id=libvirt:key=AQCAUpBbrcaiFxAA1sztXPbkdW1L54i99oUpyA==:auth_supported=cephx\\;none",
>> 0x7fff83e2e2b0) = -1 ENOENT (No such file or directory)
>> 16267 access("/usr/lib64/qemu/block-rbd.so", F_OK) = 0
>> 16267 stat("/usr/lib64/qemu/block-rbd.so", {st_mode=S_IFREG|0644,
>> st_size=27448, ...}) = 0
>> 16267 openat(AT_FDCWD, "/usr/lib64/qemu/block-rbd.so",
>> O_RDONLY|O_CLOEXEC) = 60
>> 16267 read(60, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0
>> &\0\0\0\0\0\0"..., 832) = 832
>> 16267 fstat(60, {st_mode=S_IFREG|0644, st_size=27448, ...}) = 0
>> 16267 mmap(NULL, 2122672, PROT_READ|PROT_EXEC,
>> MAP_PRIVATE|MAP_DENYWRITE, 60, 0) = 0x7f8e6030f000
>> 16267 mprotect(0x7f8e60315000, 2093056, PROT_NONE) = 0
>> 16267 mmap(0x7f8e60514000, 8192, PROT_READ|PROT_WRITE,
>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 60, 0x5000) = 0x7f8e60514000
>> 16267 close(60) = 0
>> ...
>>
>> Note that the latter opens "/usr/lib64/qemu/block-rbd.so". That
>> library *does* exist on openSUSE 15.2 but it doesn't seem to be used.
>
> It smells like a bug in the Leap 15.2 qemu package. Or perhaps in
> xen's libxl library, which controls the qemu processes used by VMs.
> I'd suggest entering a bug at bugzilla.opensuse.org.
>
>> I've tried to update libvirt to a newer version using the Open Build
>> Service repos, but then ran into so many conflicting versions that I
>> gave up.
>>
>> At this point I'm stuck. Does anyone have an idea I can try?
>
> We might be able to eliminate libxl by comparing the interaction with
> qemu between the working and non-working setups. E.g. enable debug in
> /etc/libvirt/libvirtd.conf, restart libvirtd, start the offending VM,
> then look in /var/log/libvirt/libxl/libxl-driver.log for the qemu
> command line created by libxl and qmp commands sent to qemu. If libxl
> prepares qemu similarly between the two, then the issue is likely in
> the qemu package.
>
> Regards,
> Jim
>
More information about the libvirt-users
mailing list