Hai visto con lsblk che la chiavetta si chiama sdc1. E adesso? Per leggerne i file bisogna "montarla": collegarla a una cartella del sistema. mount è il comando che fa questo collegamento, ed è anche quello che stabilisce, all'avvio, dove finisce ogni disco del server.
Cos'è
mount ("monta") fa parte del pacchetto util-linux ed è presente su ogni distribuzione. In Linux non esistono le "lettere dei dischi" di Windows (C:, D:): c'è un unico albero di cartelle, che parte da /, e ogni disco, partizione, chiavetta o condivisione di rete viene agganciata a una cartella di quell'albero. La cartella scelta si chiama punto di montaggio: una volta montata la chiavetta su /mnt/usb, i suoi file compaiono dentro quella cartella.
Cosa fa
Con argomenti, collega un dispositivo (o una cartella, o una condivisione di rete) a un punto di montaggio, con le opzioni richieste. Senza argomenti, elenca tutto ciò che è montato in questo momento. Il comando inverso è umount ("smonta", senza la n), che scollega in modo sicuro.
Come si usa
$ sudo mount [opzioni] dispositivo punto_di_montaggio
$ sudo umount punto_di_montaggioPer montare e smontare servono i privilegi di amministratore (vedi l'articolo su sudo), salvo i casi, come le chiavette nell'ambiente grafico, in cui lo fa il sistema per te. Gli esempi continuano la serie sul server con il disco dati sdb1 e la chiavetta sdc1 dell'articolo su lsblk.
Esempio 1: che cosa è montato adesso?
$ mount -t ext4,vfat
/dev/sda2 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077)
/dev/sdb1 on /mnt/dati type ext4 (rw,relatime)
$ findmnt -l -t ext4,vfat
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda2 ext4 rw,relatime,errors=remount-ro
/boot/efi /dev/sda1 vfat rw,relatime,fmask=0077,dmask=0077
/mnt/dati /dev/sdb1 ext4 rw,relatimeSenza opzioni mount stampa decine di righe, perché Linux monta anche molti file system "virtuali" (/proc, /sys, /dev, tmpfs…) che non sono dischi. Con -t (type) si filtra per tipo di file system. Il comando findmnt, dello stesso pacchetto, mostra le stesse informazioni in colonne più leggibili: la forma -l è l'elenco piatto, mentre senza opzioni disegna l'albero dei montaggi. Ogni riga dice cosa è collegato (SOURCE), dove (TARGET), con quale file system e con quali opzioni (rw vuol dire lettura e scrittura, ro sola lettura).
Esempio 2: montare una partizione
$ sudo mkdir -p /mnt/usb
$ sudo mount /dev/sdc1 /mnt/usb
$ ls /mnt/usb
documenti foto note.txt
$ df -h /mnt/usb
File system Dim. Usati Dispon. Uso% Montato su
/dev/sdc1 15G 64M 15G 1% /mnt/usb
$ sudo umount /mnt/usbTre passi: creare la cartella che farà da punto di montaggio (con mkdir, di solito sotto /mnt), montare, e al termine smontare. Il tipo di file system viene di solito riconosciuto da solo. Mentre è montata, la chiavetta si usa come una cartella qualsiasi (ls, cp, df, vedi gli articoli relativi). Se non vuoi scrivere il nome del dispositivo, o se non sei sicuro, controlla prima con lsblk.
Esempio 3: le opzioni più usate
$ sudo mount -t vfat -o uid=1000,gid=1000 /dev/sdc1 /mnt/usb
$ sudo mount -o ro /dev/sdb1 /mnt/dati
$ sudo mount -o noexec,nosuid,nodev /dev/sdc1 /mnt/usbCon -t si indica il tipo di file system (ext4, vfat, exfat, ntfs3, xfs…), con -o (options) un elenco di opzioni separate da virgole:
ro(read only): monta in sola lettura, la scelta giusta quando devi solo guardare o recuperare dei dati;uid=1000,gid=1000: sui file system senza permessi di tipo Unix (vfat,exfat,ntfs) assegna tutti i file a un utente e a un gruppo (qui quelli dienzo, vedi l'articolo suid);noexec,nosuid,nodev: impediscono di eseguire programmi, di usare i permessi speciali e di creare dispositivi dal contenuto montato: una cautela sensata per chiavette di cui non ti fidi.
Esempio 4: montare per UUID o per etichetta
$ sudo mount UUID=c9d8e7f6-a5b4-4c3d-9e2f-1a0b9c8d7e6f /mnt/dati
$ sudo mount LABEL=CHIAVETTA /mnt/usb
$ lsblk -o NAME,LABEL,UUID /dev/sdb1Come visto per lsblk, il nome sdb1 può cambiare da un avvio all'altro, mentre l'UUID (o l'etichetta, se la assegni tu) resta lo stesso. mount accetta direttamente UUID=... o LABEL=... al posto del dispositivo. Il valore si legge con lsblk -f o blkid.
Esempio 5: cambiare le opzioni di un montaggio esistente
$ sudo mount -o remount,ro /mnt/dati
$ echo prova > /mnt/dati/prova
bash: /mnt/dati/prova: File system di sola lettura
$ sudo mount -o remount,rw /mnt/datiL'opzione remount cambia le opzioni di un file system già montato, senza smontarlo. L'uso più comune è passare in sola lettura (ro) prima di una verifica o di una copia di sicurezza, per essere certi che niente cambi, e tornare poi in lettura e scrittura (rw). Se qualche programma sta scrivendo un file, il passaggio a ro fallisce con un errore.
Esempio 6: montare un file ISO o l'immagine di un disco
$ sudo mkdir -p /mnt/iso
$ sudo mount -o loop,ro debian-12.iso /mnt/iso
$ ls /mnt/iso
boot dists install pool README.txt
$ findmnt /mnt/iso
TARGET SOURCE FSTYPE OPTIONS
/mnt/iso /dev/loop0 iso9660 ro,relatime
$ sudo umount /mnt/isoUn file immagine (un .iso, o un file che contiene un intero file system) si monta con l'opzione loop: il sistema lo tratta come se fosse un disco, e ne mostra il contenuto in una cartella, senza masterizzarlo né estrarlo. Nell'elenco dei dispositivi compare un loop (visto nell'articolo su lsblk). L'output dell'esempio è illustrativo.
Esempio 7: cartelle e memoria, con bind e tmpfs
$ sudo mount --bind /home/enzo/sito /srv/sito
$ sudo mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk
$ findmnt /mnt/ramdisk
TARGET SOURCE FSTYPE OPTIONS
/mnt/ramdisk tmpfs tmpfs rw,relatime,size=524288k
$ sudo umount /mnt/ramdiskSi può montare anche qualcosa che non è un disco. Con --bind una cartella diventa visibile anche in un secondo punto dell'albero: utile per mostrare una cartella dentro un ambiente isolato, o a un servizio che la cerca in un percorso fisso (un'alternativa ai collegamenti simbolici, vedi l'articolo su ln, che funziona anche dove questi non sono ammessi). Con -t tmpfs si crea un "disco in memoria": velocissimo, ma i dati spariscono allo spegnimento e occupano la RAM (compaiono nella colonna shared di free).
Esempio 8: condivisioni di rete
$ sudo mount -t nfs 192.168.1.50:/export/backup /mnt/backup
$ sudo mount -t cifs //192.168.1.50/condivisa /mnt/nas \
-o username=enzo,uid=1000,gid=1000
Password for enzo@//192.168.1.50/condivisa:
$ df -h /mnt/nasLo stesso comando monta cartelle di un altro computer: nfs è il protocollo tipico fra sistemi Linux, cifs (o SMB) quello delle condivisioni di Windows e di molti NAS. Per cifs serve il pacchetto cifs-utils e per nfs il pacchetto nfs-common (su Debian e Ubuntu), e la password viene chiesta al momento. L'indirizzo è inventato. Per non scrivere la password nei comandi o nei file leggibili da tutti si usa un file separato con credentials=/percorso/file, protetto con chmod 600 (vedi l'articolo su chmod e chown).
Esempio 9: montare all'avvio, con /etc/fstab
$ sudo cp /etc/fstab /etc/fstab.bak
$ sudo nano /etc/fstab
# dispositivo punto tipo opzioni dump fsck
UUID=c9d8e7f6-a5b4-4c3d-9e2f-1a0b9c8d7e6f /mnt/dati ext4 defaults,nofail 0 2
//192.168.1.50/condivisa /mnt/nas cifs credentials=/etc/smb.cred,nofail 0 0
$ sudo findmnt --verify
Success, no errors or warnings detected
$ sudo mount -aIl file /etc/fstab elenca i montaggi da fare all'avvio (file system table), una riga per montaggio, con sei campi: il dispositivo (meglio per UUID), il punto di montaggio, il tipo, le opzioni, il numero per le copie di sicurezza (di solito 0) e l'ordine dei controlli all'avvio (0 per saltarli, 1 per /, 2 per gli altri). Qui l'opzione defaults raccoglie quelle normali e nofail evita che il sistema si blocchi se il disco manca. I comandi dopo la modifica sono un controllo: findmnt --verify cerca errori di scrittura, mount -a (all) monta tutto ciò che è elencato e non lo è già. Una riga in fstab permette poi di scrivere solo mount /mnt/dati. Come visto per nano, tieni una copia del file prima di modificarlo.
Esempio 10: smontare, quando il sistema dice "occupato"
$ sudo umount /mnt/usb
umount: /mnt/usb: target is busy.
$ fuser -vm /mnt/usb
USER PID ACCESS COMMAND
/mnt/usb: enzo 4102 ..c.. bash
$ cd ~
$ sudo umount /mnt/usbNon si può smontare un file system che qualcuno sta usando, e il messaggio (il cui testo cambia con la lingua del sistema) dice proprio questo. fuser -vm mostra chi lo sta tenendo occupato: qui una shell (bash) che ha la cartella come cartella corrente (la lettera c in ACCESS). Basta uscirne con cd. Per i file aperti, lsof +f -- /mnt/usb dà un elenco dettagliato; poi si chiude il programma o lo si ferma (vedi l'articolo su kill).
Esempio 11: uso negli script
#!/bin/bash
DEST=/mnt/backup
DISCO="UUID=c9d8e7f6-a5b4-4c3d-9e2f-1a0b9c8d7e6f"
if ! mountpoint -q "$DEST"; then
mount "$DISCO" "$DEST" || {
echo "Disco di backup non trovato" >&2
exit 1
}
fi
rsync -a --delete /var/www/ "$DEST/www/"
sync
umount "$DEST"Lo script monta il disco dei backup solo se non è già montato (mountpoint -q risponde con il codice di uscita, senza stampare niente), si ferma con un errore se il disco non c'è, copia con rsync (vedi l'articolo relativo), aspetta che tutto sia scritto con sync e smonta. Va eseguito come root (per esempio dal crontab dell'amministratore: vedi l'articolo su crontab). Il punto è non lasciare il disco di backup sempre montato: un errore, un virus o un rm sbagliato non lo raggiungono.
Opzioni utili
-t tipo: tipo di file system (nel montaggio) o filtro (nell'elenco).-o opzioni:ro,rw,remount,loop,noexec,nosuid,nodev,uid=,gid=,noatime,nofail.--bind: rende visibile una cartella anche in un altro punto.-a: monta tutto quello che è elencato in/etc/fstab.-v: spiega cosa sta facendo;-r: sola lettura (come-o ro).umount: smonta;umount -l(lazy) lo fa non appena smette di essere usato;umount -fforza lo smontaggio dei montaggi di rete irraggiungibili.findmnt,findmnt --verify,mountpoint: elenco ordinato dei montaggi, controllo difstab, verifica di un punto di montaggio.lsblk,blkid,df,fuser,lsof: dispositivi e UUID, spazio, chi usa un montaggio.
Attenzione a
- Una riga sbagliata in
/etc/fstabpuò bloccare l'avvio: se un disco elencato manca o la riga è scritta male, il sistema può fermarsi in una modalità di emergenza. Usanofailper i dischi non essenziali, prova confindmnt --verifyemount -aprima di riavviare, e conserva una copia del file. Su un server remoto, tieni a portata di mano un accesso di emergenza (la console del fornitore) prima di toccare questo file. - Un punto di montaggio non vuoto "nasconde" i suoi file: se in
/mnt/usbci sono già dei file e ci monti sopra un disco, quei file non si vedono finché non smonti (non sono cancellati). Usa sempre una cartella vuota, creata apposta. - Prima di staccare un disco, smontalo: con
umountil sistema finisce di scrivere i dati in sospeso. Estrarre una chiavetta senza smontarla può lasciare file danneggiati o il file system da riparare. - Non usare
umount -fo-lper abitudine: non risolvono il problema ("occupato"), lo nascondono. Prima cerca chi usa il montaggio confuser -vmolsof; la forzatura serve solo per i dischi di rete irraggiungibili. - Attenzione al dispositivo giusto: montare è sicuro (non cancella niente), ma fai attenzione ai nomi e controlla con
lsblk. Se invece formatti (mkfs) un dispositivo già montato, o uno sbagliato, perdi i dati. - Su
vfat,exfatentfsi permessi sono diversi: questi file system non conoscono proprietari e permessi di Linux, quindichmodechownnon hanno effetto; si impostano al montaggio conuid=,gid=eumask=. Un disco NTFS di un Windows spento con l'"avvio rapido" può risultare bloccato o in sola lettura: va spento del tutto prima. - Un file system può diventare di sola lettura da solo: con l'opzione
errors=remount-ro(quella tipica di/), il kernel passa inrose rileva errori sul disco. Se i comandi di scrittura rispondono "File system di sola lettura", guardasudo dmesg | taile verifica lo stato del disco prima di rimontarlo inrw. - I dati in
tmpfsnon sono permanenti: scompaiono allo spegnimento e occupano memoria. Non metterci niente che non puoi perdere. - I montaggi fatti a mano non sopravvivono al riavvio: se un disco deve esserci sempre, scrivilo in
/etc/fstab(o in un'unitàsystemd); se un montaggio di rete è lento o intermittente, valuta l'opzionex-systemd.automount, che lo monta solo quando serve. - Le credenziali non vanno nella riga di comando: una password scritta in un comando resta nella cronologia (vedi l'articolo su
history) ed è visibile a chi elenca i processi. Usa un file di credenziali conchmod 600. - Nei container il montaggio è di solito vietato (servono permessi speciali): se
mountrisponde "permission denied" pur essendoroot, di solito è questo il motivo.
Riepilogo
| Comando | Cosa fa |
|---|---|
mount -t ext4 | Elenca i montaggi di un tipo |
findmnt | Elenca i montaggi in modo ordinato (albero) |
sudo mount /dev/sdc1 /mnt/usb | Monta una partizione su una cartella |
sudo mount UUID=... /mnt/dati | Monta tramite UUID |
sudo mount -o ro ... | Monta in sola lettura |
sudo mount -o remount,ro /mnt/dati | Cambia le opzioni di un montaggio esistente |
sudo mount -o loop,ro file.iso /mnt/iso | Monta un file immagine |
sudo mount --bind /a /b | Rende visibile la cartella /a anche in /b |
sudo mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk | Crea un disco in memoria |
sudo mount -a | Monta tutto ciò che è in /etc/fstab |
sudo findmnt --verify | Controlla gli errori di /etc/fstab |
sudo umount /mnt/usb | Smonta in sicurezza |
fuser -vm /mnt/usb | Mostra chi sta usando un montaggio |
mountpoint -q /mnt/usb | Verifica (negli script) se è montato |