arch: amd64
cores: 8
hostname: pwleak2
memory: 16384
net0: name=eth0,bridge=vmbr0,hwaddr=c2:ba:b7:03:6e:30,ip=dhcp,tag=15,type=veth
ostype: centos
rootfs: local:121/vm-121-disk-1.raw,size=50G
swap: 0
mp0: /dev/sdb1,mp=/mnt/esdb,backup=0
#allow block device passthrough
lxc.apparmor.profile: lxc-container-default-with-mounting
#add /dev/sdb
lxc.cgroup.devices.allow = b 8:16 rwm
#add /dev/sdb1 (with ext4 partition)
lxc.cgroup.devices.allow = b 8:17 rwm
lxc-start 121 20180319140743.877 INFO lxc_apparmor - lsm/apparmor.c:apparmor_process_label_set:238 - changed apparmor profile to lxc-container-default-with-mounting
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_init_pid"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_init_pid"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_state"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_state"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup"
lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_state"
# Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc
profile lxc-container-default-cgns flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/lxc/container-base>
# the container may never be allowed to mount devpts. If it does, it
# will remount the host's devpts. We could allow it to do it with
# the newinstance option (but, right now, we don't).
deny mount fstype=devpts,
mount fstype=cgroup -> /sys/fs/cgroup/**,
}
# Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc
profile lxc-default-with-mounting-cgns flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/lxc/container-base>
# allow standard blockdevtypes.
# The concern here is in-kernel superblock parsers bringing down the
# host with bad data. However, we continue to disallow proc, sys, securityfs,
# etc to nonstandard locations.
mount fstype=cgroup -> /sys/fs/cgroup/**,
mount fstype=ext*,
mount fstype=xfs,
mount fstype=btrfs,
}
#allow block device passthrough
lxc.apparmor.profile: lxc-default-with-mounting-cgns
#add /dev/sdb
lxc.cgroup.devices.allow = b 8:16 rwm
#add /dev/sdb1 (with ext4 partition)
lxc.cgroup.devices.allow = b 8:17 rwm
Hi,
I've got a spare physical disk (/dev/sdb) that I want to add to a container. How to do that?
-Idar
Thank you!!!Hi,
Found an answer here: https://forum.proxmox.com/threads/lxc-cannot-assign-a-block-device-to-container.23256/
But it turns out that I actually don't need to add the block device as a block device after all. The mountpoint (mpX) config option solved everything for me. That makes my lxc config file like this:
Code:arch: amd64 cores: 8 hostname: pwleak2 memory: 16384 net0: name=eth0,bridge=vmbr0,hwaddr=c2:ba:b7:03:6e:30,ip=dhcp,tag=15,type=veth ostype: centos rootfs: local:121/vm-121-disk-1.raw,size=50G swap: 0 mp0: /dev/sdb1,mp=/mnt/esdb,backup=0
..but before I got this far, I did all this:
I'm posting it here, so that if others really need to use a block device for their setup. This guide should work.
Since the "lxc.aa_profile" has been changed to "lxc.apparmor.profile" in 2.1 (https://discuss.linuxcontainers.org/t/lxc-2-1-has-been-released/487), I had to use that instead.
When adding this to my lxc config file (/etc/pve/lxc/121.conf):
..the container did not boot. I got a blank screen with nothing in it. I therefore added the "lxc.log.level: 1" option to my config file to be able to figure out what's going on in my logfile (/var/log/lxc/121.log).Code:#allow block device passthrough lxc.apparmor.profile: lxc-container-default-with-mounting #add /dev/sdb lxc.cgroup.devices.allow = b 8:16 rwm #add /dev/sdb1 (with ext4 partition) lxc.cgroup.devices.allow = b 8:17 rwm
I saw that my app armor has been loaded:
Code:lxc-start 121 20180319140743.877 INFO lxc_apparmor - lsm/apparmor.c:apparmor_process_label_set:238 - changed apparmor profile to lxc-container-default-with-mounting
I also saw repeating:
..but nothing were happening in the container. it was totally blank.Code:lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_init_pid" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_init_pid" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_state" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_state" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_cgroup" lxc-start 121 20180319140743.880 DEBUG lxc_commands - commands.c:lxc_cmd_handler:1037 - Peer has disconnected for "get_state"
I removed the lxc.apparmor.profile configline to see which apparmor is loaded by default, the result was "lxc-default-with-mounting-cgns". I checked the /etc/apparmor.d/lxc/ directory and found a file called "lxc-default-cgns", with the following content:
Code:# Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which # will source all profiles under /etc/apparmor.d/lxc profile lxc-container-default-cgns flags=(attach_disconnected,mediate_deleted) { #include <abstractions/lxc/container-base> # the container may never be allowed to mount devpts. If it does, it # will remount the host's devpts. We could allow it to do it with # the newinstance option (but, right now, we don't). deny mount fstype=devpts, mount fstype=cgroup -> /sys/fs/cgroup/**, }
The important part here is the "mount fstype=cgroup -> /sys/fs/cgroup/**" config line. I then created a copy of the "lxc-default-with-mounting" config to "lxc-default-with-mounting-cgns" and added the csgroup config like this:
Code:# Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which # will source all profiles under /etc/apparmor.d/lxc profile lxc-default-with-mounting-cgns flags=(attach_disconnected,mediate_deleted) { #include <abstractions/lxc/container-base> # allow standard blockdevtypes. # The concern here is in-kernel superblock parsers bringing down the # host with bad data. However, we continue to disallow proc, sys, securityfs, # etc to nonstandard locations. mount fstype=cgroup -> /sys/fs/cgroup/**, mount fstype=ext*, mount fstype=xfs, mount fstype=btrfs, }
When creating new apparmor files, I had to reload these files. I don't know how to do that and I was to lazy to google, but a reboot did the trick. After that I changed my lxc config by replacing the "lxc.apparmor.profile" like this:
Code:#allow block device passthrough lxc.apparmor.profile: lxc-default-with-mounting-cgns #add /dev/sdb lxc.cgroup.devices.allow = b 8:16 rwm #add /dev/sdb1 (with ext4 partition) lxc.cgroup.devices.allow = b 8:17 rwm
Finally the lxc is starting correctly! After this I can add the block device to the lxc with "lxc-device add -n 121 /dev/sdb" and "lxc-device add -n 121 /dev/sdb1" (sdb1 allready have an ext4 partition). This made it possible to mount the partition within the lxc.
To add the block device when the lxc is starting, I had to do the following; https://forum.proxmox.com/threads/lxc-cannot-assign-a-block-device-to-container.23256/#post-118361
We use essential cookies to make this site work, and optional cookies to enhance your experience.