Skip to content

Docker Server Storage

Docker server storage can be divided into 3 buckets:

  • NVMe - fast storage for important data.
  • SSD - disposable data.
  • HDD - slow storage for important data.

NVMe

Fast storage, ideally on high endurance NVMe, ideally in a ZFS mirror with snapshots.

Contains:

  • Host OS
  • Container config bind mounts
  • Databases
  • Small data that benefits from fast storage

SSD

Cheap SSD, disposable data that shouldn't reduce the lifespan of the NVMe and doesn't require ZFS redundancy or snapshots.

Contains:

  • Caches
  • Logs
  • Media transcodes
  • Docker images and image volumes, change data-root under /etc/docker/daemon.json
    {
            "data-root": "/mnt/cache/docker",
            "storage-driver": "overlay2"
    }
    

HDD

Slow storage, ideally in a ZFS mirror/raidz with snapshots.

Contains:

  • Media
  • Photos
  • Documents
  • Large data
  • Backup of NVMe data

Investigating Writes

Install fatrace

sudo apt install fatrace

Record writes for 60 seconds

sudo fatrace -f W -o /tmp/fatrace -s 60

Sort by count

sort /tmp/fatrace | uniq -c | sort -n -r | more

Example output

    271 beam.smp(65906): W   /home/user/docker-data/pinchflat/db/pinchflat.db-wal
    166 nginx(270970): W   /home/user/docker-data/swag/log/nginx/access.log
     60 Radarr(67147): W   /home/user/docker-data/arr/radarr/radarr.db-wal
     57 Prowlarr(67150): W   /home/user/docker-data/arr/prowlarr/prowlarr.db-wal
     46 fail2ban-client(68766): W   /home/user/docker-data/swag/fail2ban/fail2ban.sqlite3
     45 Radarr(67147): W   /home/user/docker-data/arr/radarr/radarr.db-shm
     40 Lidarr(67160): W   /home/user/docker-data/arr/lidarr/lidarr.db-wal
     40 dockerd(57396): W   /mnt/cache/docker/containers/uuid/uuid-json.log
     39 Prowlarr(67150): W   /home/user/docker-data/arr/prowlarr/prowlarr.db-shm
     33 Radarr(67147): W   /home/user/docker-data/arr/radarr/radarr.db
     32 postgres(61541): W   /home/user/docker-data/atuin/db/pg_stat_tmp/db_16384.tmp
     32 dockerd(57396): W   /mnt/cache/docker/containers/uuid/uuid-json.log
     28 Prowlarr(67150): W   /home/user/docker-data/arr/prowlarr/logs.db-wal
     26 Sonarr(67148): W   /home/user/docker-data/arr/sonarr/logs.db-wal
     26 Radarr(67147): W   /home/user/docker-data/arr/radarr/logs.db-shm
     25 Prowlarr(67150): W   /home/user/docker-data/arr/prowlarr/prowlarr.db
     19 Radarr(67147): CW  /home/user/docker-data/arr/radarr/radarr.db-wal
     17 Radarr(67147): W   /home/user/docker-data/arr/radarr/logs.db-wal
     17 Radarr(67147): W   /home/user/docker-data/arr/radarr/logs.db
     17 Radarr(67147): CW  /home/user/docker-data/arr/radarr/radarr.db
     16 beszel(61939): W   /home/user/docker-data/beszel/data.db-wal