104.3 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
104 Dispositivi, Il Filesystem Linux, Filesystem Hierarchy Standard |
Obiettivo: |
104.3 Controlla il montaggio e lo smontaggio dei filesystem |
Lezione: |
1 di 1 |
Introduzione
Fino ad ora, hai imparato come partizionare i dischi e come creare e mantenere i filesystem su di essi. Tuttavia, prima di poter accedere a un filesystem su Linux, è necessario che sia montato.
Ciò significa collegare il filesystem a un punto specifico dell’albero delle directory del sistema, chiamato punto di montaggio (mount point). I filesystem possono essere montati manualmente o automaticamente e ci sono molti modi per farlo: ne impareremo alcuni in questa lezione.
Montare e Smontare i Filesystem
Il comando per montare manualmente un filesystem si chiama mount
e la sua sintassi è:
mount -t TYPE DEVICE MOUNTPOINT
Dove:
TYPE
-
Il tipo di filesystem da montare (es. ext4, btrfs, exfat, ecc.).
DEVICE
-
Il nome della partizione contenente il filesystem (per esempio
/dev/sdb1
) MOUNTPOINT
-
Dove verrà montato il filesystem. La directory montata non deve essere vuota, sebbene debba esistere. Qualsiasi file in essa, tuttavia, sarà inaccessibile per nome mentre il filesystem è montato.
Per esempio, per montare un’unità flash USB contenente un filesystem exFAT situato su /dev/sdb1
in una directory chiamata flash
sotto la tua home directory, potresti usare:
# mount -t exfat /dev/sdb1 ~/flash/
Tip
|
Molti sistemi Linux usano la shell Bash, e su questi la tilde |
Dopo il montaggio, il contenuto del filesystem sarà accessibile nella directory ~/flash
:
$ ls -lh ~/flash/ total 469M -rwxrwxrwx 1 root root 454M jul 19 09:49 lineage-16.0-20190711-MOD-quark.zip -rwxrwxrwx 1 root root 16M jul 19 09:44 twrp-3.2.3-mod_4-quark.img
Elencare i Filesystem Montati
Se digiti solo mount
, otterrai un elenco di tutti i filesystem attualmente montati sul tuo sistema. Questo elenco può essere abbastanza esteso, perché oltre ai dischi collegati al sistema, contiene anche un certo numero di filesystem runtime in memoria che servono a vari scopi. Per filtrare l’output, puoi usare il parametro -t
per elencare solo i filesystem del tipo corrispondente, come di seguito:
# mount -t ext4 /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro)
Puoi specificare più filesystem contemporaneamente separandoli con una virgola:
# mount -t ext4,fuseblk /dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro) /dev/sdb1 on /home/carol/flash type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096) [DT_8GB]
L’output negli esempi precedenti può essere descritto nel formato:
SOURCE on TARGET type TYPE OPTIONS
Dove SOURCE
è la partizione che contiene il filesystem, TARGET
è la directory in cui è montato, TYPE
è il tipo di filesystem e OPTIONS
sono le opzioni passate al comando mount
al momento del montaggio.
Parametri Aggiuntivi della Riga di Comando
Ci sono molti parametri della riga di comando che possono essere usati con mount
. Alcuni dei più utilizzati sono:
-a
-
Monta tutti i filesystem elencati nel file
/etc/fstab
(ne parleremo nella prossima sezione). -o
o--options
-
-o
or--options
:: Passa un elenco di opzioni di montaggio separate da virgole al comando mount, tale che può cambiare il modo in cui il filesystem verrà montato. Queste opzioni saranno discusse insieme a/etc/fstab
. -r
o-ro
-
Monta il filesystem in sola lettura (read-only).
-w
or-rw
-
Monta il filesystem in modalità scrivibile (writable).
Per smontare un filesystem, usa il comando umount
, seguito dal nome del dispositivo o dal punto di montaggio. Considerando l’esempio sopra, i comandi seguenti sono intercambiabili:
# umount /dev/sdb1 # umount ~/flash
Alcuni dei parametri della riga di comando per umount
sono:
-a
-
Smonta tutti i filesystem elencati in
/etc/fstab
. -f
-
Forza lo smontaggio di un filesystem. Può essere utile se hai montato un filesystem remoto che è diventato irraggiungibile.
-r
-
Se il filesystem non può essere smontato, prova a renderlo di sola lettura.
Trattare con i File Aperti
Quando si smonta un filesystem, si può incontrare un messaggio di errore che indica che la destinazione è occupata (target is busy). Ciò accadrà se risultano aperti dei file su di esso. Tuttavia, potrebbe non essere immediatamente ovvio dove si trova un file aperto o cosa accede al filesystem.
In questi casi puoi usare il comando lsof
, seguito dal nome del dispositivo che contiene il filesystem, per vedere un elenco dei processi che vi accedono e quali file sono aperti. Per esempio:
# umount /dev/sdb1 umount: /media/carol/External_Drive: target is busy. # lsof /dev/sdb1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME evince 3135 carol 16r REG 8,17 21881768 5195 /media/carol/External_Drive/Documents/E-Books/MagPi40.pdf
COMMAND
è il nome dell’eseguibile che ha aperto il file e PID
è il numero del processo. NAME
è il nome del file che è aperto. Nell’esempio sopra, il file MagPi40.pdf
è aperto dal programma evince
(un visualizzatore di PDF). Se chiudiamo il programma, saremo in grado di smontare il filesystem.
Note
|
Prima che appaia l’output di lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete.
|
Dove Montare?
Puoi montare un filesystem ovunque tu voglia. Tuttavia, ci sono alcune buone pratiche che dovrebbero essere seguite per rendere più facile l’amministrazione del sistema.
Tradizionalmente, /mnt
era la directory in cui sarebbero stati montati tutti i dispositivi esterni e un certo numero di “punti di ancoraggio” preconfigurati per dispositivi comuni, come unità CD-ROM (/mnt/cdrom
) e floppy disk (/mnt/floppy
).
Questo è stato sostituito da /media
, che ora è il punto di montaggio predefinito per qualsiasi supporto rimovibile collegato dall’utente al sistema.(per esempio dischi esterni, unità flash USB, lettori di schede di memoria, ecc.).
Sulla maggior parte delle moderne distribuzioni Linux in ambienti desktop, i dispositivi rimovibili vengono montati automaticamente su /media/USER/LABEL
quando sono collegati al sistema, dove USER
è il nome utente e LABEL
è l’etichetta del dispositivo . Per esempio, flash USB con l’etichetta FlashDrive
collegata da john
verrebbe montata sotto /media/john/FlashDrive/
. Il modo in cui ciò viene gestito può dipendere dall’ambiente desktop utilizzato.
Detto questo, ogni volta che è necessario montare manualmente un filesystem, è buona norma farlo sotto /mnt
.
Montare un Filesystem all’Avvio
Il file /etc/fstab
contiene le descrizioni sui filesystem che devono essere montati. Questo è un file di testo, in cui ogni riga descrive un filesystem da montare, con sei campi per riga nel seguente ordine:
FILESYSTEM MOUNTPOINT TYPE OPTIONS DUMP PASS
Dove:
FILESYSTEM
-
Il dispositivo contenente il filesystem da montare. Al posto del dispositivo, puoi specificare l’UUID o l’etichetta della partizione, cosa di cui parleremo più avanti.
MOUNTPOINT
-
Dove il filesystem verrà montato.
TYPE
-
Il tipo di filesystem.
OPTIONS
-
Opzioni di montaggio che verranno passate a
mount
. DUMP
-
Indica se un qualsiasi filesystem di tipo ext2, ext3 o ext4 debba essere considerato per il backup dal comando
dump
. Di solito è zero, il che significa che dovrebbero essere ignorati. PASS
-
Quando è diverso da zero, definisce l’ordine in cui i filesystem verranno controllati all’avvio.
Per esempio, la prima partizione sul primo disco di una macchina potrebbe essere descritta come:
/dev/sda1 / ext4 noatime,errors
Le opzioni di montaggio su OPTIONS
sono un elenco di parametri separati da virgole, che possono essere generici o specifici del filesystem. Tra quelli generici abbiamo:
atime
enoatime
-
Per impostazione predefinita, ogni volta che un file viene letto, le informazioni sul tempo di accesso vengono aggiornate. Disabilitarlo (con
noatime
) può velocizzare l’I/O del disco. Non confonderlo con l’ora della modifica, che viene aggiornata ogni volta che viene scritto un file. auto
enoauto
-
Se il filesystem può (o non può) essere montato automaticamente con
mount -a
. defaults
-
Questo passa le opzioni
rw
,suid
,dev
,exec
,auto
,nouser
easync
amount
. dev
enodev
-
Indica se devono essere interpretati i dispositivi a caratteri o a blocchi nel filesystem montato.
exec
enoexec
-
Consente o nega il permesso di eseguire file binari sul filesystem.
user
enouser
-
Consente (o meno) a un utente normale di montare il filesystem.
group
-
Consente a un utente di montare il filesystem se l’utente appartiene allo stesso gruppo che possiede il dispositivo che lo contiene.
owner
-
Consente a un utente di montare un filesystem se è il proprietario del dispositivo che lo contiene.
suid
enosuid
-
Consente o meno ai bit SETUID e SETGID di avere effetto.
ro
erw
-
Monta un filesystem in sola lettura o in modalità scrivibile.
remount
-
Tenterà di rimontare un filesystem già montato. Non è usato su
/etc/fstab
, ma come parametro permount -o
. Per esempio, per rimontare la partizione già montata/dev/sdb1
in sola lettura, potresti usare il comandomount -o remount, ro /dev/sdb1
. Quando si rimonta, non è necessario specificare il tipo di filesystem, solo il nome del dispositivo o il punto di montaggio. sync
easync
-
Indica se eseguire tutte le operazioni di I/O sul filesystem in modo sincrono o asincrono.
async
è normalmente l’impostazione predefinita. La pagina di manuale permount
avverte che l’uso disync
su un supporto con un numero limitato di cicli di scrittura (come unità flash o schede di memoria) può ridurre la durata del dispositivo.
Utilizzare UUID ed Etichette
Specificare il nome del dispositivo contenente il filesystem da montare può introdurre alcuni problemi. A volte lo stesso nome del dispositivo può essere assegnato a un altro dispositivo a seconda di quando o dove è stato collegato al sistema. Per esempio, un’unità flash USB su /dev/sdb1
può essere assegnata a /dev/sdc1
se collegata a un’altra porta o dopo un’altra unità flash.
Un modo per evitarlo è specificare l’etichetta o l’UUID (Universally Unique Identifier) del volume. Entrambi sono specificati quando il filesystem viene creato e non cambieranno, a meno che il filesystem non venga distrutto o assegnato manualmente una nuova etichetta o UUID.
Il comando lsblk
può essere usato per avere informazioni su un filesystem e scoprire l’etichetta e/o l’UUID ad esso associati. Per fare ciò, usa il parametro -f
, seguito dal nome del dispositivo:
$ lsblk -f /dev/sda1 NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda1 ext4 6e2c12e3-472d-4bac-a257-c49ac07f3761 64,9G 33% /
Ecco il significato di ogni colonna:
NAME
-
Nome del dispositivo contenente il file system.
FSTYPE
-
Tipo di filesystem.
LABEL
-
Etichetta del filesystem.
UUID
-
Universally Unique Identifier (UUID) assegnato al filesystem.
FSAVAIL
-
Quanto spazio è disponibile nel filesystem.
FSUSE%
-
Percentuale di utilizzo del filesystem.
MOUNTPOINT
-
Dove è montato il filesystem.
In /etc/fstab
un dispositivo può essere specificato dal suo UUID con l’opzione UUID=
, seguita dall’UUID, o con LABEL=
, seguita dall’etichetta. Quindi, invece di:
/dev/sda1 / ext4 noatime,errors
Useresti:
UUID=6e2c12e3-472d-4bac-a257-c49ac07f3761 / ext4 noatime,errors
Oppure, se hai un disco con l’etichetta homedisk
:
LABEL=homedisk /home ext4 defaults
La stessa sintassi può essere utilizzata con il comando mount
. Invece del nome del dispositivo, passa l’UUID o l’etichetta. Per esempio, per montare un disco NTFS esterno con l’UUID 56C11DCC5D2E1334
su /mnt/external
, il comando sarebbe:
$ mount -t ntfs UUID=56C11DCC5D2E1334 /mnt/external
Montare Dischi con Systemd
Systemd è il processo init, il primo processo da eseguire su molte distribuzioni Linux. È responsabile della generazione di altri processi, dell’avvio dei servizi e del bootstrap del sistema. Tra molte altre attività, systemd può essere utilizzato anche per gestire il montaggio (e il montaggio automatico) dei file system.
Per utilizzare questa funzione di systemd, è necessario creare un file di configurazione chiamato mount unit. Ogni volume da montare ha la propria mount unit che deve essere posizionata in /etc/systemd/system/
.
Le unità di montaggio (mount unit) sono semplici file di testo con l’estensione .mount
. Il formato di base è mostrato di seguito:
[Unit] Description= [Mount] What= Where= Type= Options= [Install] WantedBy=
Description=
-
Breve descrizione dell’unità di montaggio, qualcosa come "Monta il disco di backup".
What=
-
Che cosa dovrebbe essere montato. Il volume deve essere specificato come
/dev/disk/by-uuid/VOL_UUID
doveVOL_UUID
è l’UUID del volume. Where=
-
Dovrebbe essere il percorso completo in cui deve essere montato il volume.
Type=
-
Il tipo di filesystem.
Options=
-
Le opzioni di montaggio che potresti voler passare, sono le stesse usate con il comando
mount
o in/etc/fstab
. WantedBy=
-
Utilizzato per la gestione delle dipendenze. In questo caso, useremo
multi-user.target
, il che significa che ogni volta che il sistema si avvia in un ambiente multiutente (un avvio normale) l’unità verrà montata.
Il nostro precedente esempio del disco esterno potrebbe essere scritto come di seguito:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
Ma non abbiamo ancora finito. Per funzionare correttamente, l’unità di montaggio deve avere lo stesso nome del punto di montaggio. In questo caso, il punto di montaggio è /mnt/external
, quindi il file dovrebbe essere chiamato mnt-external.mount
.
Successivamente, è necessario riavviare il demone systemd con il comando systemctl
e avviare l’unità:
# systemctl daemon-reload # systemctl start mnt-external.mount
Ora il contenuto del disco esterno dovrebbe essere disponibile su /mnt/external
. Puoi controllare lo stato del montaggio con il comando systemctl status mnt-external.mount
, come di seguito:
# systemctl status mnt-external.mount ● mnt-external.mount - External data disk Loaded: loaded (/etc/systemd/system/mnt-external.mount; disabled; vendor pres Active: active (mounted) since Mon 2019-08-19 22:27:02 -03; 14s ago Where: /mnt/external What: /dev/sdb1 Tasks: 0 (limit: 4915) Memory: 128.0K CGroup: /system.slice/mnt-external.mount ago 19 22:27:02 pop-os systemd[1]: Mounting External data disk... ago 19 22:27:02 pop-os systemd[1]: Mounted External data disk.
Il comando systemctl start mnt-external.mount
abiliterà l’unità solo per la sessione corrente. Se vuoi abilitarlo a ogni avvio, sostituisci start
con enable
:
# systemctl enable mnt-external.mount
Montaggio automatico di una Mount Unit
Le unità di montaggio possono essere montate automaticamente ogni volta che si accede al punto di montaggio. Per fare questo, hai bisogno di un file .automount
, accanto al file .mount
che descrive l’unità. Il formato di base è:
[Unit] Description= [Automount] Where= [Install] WantedBy=multi-user.target
Come prima, Description=
è una breve descrizione del file e Where=
è il mountpoint. Per esempio, un file .automount
per il nostro esempio precedente sarebbe:
[Unit] Description=Automount for the external data disk [Automount] Where=/mnt/external [Install] WantedBy=multi-user.target
Salva il file con lo stesso nome del punto di montaggio (in questo caso, mnt-external.automount
), ricarica systemd e avvia l’unità:
# systemctl daemon-reload # systemctl start mnt-external.automount
Ora ogni volta che si accede alla directory /mnt/external
, il disco viene montato. Come prima, per abilitare l’automount a ogni avvio useresti:
# systemctl enable mnt-external.automount
Esercizi Guidati
-
Usando
mount
, come puoi montare un filesystemext4
su/dev/sdc1
all’interno di/mnt/external
in sola lettura, usando le opzioninoatime
easync
? -
Quando si smonta un filesystem su
/dev/sdd2
, viene visualizzato il messaggio di erroretarget is busy
. Come puoi scoprire quali file sul filesystem sono aperti e quali processi li hanno aperti? -
Considera la seguente voce in
/etc/fstab
:/dev/sdb1 /data ext4 noatime,noauto,async
. Questo filesystem verrà montato se viene emesso il comandomount -a
? Perché? -
Come puoi trovare l’UUID di un filesystem sotto
/dev/sdb1
? -
Come puoi usare
mount
per rimontare in sola lettura un filesystem exFAT con UUID6e2c12e3-472d-4bac-a257-c49ac07f3761
, montato su/mnt/data
? -
Come puoi ottenere un elenco di tutti i filesystem
ext3
entfs
attualmente montati su un sistema?
Esercizi Esplorativi
-
Considera la seguente voce in
/etc/fstab
:/dev/sdc1 /backup ext4 noatime,nouser,async
. Un utente può montare questo filesystem con il comandomount /backup
? Perché? -
Considera un filesystem remoto montato su
/mnt/server
, che è diventato irraggiungibile a causa di una perdita di connettività di rete. Come potresti forzare lo smontaggio, o il montaggio in sola lettura se ciò non fosse possibile? -
Scrivi una voce in
/etc/fstab
che monti un volume btrfs con l’etichettaBackup
su/mnt/backup
, con le opzioni predefinite e senza consentire l’esecuzione di binari da esso. -
Considera la seguente unità di montaggio systemd:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
Quale sarebbe una voce in
/etc/fstab
equivalente per questo filesystem? -
Quale dovrebbe essere il nome del file per l’unità nell’esercizio precedente, in modo che possa essere utilizzato da systemd? Dove va posizionato?
Sommario
In questa lezione, hai imparato come montare e smontare i filesystem, manualmente o automaticamente. Alcuni dei comandi e dei concetti spiegati sono stati:
-
mount
(monta un dispositivo in una posizione) -
umount
(smonta un dispositivo) -
lsof
(elenca i processi che accedono a un filesystem) -
Le directory
/mnt
e/media
-
/etc/fstab
-
lsblk
(elenca il tipo e l’UUID di un filesystem) -
Come montare un filesystem usando il suo UUID o etichetta.
-
Come montare un filesystem usando le unità di montaggio di systemd.
-
Come montare automaticamente un filesystem utilizzando le unità di montaggio systemd.
Risposte agli Esercizi Guidati
-
Usando
mount
, come puoi montare un filesystemext4
su/dev/sdc1
all’interno di/mnt/external
in sola lettura, usando le opzioninoatime
easync
?# mount -t ext4 -o noatime,async,ro /dev/sdc1 /mnt/external
-
Quando si smonta un filesystem su
/dev/sdd2
, viene visualizzato il messaggio di erroretarget is busy
. Come puoi scoprire quali file sul filesystem sono aperti e quali processi li hanno aperti?Utilizza
lsof
seguito dal nome del device:$ lsof /dev/sdd2
-
Considera la seguente voce in
/etc/fstab
:/dev/sdb1 /data ext4 noatime,noauto,async
. Questo filesystem verrà montato se viene emesso il comandomount -a
? Perché?Non verrà montato. La chiave è il parametro
noauto
, il che significa che questa voce deve essere ignorata damount -a
. -
Come puoi trovare l’UUID di un filesystem sotto
/dev/sdb1
?Utilizza
lsblk -f
, seguito dal nome del device:$ lsblk -f /dev/sdb1
-
Come puoi usare
mount
per rimontare in sola lettura un filesystem exFAT con UUID6e2c12e3-472d-4bac-a257-c49ac07f3761
, montato su/mnt/data
?Dato che il filesystem è montato, non devi preoccuparti del tipo di filesystem o dell’ID, usa semplicemente l’opzione
remount
con il parametroro
(sola lettura) e il punto di montaggio:# mount -o remount,ro /mnt/data
-
Come puoi ottenere un elenco di tutti i filesystem
ext3
entfs
attualmente montati su un sistema?Utilizza
mount -t
, seguito da una lista separata da virgole dei filesystem:# mount -t ext3,ntfs
Risposte agli Esercizi Esplorativi
-
Considera la seguente voce in
/etc/fstab
:/dev/sdc1 /backup ext4 noatime,nouser,async
. Un utente può montare questo filesystem con il comandomount /backup
? Perché?No, il parametro
nouser
non consentirà agli utenti ordinari di montare questo filesystem. -
Considera un filesystem remoto montato su
/mnt/server
, che è diventato irraggiungibile a causa di una perdita di connettività di rete. Come puoi forzare lo smontaggio o il montaggio in sola lettura se ciò non è possibile?Passa le opzioni
-f
e-r
per smontare. Il comando sarebbeumount -f -r /mnt/server
. Ricorda che puoi raggruppare i parametri, quindi funzionerebbe ancheumount -fr /mnt/server
-
Scrivi una voce in
/etc/fstab
che monti un volume btrfs con l’etichettaBackup
su/mnt/backup
, con le opzioni predefinite e senza consentire l’esecuzione di binari da esso.La riga dovrebbe essere
LABEL=Backup /mnt/backup btrfs defaults,noexec
-
Considera la seguente unità di montaggio systemd:
[Unit] Description=External data disk [Mount] What=/dev/disk/by-uuid/56C11DCC5D2E1334 Where=/mnt/external Type=ntfs Options=defaults [Install] WantedBy=multi-user.target
Quale sarebbe una voce in
/etc/fstab
equivalente per questo filesystem?La voce sarebbe:
UUID=56C11DCC5D2E1334 /mnt/external ntfs defaults
-
Quale dovrebbe essere il nome del file per l’unità nell’esercizio precedente, in modo che possa essere utilizzato da systemd? Dove va posizionato?
Il nome del file deve essere lo stesso del punto di montaggio, quindi
mnt-external.mount
, posto in/etc/systemd/system
.