Un filesystem creato non è ancora raggiungibile: va agganciato a una directory dell’albero, il mount point. Da qui in poi si lavora con tre cose — il comando mount, il file /etc/fstab e gli identificatori stabili dei volumi — più le unit di systemd, che sulle distribuzioni moderne fanno lo stesso mestiere.

mount e umount a mano

La forma da ricordare è mount -t TIPO DEVICE MOUNTPOINT.

# mount -t ext4 /dev/sdb1 /mnt/dati
# mount -t exfat -o ro,noatime /dev/sdc1 /mnt/chiavetta
# umount /mnt/dati
# umount /dev/sdb1

umount si scrive con una sola «n», ed è un errore di battitura classico. Accetta indifferentemente il device o il mount point. La directory di destinazione deve esistere, non deve per forza essere vuota, ma quello che contiene diventa invisibile finché il filesystem è montato.

Senza argomenti mount elenca tutto ciò che è montato, nel formato «SORGENTE on DESTINAZIONE type TIPO (opzioni)», e -t filtra: mount -t ext3,ntfs mostra solo quei due tipi. mount -a monta tutto ciò che è in /etc/fstab, saltando le righe marcate noauto.

Quando umount risponde target is busy qualcuno tiene un file aperto. Lo scopri con lsof seguito dal device o dal mount point: elenca comando, PID e file aperto. Chiuso quel processo, lo smontaggio passa. Se il filesystem è remoto e irraggiungibile, umount -f forza e umount -r ripiega sulla sola lettura.

Per cambiare le opzioni senza smontare c’è remount, che si usa solo da riga di comando e non in fstab:

# mount -o remount,ro /dev/sdb1

Dove si monta

/mnt è storicamente il punto per i montaggi temporanei fatti a mano, ed è ancora la scelta giusta quando monti tu. /media è la casa dei supporti rimovibili: i desktop moderni ci agganciano automaticamente chiavette e dischi esterni, di solito sotto /media/utente/etichetta. Non è una regola del kernel ma del Filesystem Hierarchy Standard, e l’esame la chiede così.

/etc/fstab: sei campi, in quest’ordine

Ogni riga descrive un filesystem con sei colonne separate da spazi.

# device        mountpoint  tipo   opzioni           dump pass
UUID=6e2c12e3-472d-4bac-a257-c49ac07f3761  /  ext4  defaults,noatime  0 1
LABEL=backup    /mnt/backup btrfs  defaults,noexec   0 2
/dev/sdb1       /dati       ext4   noauto,user       0 0

L’ordine è materia da memorizzare: device, mount point, tipo, opzioni, dump, pass. Il quinto campo dice al comando dump se includere il filesystem nei backup, quasi sempre 0. Il sesto stabilisce l’ordine del controllo al boot: 1 al root, 2 agli altri, 0 per non controllare affatto.

Le opzioni che tornano nelle domande: defaults equivale a rw,suid,dev,exec,auto,nouser,async; auto e noauto decidono se mount -a deve toccare la riga; poi ro e rw, exec e noexec, suid e nosuid, dev e nodev, sync e async. noatime evita di riscrivere l’orario di accesso a ogni lettura e fa risparmiare I/O, senza toccare l’orario di modifica.

Per i supporti rimovibili conta la coppia user e nouser. Con user un utente comune può montare quella riga, e l’opzione implica noexec, nosuid e nodev; smontare però può solo chi ha montato. users invece lascia smontare a chiunque. owner e group concedono lo stesso permesso a chi possiede il device o appartiene al suo gruppo.

UUID ed etichette al posto di /dev/sdb1

Il nome del device non è stabile: la stessa chiavetta è /dev/sdb1 su una porta e /dev/sdc1 su un’altra, e una riga di fstab che punta al device sbagliato può bloccare l’avvio. Per questo si identificano i volumi con la UUID o con l’etichetta, assegnate alla creazione del filesystem.

$ lsblk -f
$ blkid /dev/sdb1
/dev/sdb1: LABEL="backup" UUID="6e2c12e3-472d-4bac-a257-c49ac07f3761" TYPE="ext4"
# mount UUID=6e2c12e3-472d-4bac-a257-c49ac07f3761 /mnt/dati

lsblk -f dà la vista ad albero dei dispositivi a blocchi con tipo, etichetta, UUID e mount point; blkid interroga il singolo device e stampa gli stessi attributi. La sintassi UUID= e LABEL= funziona identica in fstab e sulla riga di comando: è una di quelle da saper scrivere a memoria.

Le mount unit di systemd

Dove c’è systemd /etc/fstab continua a funzionare — viene tradotto al volo in unit generate — ma puoi anche scrivere l’unit a mano in /etc/systemd/system/.

[Unit]
Description=Disco dati esterno

[Mount]
What=/dev/disk/by-uuid/56C11DCC5D2E1334
Where=/mnt/esterno
Type=ntfs
Options=defaults

[Install]
WantedBy=multi-user.target

Il vincolo che fa cadere tutti: il nome del file deve derivare dal mount point, con le barre sostituite da trattini. Per /mnt/esterno il file è mnt-esterno.mount. Poi servono systemctl daemon-reload e systemctl start mnt-esterno.mount per la sessione corrente, systemctl enable per averlo a ogni avvio. Un file gemello .automount, con la sezione di intestazione Automount e la sola direttiva Where=, monta il volume solo quando qualcuno entra nella directory. Sui sistemi ancora a SysVinit tutto questo non esiste: lì /etc/fstab è l’unica strada, ed è il motivo per cui resta il modo portabile di rispondere.