Montare un disco in Linux: lsblk, partizionamento, mkfs, mount e fstab
Montare un disco in Linux significa collegare il file system di una partizione a una directory dell'albero, ad esempio /data. Il nuovo disco si trova con lsblk, si partiziona con fdisk o parted, si formatta con mkfs.ext4, si monta con mount /dev/sdb1 /data e, per restare montato dopo il riavvio, si aggiunge una riga con il suo UUID in /etc/fstab, verificata con mount -a.
In Linux non esistono lettere di unità: tutti i dispositivi di memorizzazione vengono inseriti in un unico albero di directory che parte da /. Montare un disco in Linux vuol dire «agganciare» il file system di una partizione a una directory vuota, detta punto di mount. Il percorso del nuovo disco è sempre lo stesso: trovare il dispositivo (lsblk), partizionarlo (fdisk o parted), creare il file system (mkfs), montarlo (mount) e renderlo permanente in /etc/fstab. Vedremo ogni passaggio e, in più, come capire dove è finito lo spazio con df e du.
Come sono organizzati dischi e partizioni in Linux
Il kernel rappresenta ogni disco con un file di dispositivo in /dev. Il nome dipende dal tipo di collegamento:
| Nome | Cos'è | Partizioni |
|---|---|---|
/dev/sda, /dev/sdb | dischi SATA/SAS/USB, molti dischi virtuali | /dev/sda1, /dev/sda2 |
/dev/vda | dischi virtio nelle macchine virtuali KVM | /dev/vda1 |
/dev/nvme0n1 | SSD NVMe | /dev/nvme0n1p1 |
/dev/mapper/... | volumi logici LVM, volumi cifrati | — |
Il disco si divide in partizioni, su ogni partizione si crea un file system (ext4, xfs, btrfs) e solo quest'ultimo si monta in una directory. Finché la partizione non è montata, i suoi file non sono accessibili, anche se il disco è fisicamente collegato.
Come vedere i dischi: lsblk e blkid
Il primo comando quando si lavora con i dischi è lsblk. Mostra l'albero dei dispositivi, le dimensioni e i punti di mount:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part /
sdb 8:16 0 100G 0 disk
Si vede che sdb è il nuovo disco da 100 GB, senza partizioni e senza punto di mount. Opzioni utili:
lsblk -f— tipo di file system, etichetta e UUID di ogni partizione.lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL— solo le colonne che ti servono.sudo blkid— UUID e tipo di file system di tutte le partizioni.sudo fdisk -l— tabelle delle partizioni di tutti i dischi, con i settori.
Se il disco è stato aggiunto a una macchina virtuale «a caldo» e lsblk non lo vede, chiedi al kernel di riscansionare il bus: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan.
Partizionare il disco: fdisk e parted
Prima di partizionare, controlla di aver scelto il dispositivo giusto: scrivere una tabella delle partizioni sul disco di sistema distrugge i dati. Orientati in base alla dimensione e all'assenza di punti di mount nell'output di lsblk.
GPT o MBR
Per i dischi nuovi scegli GPT: supporta dischi oltre i 2 TB e fino a 128 partizioni. MBR (dos) serve solo per sistemi più vecchi con avvio tramite BIOS, quando è richiesto dal bootloader.
Partizionare con fdisk
Il fdisk moderno gestisce sia GPT sia MBR. Si lavora in modalità interattiva:
$ sudo fdisk /dev/sdb
Command (m for help): g # crea una tabella GPT vuota
Command (m for help): n # nuova partizione
Partition number (1-128, default 1): Invio
First sector: Invio
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Invio # tutto il disco
Command (m for help): w # scrive le modifiche ed esce
Finché non premi w, non viene scritto nulla sul disco, quindi q permette di uscire senza modifiche.
Partizionare con parted in una riga
Negli script è più comodo parted, che funziona senza dialogo:
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
I limiti in percentuale danno un allineamento corretto della partizione. Se la nuova partizione non compare, esegui sudo partprobe /dev/sdb per far rileggere la tabella al kernel.
Creare il file system: mkfs
La partizione è solo un intervallo di blocchi. Per salvarci dei file serve creare un file system:
$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done
L'opzione -L imposta un'etichetta con cui riconoscere la partizione più tardi. Quale scegliere:
| File system | Comando | Quando è adatto |
|---|---|---|
| ext4 | mkfs.ext4 | scelta universale predefinita, si può anche ridurre |
| XFS | mkfs.xfs | file e volumi grandi, standard in RHEL; si può solo ingrandire |
| Btrfs | mkfs.btrfs | snapshot, compressione, sottovolumi |
| vfat/exFAT | mkfs.vfat, mkfs.exfat | chiavette per lo scambio con Windows e macOS |
mkfs cancella tutto quello che si trovava sulla partizione. Su una partizione vuota il comando non chiede conferma, quindi controlla di nuovo il nome del dispositivo.
Come montare un disco in Linux con mount
Crea una directory, il punto di mount, e collegaci la partizione:
$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 98G 24K 93G 1% /data
Il tipo di file system viene riconosciuto automaticamente da mount, ma lo si può indicare esplicitamente con mount -t xfs. Se nella directory /data c'erano già dei file, dopo il mount non vengono cancellati: restano semplicemente nascosti sotto il nuovo file system e ricompaiono quando il disco viene smontato.
Opzioni di mount
Le opzioni si passano con -o, separate da virgole:
ro/rw— sola lettura oppure lettura e scrittura.noatime— non aggiornare la data di accesso a ogni lettura, meno scritture inutili.noexec— vietare l'esecuzione di programmi da questa partizione (utile per/tmpe le directory dei download).nosuid,nodev— ignorare i bit SUID e i file di dispositivo.remount— cambiare le opzioni senza smontare:sudo mount -o remount,ro /data.
Per vedere cosa è montato e con quali opzioni, usa findmnt: findmnt /data oppure findmnt -t ext4.
Permessi sul disco montato
La radice di un nuovo ext4 appartiene a root, quindi un utente normale non può scriverci. Dopo il mount assegna la directory all'utente giusto: sudo chown alice:alice /data. Per vfat ed exFAT non esistono i permessi Unix: proprietario e permessi si impostano al mount con le opzioni uid=, gid= e umask=.
Come smontare un disco: umount e l'errore target is busy
Lo smontaggio si fa con umount (senza la n), indicando il dispositivo o la directory:
$ sudo umount /data
umount: /data: target is busy.
L'errore significa che un processo sta usando file di questo file system oppure ha al suo interno la directory corrente, spesso il tuo stesso terminale dopo un cd /data. Per trovare il responsabile ti aiutano:
$ sudo lsof +f -- /data
$ sudo fuser -vm /data
Ferma il processo oppure esci dalla directory, poi riprova. Come ultima risorsa c'è umount -l (lazy): il file system viene staccato dall'albero subito, mentre viene liberato solo quando i processi chiudono i file.
Montaggio automatico all'avvio: /etc/fstab
Il comando mount vale fino al riavvio. Per montare il disco automaticamente, aggiungi una riga in /etc/fstab. Indica la partizione tramite UUID, non con il nome /dev/sdb1: i nomi possono scambiarsi quando si aggiungono dischi, mentre l'UUID è costante.
$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."
La riga ha sei campi:
# <dispositivo> <punto> <tipo> <opzioni> <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77 /data ext4 defaults,noatime 0 2
| Campo | Significato |
|---|---|
| dispositivo | UUID=..., LABEL=... oppure un percorso |
| punto | directory in cui montare (deve esistere) |
| tipo | ext4, xfs, swap, nfs ecc. |
| opzioni | defaults più quelle che servono, ad esempio noatime, nofail |
| dump | quasi sempre 0 |
| fsck |
Domande frequenti
Come monto una chiavetta USB in Linux?
Trovala con lsblk (di solito /dev/sdb1), crea una directory e lancia sudo mount /dev/sdb1 /mnt/usb. Negli ambienti grafici le chiavette vengono montate automaticamente in /media/nome_utente o /run/media.
Come monto un'immagine ISO?
Con sudo mount -o loop,ro immagine.iso /mnt/iso: l'opzione loop collega il file come dispositivo a blocchi. Per smontarla si usa il solito umount.
Come collego una cartella di rete tramite fstab?
Per NFS la riga è server:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0; per SMB è //server/share /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0. L'opzione _netdev fa attendere l'avvio della rete.
Qual è la differenza tra UUID e PARTUUID?
L'UUID appartiene al file system e cambia quando si esegue di nuovo mkfs; il PARTUUID appartiene alla partizione nella tabella GPT e resta invariato anche dopo la formattazione. In fstab di solito si usa l'UUID.
Come controllo un file system per gli errori?
Smonta la partizione ed esegui sudo fsck -f /dev/sdb1 per ext4 oppure sudo xfs_repair /dev/sdb1 per XFS. Il controllo di un file system montato in scrittura non è consentito: può danneggiare i dati.
Questo argomento è trattato in modo approfondito, con pratica, nel corso «Linux: с нуля до уверенного администрирования».
Vai al corso