Guida

Montare un disco in Linux: lsblk, partizionamento, mkfs, mount e fstab

Aggiornato: · Skillaria.Top

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:

NomeCos'èPartizioni
/dev/sda, /dev/sdbdischi SATA/SAS/USB, molti dischi virtuali/dev/sda1, /dev/sda2
/dev/vdadischi virtio nelle macchine virtuali KVM/dev/vda1
/dev/nvme0n1SSD 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 systemComandoQuando è adatto
ext4mkfs.ext4scelta universale predefinita, si può anche ridurre
XFSmkfs.xfsfile e volumi grandi, standard in RHEL; si può solo ingrandire
Btrfsmkfs.btrfssnapshot, compressione, sottovolumi
vfat/exFATmkfs.vfat, mkfs.exfatchiavette 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 /tmp e 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
CampoSignificato
dispositivoUUID=..., LABEL=... oppure un percorso
puntodirectory in cui montare (deve esistere)
tipoext4, xfs, swap, nfs ecc.
opzionidefaults più quelle che servono, ad esempio noatime, nofail
dumpquasi 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.

Impara l’argomento in video

Questo argomento è trattato in modo approfondito, con pratica, nel corso «Linux: с нуля до уверенного администрирования».

Vai al corso