On Sun, Jul 28, 2024 at 17:31:46 +0200, Marc Haber wrote:
Hi,
this is an ongoing issue. I don't know whether I ever have addresses
this here, but it's still annoying.
I am using debian unstable, libvirt 10.5.0, virt-manager 4.1.0, qemu
9.0.2. I work through virt-manager, rarely I use virsh.
I regularly configure virtual disks that are located on a luks-encrypted
LVM volume. when unlocked, the block devices appears as /dev/mapper/foo
and is a symlink to a ../dm-xx node with xx being a random number,
../dm-xx being a regular block device.
To facilitate this, I have defined a storage pool with this XML:
<pool type="dir">
<name>mapper</name>
<uuid></uuid>
<capacity unit="bytes">24598757376</capacity>
<allocation unit="bytes">0</allocation>
<available unit="bytes">24598757376</available>
<source>
</source>
<target>
<path>/dev/mapper</path>
<permissions>
<mode>0755</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
This is necessary as the storage type "LVM volume group" now insists on
a volume group name, and the DM mappings created by LUKS dont have a
volume group name.
So looking at such configuration, when I dump a volume XML of a volume I
get:
$ virsh vol-dumpxml --pool mapperdir angien-root
<volume type='file'>
<name>angien-root</name>
<key>/dev/mapper/angien-root</key>
<capacity unit='bytes'>118111600640</capacity>
[...]
As you can see the volume type is 'file' instead of what you'd normally
expect ('block).
When I add a disk to a VM from this storage pool, it generates the
XML:
<disk type="file" device="disk">
<driver name="qemu" type="raw"/>
<source file="/dev/mapper/wintest"/>
<target dev="vda" bus="virtio"/>
<address type="pci" domain="0x0000" bus="0x05"
slot="0x00" function="0x0"/>
</disk>
Based on the above that is most likely expected as it's reported as
'file'.
qemu won't start with this settings:
error: Failed to start domain 'win11test'
error: internal error: QEMU unexpectedly closed the monitor (vm='win11test'):
2024-07-28T15:20:25.250387Z qemu-system-x86_64: -blockdev
{"driver":"file","filename":"/dev/mapper/wintest","node-name":"libvirt-1-storage","read-only":false}:
'file' driver requires '/dev/mapper/wintest' to be a regular file
Changing the XML to
<disk type="block" device="disk">
<driver name="qemu" type="raw"/>
<source dev="/dev/mapper/wintest"/>
<target dev="vda" bus="virtio"/>
<address type="pci" domain="0x0000" bus="0x05"
slot="0x00" function="0x0"/>
</disk>
(note type="block" and "source dev")
makes the VM work.
Yup, block devices must use the appropriate type.
Can virt-manager somehow be coaxed into generating XML that works here?
I didn't look into virt-manager code, but I can see that the libvirt
type returned in such pool type is wrong, so it can't really make a
better decision.
If not, is this a virt-manager issue
It looks like a libvirt issue for now, or a combination. Feel free to
open appropriate issues in the upstream tracker.
or should qemu just accept
type="file" and "source file")?
No. You must use the proper type here.