- Dave McKay
@TheGurkha
- Updated May 28, 2019, 5:15pm EDT
I sistemi di file in Linux e nei sistemi operativi Unix-like come macOS possono essere montati, smontati e rimontati usando il terminale. Questo è uno strumento potente e versatile: ecco tutto quello che dovete sapere.
Il file system di Linux
I file system di Linux, macOS e altri sistemi operativi Unix-like non usano identificatori di volume separati per i dispositivi di archiviazione come fa, per esempio, Windows. Windows assegna ad ogni volume una lettera di unità come C: o D: e il file system per ogni volume è un albero di directory sotto quella lettera di unità.
In Linux, il file system è un albero di directory all-in-one. Un dispositivo di archiviazione montato ha il suo file system innestato su quell’albero in modo che sembri essere parte integrante di un file system coesivo. Il nuovo file system montato sarà accessibile tramite la directory in cui è montato. Quella directory è chiamata punto di montaggio per quel file system.
Molti file system sono montati automaticamente all’avvio o al volo come volumi di memoria collegati al computer durante l’esecuzione. Gli amministratori di sistema prudenti possono disattivare le funzioni di montaggio automatico in runtime in modo da poter controllare le connessioni al sistema.
Questo significa che i dispositivi di archiviazione collegati durante il runtime potrebbero non essere montati automaticamente e richiedere il montaggio manuale. Montare un file system manualmente permette di prendere decisioni su quel file system, come ad esempio dove sarà il punto di montaggio e se il file system sarà di sola lettura o di lettura-scrittura.
Che sia per necessità o per scelta, i comandi mount
umount
e remount
vi danno la possibilità di prendere il controllo di questo importante aspetto del vostro sistema Linux.
Interrogate il vostro file system con mount
Mount ha molte opzioni, ma per elencare tutti i file system montati sul vostro computer non richiede alcuna opzione. Digita semplicemente mount
e premi Invio:
mount
elencherà tutti i file system collegati nella finestra del terminale.
Può essere difficile scegliere tra questa montagna di dati per trovare quello che stai cercando.
Puoi raffinare l’output chiedendo a mount
di elencare solo i file system che ti interessano. L’opzione -t
(type) dice a mount
quale tipo di file system segnalare.
mount -t tmpfs
mount -t ext4
Come esempio, abbiamo chiesto a mount
di elencare solo tmpfs
file system. Otteniamo un output molto più gestibile.
Un tmpfs
file system appare come se fosse un normale file system montato, ma in realtà è memorizzato nella memoria volatile – tmp sta per temporary – invece che su un dispositivo di memorizzazione persistente.
Si dovrà sostituire il parametro tmpfs
con il tipo di file a cui si è interessati.
Abbiamo anche emesso un comando per elencare ext4
file system. Su questo computer di prova, c’è un solo ext4
file system, è sul dispositivo sda
-il primo dispositivo di archiviazione montato, di solito il disco rigido principale-e montato su /
, che è la radice dell’albero del file system.
Gli altri indicatori significano:
- rw: Il file system è leggibile e scrivibile.
- relatime: Il kernel sta usando uno schema ottimizzato per registrare i metadati di accesso e modifica dei file.
- errors=remount -o: Se viene rilevato un errore sufficientemente grave, il file system verrà rimontato in modalità di sola lettura per consentire la diagnosi.
RELATO: Quale File System Linux dovresti usare?
Interroga il tuo File System con df
Il comando df
può anche essere usato per visualizzare quali file system sono montati e dove sono i loro punti di mount.
df
usato senza parametri dà lo stesso problema di sovraccarico di informazioni di mount
. Per esempio, in Ubuntu Linux, c’è un squashfs
sistema di pseudo-file creato per ogni applicazione che è stata installata utilizzando il snap
comando. Chi vuole vederli tutti?
Per forzare df
ad ignorarli – o qualsiasi altro tipo di file system – usate l’opzione -x
(exclude):
df -x squashfs
Si possono facilmente vedere i nomi dei file system, le loro capacità, lo spazio usato e libero, e i loro punti di montaggio.
RELATO: Come visualizzare lo spazio libero su disco e l’utilizzo del disco dal terminale Linux
Rimontare tutti i file system in fstab
Tutti i file system montati all’avvio hanno voci in un file chiamato fstab
, che è la tabella dei file system situata all’interno di /etc
.
È possibile utilizzare mount
per forzare un “refresh” e rimontare tutti i file system elencati in fstab
. In condizioni operative normali questo non è necessario. Diventa davvero utile se si hanno problemi con più file system.
Avrete bisogno di usare sudo
, quindi vi verrà richiesta la vostra password.
sudo mount -a
Indubbiamente, su un computer che funziona correttamente, è un po’ insignificante.
Su un computer con problemi di file system, tuttavia, il rimontaggio potrebbe cancellare i problemi. Se ciò non accade, almeno si otterranno messaggi diagnostici sullo schermo e nei log di sistema che vi guideranno a cercare la causa del problema.
RELATO: Cos’è il file fstab di Linux, e come funziona?
Montaggio di un’immagine ISO
È facile montare un’immagine ISO in modo da poter accedere al suo contenuto come parte del file system.
Questo funziona con qualsiasi immagine ISO. In questo esempio, ci è capitato di usare una ISO di Tiny Core Linux perché è convenientemente piccola e veloce da scaricare. (Una piccola distribuzione Linux con una GUI, in 18 MB! Probabilmente avete file .mp3 più grandi di questo.)
Nella stessa directory dell’immagine ISO, eseguite questo comando. Sostituisci il nome del file ISO che stai montando.
sudo mount -t iso9660 -o loop TinyCore-current.iso /mnt
Perché dobbiamo usare sudo
dovrai inserire la tua password.
L’opzione -t
(tipo) dice mount
che tipo di file system stiamo montando. È un file ISO, quindi forniamo l’opzione iso9660
type specifier.
Il flag -o
(options) è usato per passare parametri extra a mount
. Il nostro parametro è loop
.
Utilizziamo loop
per forzare mount
ad utilizzare un file di dispositivo di loop per connettersi alla nostra immagine ISO. Un file di dispositivo in loop permette ad un file (come l’immagine ISO) di essere montato e trattato come se fosse un dispositivo di archiviazione.
I file di dispositivo sono file speciali utilizzati come interfaccia in modo che i dispositivi collegati appaiano come se fossero un normale file di file system. Questo fa parte della filosofia di progettazione “tutto in Linux è un file”.
Ci sono molti tipi diversi di file di dispositivo. Ne abbiamo visto uno prima quando abbiamo notato che l’unico ext4
file system su questa macchina di prova era montato su /
ed era chiamato sda
.
Per essere più precisi, quel ext4
file system è su un dispositivo di archiviazione collegato al file system attraverso il file di dispositivo /dev/sda
e il file system su quel dispositivo di archiviazione montato a /
.
Dobbiamo fornire il nome dell’immagine ISO, naturalmente, e dobbiamo far sapere a mount
dove vogliamo che sia montato il file system. Abbiamo scelto /mnt
.
L’immagine ISO è montata. Un promemoria che le immagini ISO sono sempre montate in modalità di sola lettura appare nella finestra del terminale.
Esplorare l’immagine ISO
Ora che è montata possiamo navigare le directory nell’immagine ISO allo stesso modo di qualsiasi altra parte del file system. Elenchiamo i file nell’immagine ISO. E’ montata a /mnt
ricorda.
ls /mnt
ls /mnt/cde/
Smontare l’immagine ISO
Per smontare un file system montato, usare il comando umount
. Si noti che non c’è una “n” tra la “u” e la “m” – il comando è umount
e non “unmount.”
Si deve dire umount
quale file system si sta smontando. Fatelo fornendo il punto di montaggio del file system.
sudo umount /mnt
Nessuna notizia è una buona notizia. Se non c’è nulla da segnalare, allora tutto è andato bene.
Creare un punto di montaggio
Puoi creare e usare i tuoi punti di montaggio. Ne creeremo uno chiamato isomnt
e monteremo la nostra immagine ISO su quello. Un punto di montaggio è solo una directory. Quindi possiamo usare mkdir
per creare il nostro nuovo punto di montaggio.
sudo mkdir /media/dave/isomnt
Ora possiamo usare lo stesso formato di comando di prima per montare la nostra immagine ISO. Questa volta non la monteremo su /mnt
, la monteremo su /media/dave/isomnt/
:
sudo mount -r -t iso9660 -o loop TinyCore-current.iso /media/dave/isomnt/
Ora possiamo accedere al file system montato dal nostro nuovo punto di montaggio.
ls /media/dave/isomnt/cde/optional
Ma questi percorsi stanno diventando molto lunghi. Sta diventando rapidamente noioso. Facciamo qualcosa al riguardo.
Binding a Mount Point
Si può legare un punto di montaggio ad un’altra directory. Si può quindi accedere al file system montato sia attraverso il punto di montaggio originale che attraverso la directory che è legata ad esso.
Ecco un esempio funzionante. Creeremo una directory nella nostra home directory chiamata iso
. Poi legheremo il punto di montaggio dell’immagine ISO /media/dave/isomnt
alla nuova iso
directory nella nostra home directory.
Potremo accedere all’immagine ISO attraverso il punto di montaggio originale /media/dave/isomnt
e attraverso la nuova iso
directory. L’opzione -B
(bind) richiede il nome del punto di montaggio e il nome della directory a cui legarlo.
mkdir iso
sudo mount -B /media/dave/isomnt/ iso
ls iso
ls /media/dave/isomnt
cd iso
ls
cd cde
Usare umount con i binding
Un file system che ha il suo punto di mount legato ad un’altra directory richiede lo smontaggio dal suo punto di mount e dal punto di bind.
Anche se smontiamo il file system dal suo punto di montaggio originale, è ancora possibile accedere al file system dalla sua directory vincolata. Il file system deve essere smontato anche da quella directory.
sudo umount /media/dave/isomnt
ls iso
sudo umount iso
ls iso
Montaggio di un floppy disk
Un floppy drive (con un floppy disk al suo interno) è un dispositivo di memorizzazione. Questo significa che un file sd (per dispositivo di memorizzazione) sarà usato per connettersi al dispositivo fisico. Dobbiamo stabilire qual è il prossimo file di dispositivo sd libero. Possiamo farlo passando l’output di df
attraverso grep
e cercando le voci con “sd” in esse.
df | grep /dev/sd
Su questo computer, c’è un solo file di dispositivo sd in uso. Questo è /dev/sda
. Il prossimo file di dispositivo sd emesso sarà /dev/sdb
. Ciò significa che quando colleghiamo il floppy drive al computer, Linux userà /dev/sdb
per connettersi al floppy drive.
Diremo a mount
di montare il file system del dischetto nel drive floppy che è collegato a /dev/sdb
al punto di montaggio /mnt
.
Inserire il dischetto nell’unità floppy e collegare l’unità floppy a una porta USB del computer. Lancia il seguente comando:
sudo mount /dev/sdb /mnt
Etichette del file system
Possiamo usare l’opzione -l
(label) con mount
per scoprire quale etichetta, se esiste, è attaccata a un file system. Le etichette non sono altro che nomi arbitrari. Non hanno alcuno scopo funzionale.
Utilizziamo l’opzione -t
(tipo) per chiedere a mount
di segnalare solo i file system vfat
.
mount -l -t vfat
Troverete l’etichetta tra parentesi quadre alla fine dell’elenco. L’etichetta di questa unità floppy è NORTUN.
Possiamo accedere all’unità floppy attraverso il /mnt
punto di montaggio.
cd /mnt
ls
ls -l AMATCH.C
Il floppy contiene file di codice sorgente in linguaggio C. Il timbro della data di un file mostra che è stato modificato l’ultima volta nell’ottobre 1992. Probabilmente è più vecchio di molti dei nostri lettori. (Inutile dire che il significato di NORTUN come etichetta si perde nella notte dei tempi.)
Se ripetiamo il nostro df
piped through grep
comando per elencare i file del dispositivo sd, vedremo che ora ce ne sono due.
df | grep /dev/sd
Il nostro disco floppy è mostrato come montato su /dev/sdb
come ci aspettavamo. Il file system sul disco floppy nel drive è montato su /mnt
.
Per smontare il floppy usiamo umount
e gli passiamo il file di dispositivo come parametro.
sudo umount /dev/sdb
L’opzione umount Lazy
Cosa succede se voi (o un altro utente) state usando il file system quando provate a smontarlo? Lo smontaggio fallirà.
sudo umount /dev/sdb
Ha fallito perché la directory di lavoro corrente dell’utente è all’interno del file system che sta cercando di smontare. Linux è abbastanza intelligente da non permettervi di segare il ramo su cui siete seduti.
Per superare questo problema usate l’opzione -l
(lazy). Questo fa sì che umount
aspetti fino a quando il file system può essere smontato in sicurezza.
sudo umount -l /dev/sdb
ls
cd ~
ls /mnt
Anche se il comando umount
viene rilasciato, il file system è ancora montato, e l’utente può elencare i file normalmente.
Non appena l’utente cambia directory nella propria home directory, il file system del floppy viene rilasciato e smontato. Cercare di elencare i file in /mnt
non produce alcun risultato.
Montaggio di una condivisione Samba
Samba è un insieme di servizi software che permettono di accedere alle condivisioni di rete in modo intercambiabile tra sistemi operativi Linux e Unix-like, e sistemi operativi Windows.
Impostare Samba va oltre lo scopo di questo articolo. Ma, se avete accesso autorizzato a una condivisione Samba che vi è stata messa a disposizione, ecco come potete montarla in Linux.
Un Raspberry Pi connesso alla stessa rete della macchina di prova ha una condivisione Samba. Si tratta di una directory chiamata Backup che ha dato il nome Samba di “share”. Facciamo una connessione SSH ad essa e guardiamo il contenuto della directory condivisa. La directory condivisa è su una chiavetta USB montata sul Pi.
Il nome utente è pi
e il nome di rete del Raspberry Pi è marineville.local
.
ssh [email protected]
ls /media/pi/USB64/Backup
exit
L’utente emette il comando SSH
e gli viene richiesta la password del Raspberry Pi. Il prompt della finestra del terminale cambia in pi@marineville
perché è collegato al Raspberry Pi.
Esse elenca il contenuto della directory condivisa a /media/pi/USB64/Backup
. Il contenuto sono due directory, una chiamata dave
e una chiamata pat
. Così ora sappiamo cosa aspettarci quando montiamo la condivisione Samba.
Si digita exit
per disconnettersi dal Raspberry Pi e il prompt cambia nuovamente in dave@howtogeek
.
Per usare Samba, dovete installare il pacchetto cifs-utils
.
Utilizzate apt-get
per installare questo pacchetto sul vostro sistema se state usando Ubuntu o un’altra distribuzione basata su Debian. Su altre distribuzioni Linux, utilizzate invece lo strumento di gestione dei pacchetti della vostra distribuzione Linux.
sudo apt-get install cifs-utils
Quando l’installazione è completata, montate la condivisione con un comando come il seguente, cambiando l’indirizzo IP, il nome della condivisione e il punto di montaggio (che deve già esistere) in base alle vostre circostanze.
sudo mount -t cifs -o credentials=/etc/samba/creds,uid=1000,gid=1000 //192.168.4.13/share /media/dave/NAS
Sottolineiamo le parti di questo comando.
- -t cifs: Il tipo di file system è cifs.
- -o credentials=/etc/samba/creds,uid=1000,gid=1000: I parametri delle opzioni sono il percorso di un file chiamato
creds
che è protetto e contiene il nome utente e la password dell’utente Raspberry Pi; l’ID utente (UID) e l’ID gruppo (GID) che sono usati per impostare il proprietario e il gruppo della root del file system. - //192.168.4.13/share: La posizione di rete del dispositivo con la condivisione Samba su di esso, e il nome Samba della directory condivisa. La radice della condivisione è una directory chiamata
Backup
, ma il suo nome di condivisione Samba è impostato sushare
. - /media/dave/NAS: Il nome del punto di montaggio. È necessario creare il punto di montaggio in anticipo.
Accedendo al nostro punto di montaggio a /media/dave/NAS
stiamo accedendo alla directory condivisa sul Raspberry Pi attraverso la rete. Possiamo vedere le due cartelle sul Raspberry Pi chiamate dave
e pat
.
cd /media/dave/NAS
Creazione e montaggio di un file system
Si può usare il comando dd
per creare un file immagine, poi usare mkfs
per creare un file system al suo interno. Quel file system può poi essere montato. Questo è un buon modo per fare pratica e sperimentare con mount
.
Utilizziamo l’opzione if
(file di input) per dire a dd
di usare il flusso di valori zero da /dev/zero
come file di input.
Il of
(file di output) è un nuovo file chiamato geek_fs
.
Utilizziamo l’opzione bs
(block size) per richiedere una dimensione del blocco di 1 MB.
Utilizziamo l’opzione count
per dire a dd
di includere 20 blocchi nel file di output.
dd if=/dev/zero of./geek_fs bs=1M count=20
Questo crea il nostro file immagine. Non contiene altro che valori zero.
Possiamo creare un file system funzionante all’interno del file geek_fs
usando il comando mkfs
. L’opzione -t
(type) ci permette di selezionare il tipo di file system. Stiamo creando un ext4
sistema.
mkfs -t ext4 ./geek_fs
Questo è tutto ciò che serve per avere un file system funzionante.
Montiamolo su /media/dave/geek
e poi usiamo chown
per impostare le proprietà del proprietario e del gruppo per consentirne l’accesso.
sudo mount ./geek_fs /media/dave/geek
sudo chown dave:users /media/dave/geek
Funziona? Cambiamo nel nuovo file system e copiamo un file per vedere.
cd /media/dave/geek
cp /etc/fstab .
ls -l
Siamo riusciti a cambiare directory nel nuovo file system, e abbiamo fatto una copia del file /etc/fstab
. Funziona!
Se usiamo mount
per elencare i file system montati ma limitiamo il suo output ai file system ext4
usando l’opzione -t
(tipo), vedremo che ora ci sono due file system ext4
montati.
mount -t ext4
Rimontare un file system
Rimontare un file system usa l’opzione -o remount
. È tipicamente fatto per cambiare un file system da uno stato di sola lettura (test) ad uno stato di lettura-scrittura (produzione).
Montiamo di nuovo il nostro floppy drive. Questa volta useremo il flag -r
(sola lettura). Poi faremo un pipe mount
attraverso grep
e guarderemo i dettagli del file system del floppy.
sudo mount -r /dev/sdb /mnt
mount | grep /mnt
Come potete vedere il ro
evidenziato indica che il file system è montato in sola lettura.
Utilizzando l’opzione -o remount
con il flag rw
(read-write) possiamo smontare e rimontare il file system con le nuove impostazioni, tutto in un solo comando.
sudo mount -o remount,rw /mnt
Ripetendo il piping di mount
attraverso grep
ci mostra che il ro
è stato sostituito da rw
(evidenziato). Il file system è ora in modalità lettura-scrittura.
mount | grep /mnt
(Non) Spostare un file system
Si poteva smontare un file system e rimontarlo su un altro punto di montaggio con un solo comando.
L’opzione -M
(move) in mount
esiste specificamente per permettervi di farlo. Ma non funziona più nelle distribuzioni Linux che sono passate a systemd
. E questa è la maggior parte dei grandi nomi.
Se proviamo a spostare un file system da /mnt
a ./geek
, fallisce e dà il messaggio di errore mostrato sotto. Cercando di elencare i file nel sistema dei file attraverso ./geek
non si ottengono risultati.
sudo mount -M /mnt ./geek
ls ./geek
Il workaround è usare l’opzione -B
(bind) che abbiamo usato prima per legare il punto di mount originale al nuovo punto di mount.
sudo mount -B /mnt ./geek
ls ./geek
Oltre a non liberare il punto di montaggio originale, questo avrà lo stesso risultato pratico.
Osservazioni finali
Utilizzando l’opzione --make-private
è stato possibile forzare lo spostamento su systemd
versioni di Linux. Questa tecnica non è presentata qui per due motivi.
- Può avere un comportamento imprevedibile.
- Non era persistente e avrebbe dovuto ripetersi ad ogni riavvio.
Devuan Linux usa SysV
init non systemd
. Un computer è stato caricato con l’ultima versione di Devuan e testato. L’opzione -M
(sposta) ha funzionato come previsto su quel sistema.
A parte i problemi systemd
con l’opzione -M
(move), dovreste trovare l’uso di mount
e umount
semplice. Questi sono ottimi comandi da avere nella manica quando ci si trova di fronte a un sistema danneggiato, e si deve iniziare a rimettere insieme i pezzi del file system a mano.
Dave McKay ha usato i computer per la prima volta quando il nastro di carta perforato era in voga, e da allora ha sempre programmato. Dopo oltre 30 anni nell’industria informatica, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, come manager di un team internazionale di sviluppo software, come project manager di servizi IT e, più recentemente, come Data Protection Officer. Dave è un evangelista di Linux e un sostenitore dell’open source.Read Full Bio”