diff options
| author | 2026-05-29 11:18:13 +0100 | |
|---|---|---|
| committer | 2026-05-29 11:18:13 +0100 | |
| commit | aabcdc206246aa935790908f2ab7e7edcc88b3b9 (patch) | |
| tree | fd66113b3403c07fc7281342d1b25ed77f911a44 | |
| parent | 1ab5e40fc75e293b87f645fc2de08e0a0fe3d50f (diff) | |
| download | dotfiles-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.
| -rw-r--r-- | .chezmoiignore | 1 | ||||
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | dot_config/containers/storage.conf | 17 | ||||
| -rw-r--r-- | meta/base.txt | 4 |
4 files changed, 19 insertions, 4 deletions
diff --git a/.chezmoiignore b/.chezmoiignore index 34be6e8..99af635 100644 --- a/.chezmoiignore +++ b/.chezmoiignore @@ -1,6 +1,7 @@ KEYBINDS.md README.md bootstrap.sh +migrate-podman-to-btrfs.sh meta/ systemd-units/ etc/ @@ -3,3 +3,4 @@ .ruff_cache/ node_modules/ *.swp +/migrate-podman-to-btrfs.sh 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" diff --git a/meta/base.txt b/meta/base.txt index 1cb96dc..1f7cdd8 100644 --- a/meta/base.txt +++ b/meta/base.txt @@ -75,10 +75,6 @@ nix perf # links against running kernel ABI; must match kernel pkg podman-compose podman-docker -fuse-overlayfs # podman rootless storage driver on btrfs (kernel overlayfs - # doesn't support btrfs as a lower dir; podman falls back to - # vfs which is unusable). ~10-30% slower than native overlay - # but unavoidable as long as ~/.local/share/containers is on btrfs. # --- sound --- alsa-utils |
