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/CHIAVETTALe colonne:
NAME: il nome del dispositivo, sotto/dev. I dischi sonosda,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 chiavettasdc;SIZE: la dimensione (Mmebibyte,Ggibibyte,Ttebibyte, multipli di 1024);RO(read only): 1 se è di sola lettura;TYPE:diskper un disco intero,partper una partizione; altri valori sonolvm,crypt,raid1,loop,rom;MOUNTPOINTS: dove è montato.[SWAP]indica una partizione usata come swap (vedi l'articolo sufree); 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/datiL'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.0Con -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 5Il 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 /datiCon 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/datiNelle 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
$ syncComandi 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 esempioNAME,SIZE,TYPE,MODEL);-Ole 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 dispositiviloop(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:
sdboggi può diventaresdcdomani, se cambi l'ordine dei collegamenti o aggiungi un disco. In/etc/fstabe negli script identifica le partizioni con l'UUID (o l'etichetta), non con il nome. - I nomi dipendono dal tipo di disco:
sda,sdbper i dischi SATA e USB;nvme0n1(con partizioninvme0n1p1) per gli SSD NVMe;vdaper i dischi delle macchine virtuali;mmcblk0per le schede SD (Raspberry Pi);sr0per il lettore ottico. - Un disco senza punto di montaggio non è un disco vuoto: la colonna
MOUNTPOINTSvuota dice solo che al momento non è montato. Può contenere dati importanti: prima di formattare, guardaFSTYPEe controlla il contenuto montandolo in sola lettura. lsblklegge, ma i comandi che usi dopo scrivono:dd,mkfs,fdiskepartedcancellano i dati senza chiedere conferma. Verifica due volte il nome del dispositivo, e smonta conumountprima di operare.- Prima di staccare una chiavetta, smontala: con
sudo umount /media/utente/NOMEe poisync(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 usalsblk -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-bsi ottengono i byte esatti. - Nei container e in alcune macchine virtuali,
lsblkpuò 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 condfefindmnt. - Non mostra i dischi di rete: le cartelle condivise in rete (NFS, SMB) non sono dispositivi a blocchi e non compaiono; si vedono con
findmntodf. Lo stesso vale per i file system "virtuali" come/procotmpfs. - Lo stato di salute del disco non c'è:
lsblknon dice se il disco è sano. Per i guasti servono altri strumenti, comesmartctldel pacchettosmartmontools.
Riepilogo
| Comando | Cosa fa |
|---|---|
lsblk | Albero di dischi e partizioni con dimensioni e montaggi |
lsblk -f | Aggiunge file system, etichetta, UUID e spazio libero |
lsblk -d | Solo i dischi interi |
lsblk -o NAME,SIZE,MODEL | Sceglie le colonne da mostrare |
lsblk /dev/sdc | Mostra solo quel disco e le sue partizioni |
lsblk -l | Elenco piatto, senza albero |
lsblk -p | Percorsi completi (/dev/sda1) |
lsblk -b | Dimensioni in byte esatti |
lsblk -J | Output in formato JSON |
lsblk -e 7 | Nasconde i dispositivi loop (snap) |
blkid | UUID ed etichette dei file system (spesso richiede sudo) |
findmnt | Albero dei montaggi, anche di rete |
sudo umount / sync | Smonta e completa le scritture prima di staccare |