Marvin Pascale

[B.Log]

31 Maggio 2023

Systemd automount

systemd 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: