Description of problem: LXC container with idmap and device/filesystem type='block' can't started with error " Failed to mount device /dev/dm-X, Operation not permitted" Version-Release number of selected component (if applicable): 1.3.2-1.el7.x86_64 How reproducible: Anytime Steps to Reproduce: 1. create LVM in VG data # lvcreate -L10G -n test-idmap02 data 2. format as xfs or ext4: # mkfs.xfs /dev/data/test-idmap02 3. create container with virt-install #/bin/virt-install --connect lxc:/// --name test-idmap-2 --memory 2048 --vcpu 1 --filesystem /dev/data/test-idmap02,/,type=block \ --filesystem 524288,/dev/shm,type=ram \ --noautoconsole --noreboot 4. place linux image on /dev/data/test-idmap02 5. Check that container started, stop it after 6. Modify configuration as below: <domain type='lxc'> <name>test-idmap02</name> <uuid>bf320dd1-b895-4d35-9745-0b9921327c68</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <memtune> <hard_limit unit='KiB'>1048576</hard_limit> <soft_limit unit='KiB'>1048576</soft_limit> <swap_hard_limit unit='KiB'>2097152</swap_hard_limit> </memtune> <vcpu placement='static'>1</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64'>exe</type> <init>/sbin/init</init> </os> <idmap> <uid start='0' target='0' count='1000'/> <uid start='1000' target='65535' count='4096'/> <gid start='0' target='0' count='1000'/> <gid start='1000' target='65535' count='4096'/> </idmap> <features> <privnet/> <capabilities policy='allow'> <audit_control state='on'/> <audit_write state='on'/> <block_suspend state='on'/> <chown state='on'/> <dac_override state='on'/> <dac_read_search state='on'/> <fowner state='on'/> <fsetid state='on'/> <ipc_lock state='on'/> <ipc_owner state='on'/> <kill state='on'/> <lease state='on'/> <linux_immutable state='on'/> <mac_admin state='on'/> <mac_override state='on'/> <mknod state='on'/> <net_admin state='on'/> <net_bind_service state='on'/> <net_broadcast state='on'/> <net_raw state='on'/> <setgid state='on'/> <setfcap state='on'/> <setpcap state='on'/> <setuid state='on'/> <sys_admin state='on'/> <sys_boot state='on'/> <sys_chroot state='on'/> <sys_module state='on'/> <sys_nice state='on'/> <sys_pacct state='on'/> <sys_ptrace state='on'/> <sys_rawio state='on'/> <sys_resource state='on'/> <sys_time state='on'/> <sys_tty_config state='on'/> <syslog state='on'/> <wake_alarm state='on'/> </capabilities> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/libvirt_lxc</emulator> <filesystem type='block' accessmode='passthrough'> <source dev='/dev/data/test-idmap02'/> <target dir='/'/> </filesystem> <filesystem type='ram' accessmode='passthrough'> <source usage='524288' units='KiB'/> <target dir='/dev/shm'/> </filesystem> <console type='pty'> <target type='lxc' port='0'/> </console> </devices> </domain> 7. try start container again, get error: # virsh start test-idmap02 error: Failed to start domain test-idmap02 error: internal error: guest failed to start: Failed to mount device /dev/dm-4 to /var/run/libvirt/lxc/test-idmap02.root as xfs: Operation not permitted Actual results: error: Failed to start domain test-idmap02 error: internal error: guest failed to start: Failed to mount device /dev/dm-4 to /var/run/libvirt/lxc/test-idmap02.root as xfs: Operation not permitted Expected results: Domain test-idmap02 started Additional info: Look like capabilities not applied for libvirt process: [root@node01 ~]# unshare -U -f -r [root@node01 ~]# id uid=0(root) gid=0(root) groups=0(root) [root@node01 ~]# mount /dev/data/test-idmap02 /mnt mount: permission denied
Container start if remove mount operation. mount as root /dev/data/idmap-test02 to /run/libvirt/lxc/idmap-test02.root and change container config in such way: <devices> ... <filesystem type='mount' accessmode='passthrough'> <source dir='/run/libvirt/lxc/idmap-test02.root'/> <target dir='/'/> </filesystem>
*** Bug 1481816 has been marked as a duplicate of this bug. ***
Thank you for reporting this issue to the libvirt project. Unfortunately we have been unable to resolve this issue due to insufficient maintainer capacity and it will now be closed. This is not a reflection on the possible validity of the issue, merely the lack of resources to investigate and address it, for which we apologise. If you none the less feel the issue is still important, you may choose to report it again at the new project issue tracker https://gitlab.com/libvirt/libvirt/-/issues The project also welcomes contribution from anyone who believes they can provide a solution.