Systemd automount
Siamo partiti da fstab, ed era un mondo in cui il minimo errore era pagato con un mancato avvio del sistema. Poi un giorno è arrivato systemd e, insieme a tantissime polemiche, ha portato un nuovo modo di gestire i servizi, i log, …e anche i mount.
Montare una share
Prenderemo come esempio due istanze linux: una esporrà una share nfs e l’altra dovrà montarla in /mnt/nfs.
Come primo test stupido proviamo a montare la share manualmente
# mount 10.0.99.101:/var/nfs /mnt/nfs/
# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 3858948 0 3858948 0% /dev
tmpfs tmpfs 3877508 0 3877508 0% /dev/shm
tmpfs tmpfs 3877508 16984 3860524 1% /run
tmpfs tmpfs 3877508 0 3877508 0% /sys/fs/cgroup
/dev/sda1 ext4 157347324 1320244 149579268 1% /
/dev/sda14 vfat 65390 5864 59526 9% /boot/efi
tmpfs tmpfs 775500 0 775500 0% /run/user/0
10.0.99.101:/var/nfs nfs4 157347840 1238016 149661696 1% /mnt/nfs
così da escludere problemi di configurazione, comunicazione, ecc.
Ora sfruttiamo uno strumento fornito da systemd invece del caro e vecchio fstab
creiamo il file /etc/systemd/system/mnt-nfs.mount
[Unit]
Description=Mount NFS share
After=network-online.target
Wants=network-online.target
[Mount]
What=10.0.99.101:/var/nfs
Where=/mnt/nfs
Options=defaults
Type=nfs
TimeoutSec=60
[Install]
WantedBy=remote-fs.target
e lo testiamo
# umount /mnt/nfs
# systemctl daemon-reload
# systemctl start mnt-nfs.mount
# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 3858948 0 3858948 0% /dev
tmpfs tmpfs 3877508 0 3877508 0% /dev/shm
tmpfs tmpfs 3877508 16984 3860524 1% /run
tmpfs tmpfs 3877508 0 3877508 0% /sys/fs/cgroup
/dev/sda1 ext4 157347324 1320256 149579256 1% /
/dev/sda14 vfat 65390 5864 59526 9% /boot/efi
tmpfs tmpfs 775500 0 775500 0% /run/user/0
10.0.99.101:/var/nfs nfs4 157347840 1238016 149661696 1% /mnt/nfs
Non sto qui a ribadire quale siano i vantaggi del secondo rispetto al primo e viceversa.
E se non volessi pensarci più?
Una utilissima funzionalità offerta da questa modalità è l’automount. Impostando un automount, systemd si occuperà di montare il file systemd solo nel momento un cui questo sarà realmente utile (es: quando un utente o un programma deve accedere a quei dati).
Creiamo il file /etc/systemd/system/mnt-nfs.automount
[Unit]
Description=AutoMount NFS share
[Automount]
Where=/mnt/nfs
TimeoutIdleSec=60s
[Install]
WantedBy=multi-user.target
e testiamo il nuovo approccio
# systemctl daemon-reload
# systemctl stop mnt-nfs.mount
# systemctl start mnt-nfs.automount
# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 3858948 0 3858948 0% /dev
tmpfs tmpfs 3877508 0 3877508 0% /dev/shm
tmpfs tmpfs 3877508 16980 3860528 1% /run
tmpfs tmpfs 3877508 0 3877508 0% /sys/fs/cgroup
/dev/sda1 ext4 157347324 1320016 149579496 1% /
/dev/sda14 vfat 65390 5864 59526 9% /boot/efi
tmpfs tmpfs 775500 0 775500 0% /run/user/0
# ls /mnt/nfs/
# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 3858948 0 3858948 0% /dev
tmpfs tmpfs 3877508 0 3877508 0% /dev/shm
tmpfs tmpfs 3877508 16984 3860524 1% /run
tmpfs tmpfs 3877508 0 3877508 0% /sys/fs/cgroup
/dev/sda1 ext4 157347324 1320016 149579496 1% /
/dev/sda14 vfat 65390 5864 59526 9% /boot/efi
tmpfs tmpfs 775500 0 775500 0% /run/user/0
10.0.99.101:/var/nfs nfs4 157347840 1238016 149662720 1% /mnt/nfs
Cosa è successo?
Semplificando molto la faccenda, possiamo dire che finché il sistema non ha percepito che l’utente non avesse bisogno di accedere a quei dati non si è preoccupato di montare quel preciso mount point. Invece, nell’istante preciso in cui questo accade, il sistema si adopera per fornire quelle risorse nel più breve tempo possibile.
Conclusioni
Se non hai ancora dimestichezza con systemd mount; ti consiglio di approfondire, in quanto la gestione dei mount point diventa un po’ più amichevole e tollerante agli errori e alle indisponibilità.
Automount fornisce un ulteriore livello di flessibilità in quanto il mount verrà eseguito (o almeno ci proverà) solo nel momento in cui questo è realmente necessario, evitando così di eseguire il mount di share remote in momenti errati del boot e in caso di errore questa azione verrà ritentata ad ogni richiesta successiva. Un aspetto poco noto è che, in caso di inutilizzo prolungato, la risorsa verrà smontata e questo genera un migliore utilizzo del sistema: se accediamo a dischi meccanici questi potranno andare in sleep e se invece montiamo una share di rete (nfs, sshfs, ecc), minimizzeremo il traffico.
Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.
Risorse: