Spostare Docker su un hard disk esterno per liberare spazio nella SD principale
Spostare Docker su un hard disk esterno per liberare spazio nella SD principale
Tenativo #1 - fallito
Ho seguito queste guide:
- https://thesmarthomejourney.com/2021/02/11/moving-docker-data-to-an-external-ssd/
- https://www.howtogeek.com/devops/how-to-store-docker-images-and-containers-on-an-external-drive/
Prima di tutto vedere la lista delle periferiche: df
.
Il mio risultato:
File system 1K-blocchi Usati Disponib. Uso% Montato su
/dev/root 7303220 6419724 529608 93% /
devtmpfs 3834192 0 3834192 0% /dev
tmpfs 3999920 204 3999716 1% /dev/shm
tmpfs 1599968 1228 1598740 1% /run
tmpfs 5120 4 5116 1% /run/lock
/dev/mmcblk0p1 261108 31292 229816 12% /boot
tmpfs 799984 516 799468 1% /run/user/1000
/dev/sda1 960302096 28 911447644 1% /media/alcaprar/lacie
Ora creiamo una cartella che verrà usata per montare l’hard disk: sudo mkdir /mnt/ext-drive
Poi montiamo l’hard disk sulla nuova cartella: sudo mount /dev/sda1 /mnt/ext-drive/
. Questo è un montaggio temporaneo.
Rendiamo il montaggio permanente:
- Bisogna prima trovare lo UUID dell’hard disk:
ls -l /dev/disk/by-uuid
- Poi bisogna aggiungere a
/etc/fstab
qualcosa come questo:UUID=ef63c1cf-6d18-48c3-976d-f8590b8a662d /mnt/ext-drive ext4 defaults 0 0
Poi creare (o aggiungere se esiste già ) /etc/docker/daemon.json
e aggiungere:
{
"data-root": "/mnt/ext-drive/docker-data"
}
IMPORTANTE: Prima di andare avanti fare un backup!!! Il rischio di perdere dei dati è alto!
Copiare i dati di Docker che erano già salvati nella nuova cartella nell’hard disk: sudo rsync -aSv /var/lib/docker/ /mnt/ext-drive/docker-data
.
Copiare anche i dati dei volumi: sudo rsync -aSv ~/self-hosted/data /mnt/ext-drive/self-hosted/data
.
Far ripartire docker deamon: sudo service docker restart
.
A questo punto, se tutto è andato bene, i servizi dovrebbero ripartire ed avere tutti i dati.
Ora questo è il mio nuovo risultato di df
:
File system Dim. Usati Dispon. Uso% Montato su
/dev/root 7,0G 5,7G 1,1G 85% /
devtmpfs 3,7G 0 3,7G 0% /dev
tmpfs 3,9G 204K 3,9G 1% /dev/shm
tmpfs 1,6G 1,2M 1,6G 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
/dev/mmcblk0p1 255M 31M 225M 12% /boot
tmpfs 782M 516K 781M 1% /run/user/1000
/dev/sda1 916G 464M 869G 1% /mnt/ext-drive
Non sono proprio contento, solo un risparmio dell’8%. Guarderò un po’ meglio nei prossimi giorni.
Visto che ho spostato /var/lib/docker
nell’hard disk esterno lo posso cancellare. Questo però mi ha dato solo l’1% di spazio in più, meglio di niente.
Ora questi sono le 10 cartelli più grandi: sudo du -aBm / 2>/dev/null | sort -nr | head -n 10
6761M /
3065M /usr
1677M /home/alcaprar
1677M /home
1605M /home/alcaprar/.local/share/docker
1605M /home/alcaprar/.local/share
1605M /home/alcaprar/.local
1598M /home/alcaprar/.local/share/docker/overlay2
1524M /usr/lib
934M /var
.local/share/docker
occupa la maggior parte quindi forse è ancora in uso.
A questo punto non sono sicuro che quello che ho fatto sopra abbia funzionato. Questo commento su stackoverflow mi ha aiutato a capire che non ha funzionato. Se faccio docker info|grep "Docker Root Dir"
ricevo ancora Docker Root Dir: /home/alcaprar/.local/share/docker
che non ho quello che ho configurato.
Tentativo #2 - Fallito di nuovo
Ora proverò questa guida. Questo è quello che ho fatto:
docker-compose down
- backup della cartella
data
dove faccio il binding dei volumi - backup di
/mnt/ext-drive/docker-data
, la cartella che pensavo venisse usata da Docker:sudo rsync -aSv /mnt/ext-drive/docker-data /mnt/ext-drive/docker-data-backup
. Esudo rm -r /mnt/ext-drive/docker-data && mkdir /mnt/ext-drive/docker-data
. - cambiato la riga
ExecStart
nella configurazione del service:sudo vi /lib/systemd/system/docker.service
per essereExecStart=/usr/bin/dockerd --data-root /tmp/new-docker-root -H fd:// --containerd=/run/containerd/containerd.sock
- fatto ripartire docker lanciando
sudo systemctl daemon-reload
esudo systemctl restart docker
. Il restart è fallito e lanciandojournalctl -xe
ho visto questo erroreservice-start-limit-hit
. Ho trovato da qualche parte online che il.json
potrebbe interferire e l’ho cancellato. Rilanciando il tutto ha funzionato.
Ma ho riprovato docker info
senza fortuna. Dice ancora la vecchia cartella.
Tentativo #3
Ho deciso di ricomnciare da zero con una nuova installazione di Docker.
Prima di tutto ho cancellato tutto: https://askubuntu.com/a/1021506.
Ora ho finalmente un sacco di spazio:
File system Dim. Usati Dispon. Uso% Montato su
/dev/root 7,0G 3,8G 2,9G 58% /
devtmpfs 3,7G 0 3,7G 0% /dev
tmpfs 3,9G 408K 3,9G 1% /dev/shm
tmpfs 1,6G 1,2M 1,6G 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
/dev/mmcblk0p1 255M 31M 225M 12% /boot
tmpfs 782M 32K 782M 1% /run/user/1000
/dev/sda1 916G 2,1G 868G 1% /mnt/ext-drive
Ho usato lo script nella pagina di installazione ufficiale e questa è la situazione spazio dopo l’installazione:
File system Dim. Usati Dispon. Uso% Montato su
/dev/root 7,0G 4,2G 2,5G 63% /
devtmpfs 3,7G 0 3,7G 0% /dev
tmpfs 3,9G 408K 3,9G 1% /dev/shm
tmpfs 1,6G 1,2M 1,6G 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
/dev/mmcblk0p1 255M 31M 225M 12% /boot
tmpfs 782M 32K 782M 1% /run/user/1000
/dev/sda1 916G 2,1G 868G 1% /mnt/ext-drive
E docker info
ancora mostra quella cartella.
Questa volta voglio provare la strada del collegamento simbolico (_symlink) al posto di giocare con le configurazioni:
- Stop docker:
sudo systemctl stop docker.socket
andsudo systemctl stop docker
- Visto che è una nuova installazione non c’è niente da spostare/salvare.
- Fare il collegamento:
ln -s /mnt/ext-drive/docker-data /home/alcaprar/.local/share/docker
- Far ripartire docker. Per essere sicuro ho anche fatto un riavvio del Raspberry.
- Far ripartire il
docker-compose
e aspettare che scaricasse tutte le immagini di nuovo. Tutto funziona!
E, df -h
ora dice questo:
File system Dim. Usati Dispon. Uso% Montato su
/dev/root 7,0G 4,1G 2,6G 62% /
devtmpfs 3,7G 0 3,7G 0% /dev
tmpfs 3,9G 204K 3,9G 1% /dev/shm
tmpfs 1,6G 1,2M 1,6G 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
/dev/mmcblk0p1 255M 31M 225M 12% /boot
/dev/sda1 916G 3,7G 866G 1% /mnt/ext-drive
tmpfs 782M 512K 781M 1% /run/user/1000
Finalmente /
è rimasto uguale e /dev/sda1
ha preso 1.5 GB
!