Specifying a zero size for filesystem lets LXC backend use the "subvol" directories rather than disk images. The latter were problematic for "pxvirt" 9.0.10-2 on Raspberry/trixie with ZFS (there raw ext4 images are okay for direct fsck/mount, until PVE mounts them and the system locks up with timed-out processes).
GUI may forbid specifying 0 as disk size, CLI to the rescue then.
Thanks to https://forum.proxmox.com/threads/proxmox-4-lxc-chroot-instead-of-raw-images.22881/ for CLI examples:
pct create 110 /var/lib/vz/template/cache/ubuntu-14.04-standard_14.04-1_amd64.tar.gz -hostname servername -password 'p@ssw0rd' -rootfs local:0
Comparing two setups:
- With GUI-made container (
mpXadded manually to/etc/pve/lxc/100.confto bind-mount host dirs):
# /etc/pve/lxc/100.conf
arch: arm64
cmode: console
cores: 4
features: nesting=1
hostname: nutci-rpiv-debian-12-arm64
memory: 512
mp0: /home/abuild,mp=/home/abuild
mp1: /home/abuild/.ccache,mp=/home/abuild/.ccache
mp2: /home/abuild/.gitcache-dynamatrix,mp=/home/abuild/.gitcache-dynamatrix
mp3: /home/abuild/jenkins-nutci-rpiv-debian-12-arm64,mp=/home/abuild/jenkins-nutci-rpiv-debian-12-arm64
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:88:45:A6,type=veth
onboot: 0
ostype: debian
rootfs: local:100/vm-100-disk-0.raw,mountoptions=lazytime,size=16G
swap: 512
unprivileged: 0
- Container made with
pctCLI and just therootfscustomized per above example so far:
# /etc/pve/lxc/112.conf
arch: arm64
hostname: nutci-rpiv-debian-12-arm64
memory: 512
ostype: debian
rootfs: local:112/subvol-112-disk-0.subvol,size=0T
swap: 512
unprivileged: 1
Apparently this container is by default unprivileged, note the FS object owners:
root@rpiv:~# ls -la /var/lib/vz/images/112/subvol-112-disk-0.subvol/
total 76
drwxr-xr-x 17 100000 100000 20 Nov 29 12:03 .
drwxr----- 3 root root 3 Nov 29 12:02 ..
lrwxrwxrwx 1 100000 100000 7 Nov 24 2023 bin -> usr/bin
drwxr-xr-x 2 100000 100000 2 Sep 29 2023 boot
drwxr-xr-x 2 100000 100000 2 Nov 24 2023 dev
drwxr-xr-x 45 100000 100000 98 Nov 29 12:03 etc
drwxr-xr-x 2 100000 100000 2 Sep 29 2023 home
lrwxrwxrwx 1 100000 100000 7 Nov 24 2023 lib -> usr/lib
drwxr-xr-x 2 100000 100000 2 Nov 24 2023 media
drwxr-xr-x 2 100000 100000 2 Nov 24 2023 mnt
drwxr-xr-x 2 100000 100000 2 Nov 24 2023 opt
drwxr-xr-x 2 100000 100000 2 Sep 29 2023 proc
drwx------ 3 100000 100000 5 Nov 24 2023 root
drwxr-xr-x 2 100000 100000 2 Nov 24 2023 run
lrwxrwxrwx 1 100000 100000 8 Nov 24 2023 sbin -> usr/sbin
drwxr-xr-x 2 100000 100000 2 Nov 24 2023 srv
drwxr-xr-x 2 100000 100000 2 Sep 29 2023 sys
drwxrwxrwt 8 100000 100000 8 Nov 29 12:03 tmp
drwxr-xr-x 11 100000 100000 11 Nov 24 2023 usr
drwxr-xr-x 11 100000 100000 13 Nov 24 2023 var
This is not per se integrated with ZFS on (Raspberry/pxvirt) host:
root@rpiv:~# df -k /var/lib/vz/images/112/subvol-112-disk-0.subvol/
Filesystem 1K-blocks Used Available Use% Mounted on
rpool/PVE/vz/images 459933184 433152 459500032 1% /var/lib/vz/images
...but the sub-tree of datasets can be made. This is also not an issue with less complicated Raspberry hosts without NVMe and ZFS.
For comparison, on amd64 host I see the subvols (and dirs instead of raw images) used out of the box, apparently a ZFS-aware storage link was configured there:
root@pve:~# cat /etc/pve/lxc/100.conf
#mp4%3A /dev/hidraw3,mp=/dev/hidraw3
arch: amd64
cores: 12
features: nesting=1
hostname: nutci-debian-11-amd64
memory: 4096
mp0: /export/home/abuild,mp=/home/abuild
mp1: /export/home/abuild/.ccache,mp=/home/abuild/.ccache
mp2: /export/home/abuild/.gitcache-dynamatrix,mp=/home/abuild/.gitcache-dynamatrix
mp3: /export/home/abuild/jenkins-nutci-debian-11-amd64,mp=/home/abuild/jenkins-nutci-debian-11-amd64
net0: name=eth0,bridge=vmbr0,hwaddr=4E:34:ED:F0:D9:B3,type=veth
onboot: 1
ostype: debian
rootfs: local-zfs:subvol-100-disk-0,mountoptions=noatime,replicate=0,size=16G
swap: 512
unprivileged: 0
UPDATE: Go to "Folder view" (left column), select Datacenter itself, and Storage section there - "Add": type ZFS, path e.g. rpool/PVE/vz as the store for Containers and Disk Images.