Salta al contenuto principale

lsblk: dischi e partizioni a colpo d'occhio

Inviato da tuxsa il

Hai appena collegato una chiavetta USB, o hai aggiunto un disco al server, e ti serve il suo nome per poterlo usare. Oppure devi formattare un disco e vuoi essere sicuro di scegliere quello giusto. lsblk mostra, in forma di albero, tutti i dischi del computer, le loro partizioni e dove sono montati, senza modificare niente.

Cos'è

lsblk (list block devices, "elenca i dispositivi a blocchi") fa parte del pacchetto util-linux ed è presente su ogni distribuzione. Un dispositivo a blocchi è tutto ciò che memorizza dati e si legge a blocchi: dischi fissi, SSD, chiavette USB, schede SD, partizioni, ma anche volumi logici e dischi virtuali. Linux li presenta come file speciali nella cartella /dev (per esempio /dev/sda o /dev/nvme0n1), e lsblk li mette in ordine e li descrive.

Cosa fa

Legge le informazioni del kernel (non legge il contenuto dei dischi) e le mostra come un albero: ogni disco con le sue partizioni, e sotto ogni partizione eventuali strutture più complesse (come volumi LVM o dischi cifrati). Per ognuno indica dimensione, tipo e punto di montaggio, cioè la cartella da cui i suoi file sono raggiungibili. Non richiede privilegi di root.

Come si usa

$ lsblk [opzioni] [dispositivo]

Gli esempi mostrano un server con un SSD di sistema, un disco dati e una chiavetta USB. Sul terminale i rami dell'albero sono disegnati con linee continue; qui uso l'opzione -i (ascii), che li disegna con semplici caratteri da tastiera, più facili da copiare e incollare.

Esempio 1: il comando di base

$ lsblk -i
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0      0 232.9G  0 disk
|-sda1 8:1      0   512M  0 part /boot/efi
|-sda2 8:2      0 229.5G  0 part /
`-sda3 8:3      0   2.9G  0 part [SWAP]
sdb    8:16     0   1.8T  0 disk
`-sdb1 8:17     0   1.8T  0 part /mnt/dati
sdc    8:32     1  14.9G  0 disk
`-sdc1 8:33     1  14.9G  0 part /media/enzo/CHIAVETTA

Le colonne:

  • NAME: il nome del dispositivo, sotto /dev. I dischi sono sda, sdb, sdc…, le partizioni aggiungono un numero (sda1, sda2…);
  • MAJ:MIN: i due numeri con cui il kernel identifica il dispositivo (major e minor): di solito non servono;
  • RM (removable): 1 se il dispositivo è rimovibile, come la chiavetta sdc;
  • SIZE: la dimensione (M mebibyte, G gibibyte, T tebibyte, multipli di 1024);
  • RO (read only): 1 se è di sola lettura;
  • TYPE: disk per un disco intero, part per una partizione; altri valori sono lvm, crypt, raid1, loop, rom;
  • MOUNTPOINTS: dove è montato. [SWAP] indica una partizione usata come swap (vedi l'articolo su free); un campo vuoto significa che non è montato.

In questo esempio, sda è il disco di sistema (da 232,9 GiB) con tre partizioni: l'avvio /boot/efi, il sistema / e lo swap. Il disco sdb contiene i dati, e sdc è una chiavetta USB montata automaticamente.

Esempio 2: i file system, con -f

$ lsblk -i -o NAME,FSTYPE,UUID,MOUNTPOINTS
NAME FSTYPE UUID                                 MOUNTPOINTS
sda1 vfat   7A3F-1C2B                            /boot/efi
sda2 ext4   3f2a5c1e-7b4d-4e0a-9c1f-5d6e7a8b9c0d /
sda3 swap   b1c2d3e4-5f60-4a7b-8c9d-0e1f2a3b4c5d [SWAP]
sdb1 ext4   c9d8e7f6-a5b4-4c3d-9e2f-1a0b9c8d7e6f /mnt/dati

L'opzione -f (filesystems) mostra il tipo di file system (ext4, vfat, xfs, btrfs, ntfs…), l'etichetta, l'UUID e, nelle versioni più recenti, anche lo spazio libero. Qui ho scelto le colonne a mano con -o (output) per far stare tutto in una riga: l'output di -f è più largo. L'UUID è un codice unico, assegnato al file system quando viene creato: è il modo più sicuro di riconoscere una partizione, e si usa nel file /etc/fstab, che decide cosa montare all'avvio.

Esempio 3: che tipo di dischi sono?

$ lsblk -d -o NAME,SIZE,TYPE,TRAN,ROTA,MODEL
NAME   SIZE TYPE TRAN ROTA MODEL
sda  232.9G disk sata    0 Samsung SSD 870
sdb    1.8T disk sata    1 WDC WD20EZAZ-00G
sdc   14.9G disk usb     1 USB DISK 3.0

Con -d (nodeps) si vedono solo i dischi interi, senza partizioni, e con -o si sceglie quali colonne mostrare. TRAN è il tipo di collegamento (sata, nvme, usb); ROTA vale 1 se il disco ha parti in movimento (un disco meccanico) e 0 se è un SSD; MODEL è il nome del prodotto: il modo più semplice per riconoscere "quale disco è quale", per esempio per distinguere due dischi della stessa dimensione. Altre colonne utili: SERIAL (numero di serie), LABEL, FSUSE% (percentuale di spazio usato) e PATH (percorso completo sotto /dev); con lsblk --help si vede l'elenco completo.

Esempio 4: riconoscere la chiavetta appena collegata

$ lsblk -i -o NAME,SIZE,MODEL,TRAN,MOUNTPOINTS
$ lsblk -i /dev/sdc
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdc    8:32     1 14.9G  0 disk
`-sdc1 8:33     1 14.9G  0 part /media/enzo/CHIAVETTA
$ sudo dmesg | tail -n 5

Il metodo più semplice è eseguire lsblk prima e dopo aver collegato il dispositivo: la riga nuova è la chiavetta. Con un dispositivo come argomento, lsblk mostra solo quel disco e le sue partizioni. I messaggi del kernel (dmesg) confermano il riconoscimento e il nome assegnato. Sui sistemi con ambiente grafico, la chiavetta viene montata in automatico sotto /media/utente/, come qui. Senza ambiente grafico (su un server), va montata a mano con mount e smontata con umount.

Esempio 5: un albero più complesso, con LVM

$ lsblk -i
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda          8:0      0  100G  0 disk
|-sda1       8:1      0  512M  0 part /boot
`-sda2       8:2      0 99.5G  0 part
  |-vg0-root 253:0    0   50G  0 lvm  /
  `-vg0-dati 253:1    0 49.5G  0 lvm  /dati

Con il Logical Volume Manager (LVM) una partizione contiene volumi logici, ridimensionabili senza toccare il disco: qui sda2 non ha un punto di montaggio, ma contiene due volumi (vg0-root e vg0-dati), di tipo lvm. L'albero rende chiara la struttura: è molto più facile da leggere di un elenco piatto. Lo stesso vale per i dischi cifrati (tipo crypt) e per i gruppi di dischi in RAID.

Esempio 6: formati per i programmi

$ lsblk -p -n -l -o NAME,SIZE,TYPE
/dev/sda  232.9G disk
/dev/sda1   512M part
/dev/sda2 229.5G part
/dev/sda3   2.9G part
$ lsblk -b -d -o NAME,SIZE
$ lsblk -J -o NAME,SIZE
$ lsblk -P -o NAME,SIZE,TYPE
NAME="sda" SIZE="232.9G" TYPE="disk"
NAME="sda1" SIZE="512M" TYPE="part"
...

Alcune opzioni cambiano il formato dell'output: -p (paths) mostra il percorso completo (/dev/sda1), -n toglie la riga delle intestazioni, -l (list) disegna un elenco piatto senza albero, -b mostra le dimensioni in byte (esatte). Per i programmi: -J produce un file JSON (adatto a jq e agli script in Python) e -P mostra coppie CHIAVE="valore"; -r (raw) produce campi separati da spazi, adatti a awk.

Esempio 7: spazio occupato

$ lsblk -i -o NAME,SIZE,FSUSED,FSUSE%,MOUNTPOINTS /dev/sdb
NAME   SIZE FSUSED FSUSE% MOUNTPOINTS
sdb    1.8T
`-sdb1 1.8T   1.2T    69% /mnt/dati
$ df -h /mnt/dati

Nelle versioni recenti, lsblk può mostrare anche lo spazio usato (FSUSED, FSUSE%) e libero (FSAVAIL) dei file system montati. Per i controlli di tutti i giorni resta più pratico df -h, che mostra solo ciò che è montato (vedi l'articolo su df e du); lsblk ha il vantaggio di mostrare anche quello che non è montato.

Esempio 8: prima di formattare o copiare un disco

$ lsblk -o NAME,SIZE,MODEL,TRAN,MOUNTPOINTS /dev/sdc
$ sudo umount /media/enzo/CHIAVETTA
$ sudo dd if=immagine.iso of=/dev/sdc bs=4M status=progress conv=fsync
$ sync

Comandi come dd, mkfs (che crea un file system) e fdisk (che modifica le partizioni) distruggono i dati del dispositivo indicato, senza chiedere conferma. Un errore di una lettera nel nome (sdb al posto di sdc) può cancellare il disco dei dati. La buona abitudine: controllare con lsblk modello, dimensione e punti di montaggio del dispositivo subito prima, smontarlo con umount e, al termine, eseguire sync per essere certi che tutto sia stato scritto.

Esempio 9: uso negli script

#!/bin/bash
echo "Partizioni non montate:"
lsblk -nr -o NAME,TYPE,MOUNTPOINTS | awk '$2 == "part" && NF == 2 {
    print "/dev/" $1
}'

echo "Dischi rimovibili:"
lsblk -dnr -o NAME,RM | awk '$2 == 1 {print "/dev/" $1}'

Il primo comando elenca le partizioni che non sono montate: in modalità -r (raw) la riga di una partizione senza punto di montaggio ha solo due campi, e awk la riconosce con NF == 2. Il secondo elenca i dischi rimovibili (colonna RM uguale a 1), come le chiavette. Utile in uno script di copia di sicurezza che deve riconoscere il disco esterno: meglio ancora se lo riconosce per UUID (lsblk -no UUID /dev/sdc1), perché i nomi possono cambiare.

Opzioni utili

  • -f: file system, etichetta, UUID e spazio libero.
  • -o COLONNE: sceglie le colonne (per esempio NAME,SIZE,TYPE,MODEL); -O le mostra tutte.
  • -d: solo i dischi interi, senza partizioni.
  • -l: elenco piatto; -i: caratteri semplici per l'albero; -p: percorsi completi (/dev/sda1); -n: senza intestazioni.
  • -b: dimensioni in byte; -J: JSON; -P: coppie chiave="valore"; -r: formato grezzo.
  • -e 7: esclude i dispositivi loop (numero 7); -a: mostra anche quelli vuoti; -s: albero rovesciato, dalle partizioni al disco.
  • blkid, findmnt, mount, df, fdisk -l: altre viste su dischi, file system e montaggi.

Attenzione a

  • Il nome di un disco non è stabile: sdb oggi può diventare sdc domani, se cambi l'ordine dei collegamenti o aggiungi un disco. In /etc/fstab e negli script identifica le partizioni con l'UUID (o l'etichetta), non con il nome.
  • I nomi dipendono dal tipo di disco: sda, sdb per i dischi SATA e USB; nvme0n1 (con partizioni nvme0n1p1) per gli SSD NVMe; vda per i dischi delle macchine virtuali; mmcblk0 per le schede SD (Raspberry Pi); sr0 per il lettore ottico.
  • Un disco senza punto di montaggio non è un disco vuoto: la colonna MOUNTPOINTS vuota dice solo che al momento non è montato. Può contenere dati importanti: prima di formattare, guarda FSTYPE e controlla il contenuto montandolo in sola lettura.
  • lsblk legge, ma i comandi che usi dopo scrivono: dd, mkfs, fdisk e parted cancellano i dati senza chiedere conferma. Verifica due volte il nome del dispositivo, e smonta con umount prima di operare.
  • Prima di staccare una chiavetta, smontala: con sudo umount /media/utente/NOME e poi sync (o con "Rimuovi in sicurezza" dall'ambiente grafico). Staccarla mentre il sistema sta ancora scrivendo può danneggiare i file.
  • Su Ubuntu compaiono molti dispositivi loop: sono i pacchetti snap, montati come dischi virtuali (loop0, loop1…). Per nasconderli usa lsblk -e 7.
  • Le dimensioni sono in multipli di 1024: un disco venduto come "250 GB" compare come circa 232,9 G, perché i produttori contano a 1000 (come visto per free --si). Con -b si ottengono i byte esatti.
  • Nei container e in alcune macchine virtuali, lsblk può mostrare i dischi della macchina ospite, o niente, perché dipende da cosa il sistema espone sotto /sys. L'elenco dei file system utilizzati dal container si legge meglio con df e findmnt.
  • Non mostra i dischi di rete: le cartelle condivise in rete (NFS, SMB) non sono dispositivi a blocchi e non compaiono; si vedono con findmnt o df. Lo stesso vale per i file system "virtuali" come /proc o tmpfs.
  • Lo stato di salute del disco non c'è: lsblk non dice se il disco è sano. Per i guasti servono altri strumenti, come smartctl del pacchetto smartmontools.

Riepilogo

ComandoCosa fa
lsblkAlbero di dischi e partizioni con dimensioni e montaggi
lsblk -fAggiunge file system, etichetta, UUID e spazio libero
lsblk -dSolo i dischi interi
lsblk -o NAME,SIZE,MODELSceglie le colonne da mostrare
lsblk /dev/sdcMostra solo quel disco e le sue partizioni
lsblk -lElenco piatto, senza albero
lsblk -pPercorsi completi (/dev/sda1)
lsblk -bDimensioni in byte esatti
lsblk -JOutput in formato JSON
lsblk -e 7Nasconde i dispositivi loop (snap)
blkidUUID ed etichette dei file system (spesso richiede sudo)
findmntAlbero dei montaggi, anche di rete
sudo umount / syncSmonta e completa le scritture prima di staccare