====== Docker mit BTRFS als Storage ====== ===== BTRFS vorbereiten ===== Voraussetzungen: * kernel unterstützt [[lpi2::btrfs|BTRFS]] (( modinfo btrfs modprobe btrfs grep btrfs /proc/filesystems -> Sollte bei Debian, Ubuntu und SuSE ''btrfs'' ausgeben. RedHat unterstützt BTRFS nicht. )) * Paket: * Debian (ab 12): ''btrfs-progs'' * Freie Partition oder freies Logical Volume lsblk mkfs.btrfs /dev/sdaX -> UUID merken, kommt später in die ''/etc/fstab'' mount -m /dev/sdaX /mnt/btrfs cd /mnt/btrfs btrfs subvolume create $(date '+%Y%m%d')00 btrfs subvolume show $(date '+%Y%m%d')00 -> Subvolume ID merken btrfs subvolume set-default $(date '+%Y%m%d')00 ===== containerd Daten ins Docker-Verzeichnis verschieben ===== ab Docker Version 29.0 ist containerd das default Storage Backend dockerd --version docker info -f '{{ .DriverStatus }}' -> enthält: ''driver-type io.containerd.snapshotter.v1'' systemctl stop docker.socket docker.service containerd.service … root = "/var/lib/docker/containerd" … cd /var/lib mv containerd/ docker ln -s docker/containerd containerd ===== Docker Daten in BTRFS verschieben ===== systemctl stop docker.socket docker.service cd /var/lib/ du -sh docker df -h . -> ist genug Platz für ein Backup? tar -caf docker.tar.zst docker/ shopt -s dotglob rm -rf docker/* … # device during installation: /dev/sdaX UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/lib/docker btrfs rw 0 2 UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/btrfs btrfs noauto,subvol=/ 0 2 mount -av tar -xf docker.tar.zst rm docker.tar.zst mit containerd: systemctl stop docker.socket docker.service containerd.service ohne containerd: systemctl start docker.socket docker.socket ===== Snapshot erstellen ===== aktuell aktives Docker-Subvolume ermitteln: mount /mnt/btrfs cd /mnt/btrfs btrfs subvolume get-default . -> Subvolume ID merken: ''ID 472 gen 428819 top level 5 path **20xxxxxx00**'' === Container stoppen === mit containerd: systemctl stop docker.socket docker.service containerd.service ohne containerd: systemctl start docker.socket docker.socket === Snapshot erstellen === btrfs subvolume snapshot 20xxxxxx00 $(date '+%Y%m%d')01 === Container starten === mit containerd: systemctl start docker.socket docker.service containerd.service ohne containerd: systemctl start docker.socket docker.service === Starten überprüfen === watch docker ps ====== Docker mit BTRFS statt overlay ====== siehe auch https://docs.docker.com/storage/storagedriver/btrfs-driver/ { "storage-driver": "btrfs" } systemctl start docker.socket systemctl start docker.service prüfen: docker info -> ''Storage Driver: btrfs''