# Podman storage configuration for gitea-runner user # ================================================== # # PREREQUISITE: /var/lib/gitea must be a separate Btrfs mount point. # This ensures all runner workloads (container images, layers, build cache) # stay on the Btrfs partition, isolated from the system root filesystem. # # Example /etc/fstab entry (recommended mount options for CI workloads): # /dev/sdXN /var/lib/gitea btrfs noatime,compress=zstd:1,space_cache=v2,autodefrag,discard=async,commit=120 0 0 # # Mount option breakdown: # noatime - Skip access time updates on reads, reduces write I/O # compress=zstd:1 - Transparent compression; level 1 is fast with good ratio, # can reduce container image storage by up to 50% # space_cache=v2 - Faster free-space tracking for frequent allocate/delete # cycles typical of container image churn # autodefrag - Background defrag for small random writes (build artifacts) # discard=async - Async TRIM for SSDs (omit this for spinning disks) # commit=120 - Flush data every 120s instead of 30s — reduces write # overhead; acceptable for CI data that can be rebuilt # # WHY BTRFS DRIVER? # - Fast snapshots: Gitea runners frequently pull and remove images. The btrfs # driver uses subvolumes, which is faster than OverlayFS on XFS. # - Layer deduplication: When multiple runners use similar base images (e.g. # node, go), Btrfs deduplicates them automatically, saving disk space. # - Resource isolation: Since /var/lib/gitea is a separate mount, heavy runner # I/O won't slow down the system root on XFS. # # INSTALLATION: # This file is installed to: # /var/lib/gitea/runners/.config/containers/storage.conf # Podman reads it automatically when running as the gitea-runner user. # # INITIALIZATION (run as gitea-runner after install): # podman system reset # podman info | grep -E "store|graphRoot" # Verify: storage.driver must be "btrfs" and graphRoot must point # inside /var/lib/gitea/runners/ # # All values below are commented out as examples. Uncomment and adjust # to match your environment. # [storage] # driver = "btrfs" # # # Podman will automatically create subdirectories here # graphroot = "/var/lib/gitea/runners/.local/share/containers/storage" # [storage.options] # # Optional: add quotas here if you want to limit disk space for runners