aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/containers
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-05-29 11:18:13 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-05-29 11:18:13 +0100
commitaabcdc206246aa935790908f2ab7e7edcc88b3b9 (patch)
treefd66113b3403c07fc7281342d1b25ed77f911a44 /dot_config/containers
parent1ab5e40fc75e293b87f645fc2de08e0a0fe3d50f (diff)
downloaddotfiles-aabcdc206246aa935790908f2ab7e7edcc88b3b9.tar.gz
dotfiles-aabcdc206246aa935790908f2ab7e7edcc88b3b9.tar.bz2
dotfiles-aabcdc206246aa935790908f2ab7e7edcc88b3b9.zip
feat(podman): switch rootless storage driver to btrfs
fuse-overlayfs is dog-slow on `podman commit` (and noticeably slower than native overlay/btrfs for layer extraction in general) because every read/write round-trips through a FUSE daemon. The kernel overlay driver does not support btrfs as a lowerdir, so on a btrfs root fs the choices were: - fuse-overlayfs (slow, but works) - btrfs (native subvolume + CoW snapshot per layer; fast) Switching graph drivers is destructive — the on-disk layout is incompatible, so a one-time `podman system reset --force` is required. A migration helper script lives at the repo root (gitignored, chezmoiignored) that snapshots stateful containers, exports images and volumes, runs the reset, and restores everything on the new driver. Drops fuse-overlayfs from meta/base.txt — no longer needed and pulls in libfuse3 transitively for nothing. (Flatpak still depends on it for its own sandbox; pacman won't actually uninstall the binary while flatpak is around — that's fine.) VM (nix/vm.nix) is unaffected: it sets its own storage.conf inline with driver=overlay since its rootfs is ext4.
Diffstat (limited to 'dot_config/containers')
-rw-r--r--dot_config/containers/storage.conf17
1 files changed, 17 insertions, 0 deletions
diff --git a/dot_config/containers/storage.conf b/dot_config/containers/storage.conf
new file mode 100644
index 0000000..3ba957e
--- /dev/null
+++ b/dot_config/containers/storage.conf
@@ -0,0 +1,17 @@
+# Rootless podman storage configuration.
+#
+# Uses the native kernel btrfs graph driver — much faster than fuse-overlayfs
+# (especially `podman commit`) because layers are real btrfs subvolumes with
+# CoW snapshots, no FUSE userspace round-trip.
+#
+# Switching driver requires a one-time `podman system reset --force`; the
+# overlay/fuse-overlay on-disk layout is incompatible. See the migration
+# helper at the dotfiles repo root (migrate-podman-to-btrfs.sh).
+#
+# graphroot/runroot left at defaults:
+# graphroot = $XDG_DATA_HOME/containers/storage
+# runroot = $XDG_RUNTIME_DIR/containers
+# both are on btrfs in this setup (root fs is btrfs).
+
+[storage]
+driver = "btrfs"