Logo Informatizzati

Grazie al bellissimo articolo trovato qui ho finalmente risolto un problema che durava da molto tempo.

La gestione di ZFS con Docker fa cag.re! Spesso e (mal) volentieri lascia dataset orfani e ti ritrovi con un sacco di mount con nomi tipo
"zfs-volume/dataset/2d19800174e8e91eb47c9e823139c45b3bc3192e297736e66918ccb1d1595662"
sparpagliati per il sistema.

Avendo il filesystem ZFS in teoria non è possibile forzare docker a utilizzare lo storage driver "overlay2". Anche forzando l'opzione in /etc/docker/daemon.json succederà che andrà in errore.

La furbata allora sta nel creare un volume ZFS (ZVOL) e formattarlo ext4. Dopodiché montarlo in /var/lib/docker, Docker sarà felice e io pure :-)

Procedura:

- Se avevi già container/volumi/immagini devi eliminare tutto, dovrai ricrearli successivamente

- Stoppa docker:

service docker stop

- Crea il volume ZFS:

zfs create -V 30gb tank/docker

(scegli la dimensione che preferisci e utilizza il nome di volume/dataset adatto al tuo sistema)

- Verifica qual'è il nome del device creato:

ls -l /dev/zvol/tank/docker

(sostituisci tank/docker con il volume/dataset che hai utilizzato nel comando precedente). Se non hai altri volumi sarà zd0.

- Crea una partizione (una sola che occupi l'intero volume):

cfdisk (o fdisk) /dev/zd0

- Formattala:

mkfs.ext4 /dev/zd0p1

- Sposta il contenuto di /var/lib/docker altrove:

rsync -aH /var/lib/docker /var/lib/docker.bk

- Inserisci in /etc/fstab il mount (per esempio):

UUID=44a5d02b-c249-4384-96a5-1759210d364d    /var/lib/docker    ext4    discard,noatime    0    0

- Monta il volume:

mount /var/lib/docker

- Sposta il contenuto della directory docker nuovamente in /var/lib/docker:

rsync -aH /var/lib/docker.bk /var/lib/docker

- Elimina la directory /var/lib/docker/zfs:

rm -r /var/lib/docker/zfs

- Avvia Docker:

service docker start

- Se è andato tutto bene elimina la directory /var/lib/docker.bk:

rm -r /var/lib/docker.bk

Bau.

Commenti offerti da CComment