btrfs zvol for systemd-container
btrfs zvol for use with systemd-container
avoid weird bugs due to machinectl unsupported fs
Wanting to use systemd-container, but you're running zfs? Make sure
/var/lib/machines has a supported filesystem mounted - xfs or btrfs.
systemd-importd had known bug that was fixed where would not rename container image on pull and would fail as a result. See here and here
Although issue was resolved in systemd 249, issue persists with zfs as storage filesystem. Thankfully, with zvols one can mount a supported filesystem as a workaround.
You'll basically need to be root the whole time, so
If you don't have root account, (ie ubuntu disabled by default), you can
$ sudo su or $ sudo passwd root <enter passwd 2x>, and $ su
sudo -i might work, too (unconfirmed)
- clear out
# rm -rf /var/lib/machines after backup
ubuntu_UUID in dataset name, yours will be different.
$ zfs list
- make zvol:
# zfs create -v 100G -s -o volblocksize=1M -o compress=zstd rpool/ROOT/ubuntu_pd3ehl/var/lib/machines
- create gpt partition structure:
# fdisk /dev/zvol/rpool/ROOT/ubuntu_pd3ehl/var/lib/machines <keys> g, w <exits>
- create partition - full size (in this case, 100G):
# fdisk /dev/zvol/rpool/ROOT/ubuntu_pd3ehl/var/lib/machines n <enter> <enter> <enter> w <exits>
- mount against emptied
# mount -t /dev/zvol/rpool/ROOT/ubuntu_pd3ehl/var/lib/machines-part1 /var/lib/machines
- create filesystem:
# mkfs.btrfs /dev/zvol/rpool/ROOT/ubuntu_pd3ehl/var/lib/machines-part1
- add to
# echo '/dev/zvol/rpool/ROOT/ubuntu_pd3ehl/var/lib/machines-part1 /var/lib/machines btrfs space_cache=v2,noatime,compress=zstd 0 0' >> /etc/fstab
Note: sometimes adding zvols to fstab prevents boot, if you end up in recovery on reboot, enter password, edit
/etc/fstab, comment out this line and exit . You'll do fine.
If you'd rather run a systemd unit to mount your zvol at boot, there's a walk-through here (as well as a slightly different take on how to set up the zvol): https://gist.github.com/zman0900/b2196a5168bbf2c0b14f094a8ca84ab1