LVM su Linux: gestione dischi flessibile spiegata semplice

Pubblicato il 14/05/2026 Linux

Le partizioni classiche (msdos, gpt) sono rigide: una volta create, cambiare dimensione e' un dramma. Con LVM disegni volumi logici sopra i dischi fisici e li ridimensioni a caldo.

1. I tre concetti (l'unica cosa complessa)

  • PV (Physical Volume): un disco/partizione grezzo inizializzato per LVM. Esempi: /dev/sdb, /dev/nvme0n1p3
  • VG (Volume Group): pool di uno o piu' PV messi insieme. Esempio: vg_data = /dev/sdb + /dev/sdc
  • LV (Logical Volume): "partizione virtuale" scavata dentro il VG. Esempio: vg_data/lv_home di 200 GB

Su ogni LV monti un filesystem (ext4/xfs/btrfs). L'utente vede /home come al solito, ma sotto e' LVM.

2. Installazione tool

sudo apt install lvm2         # Debian/Ubuntu

3. Setup base: 2 dischi vuoti in un VG

# 1. Inizializza i PV
sudo pvcreate /dev/sdb /dev/sdc

# 2. Crea Volume Group "vg_data"
sudo vgcreate vg_data /dev/sdb /dev/sdc

# 3. Verifica
sudo vgs
#   VG      #PV #LV #SN Attr   VSize  VFree
#   vg_data   2   0   0 wz--n- 1.82t  1.82t

# 4. Crea 2 Logical Volume dentro
sudo lvcreate -L 200G -n lv_home vg_data
sudo lvcreate -L 500G -n lv_data vg_data

# 5. Formatta
sudo mkfs.ext4 /dev/vg_data/lv_home
sudo mkfs.ext4 /dev/vg_data/lv_data

# 6. Monta
sudo mkdir -p /mnt/home /mnt/data
sudo mount /dev/vg_data/lv_home /mnt/home
sudo mount /dev/vg_data/lv_data /mnt/data

4. Superpotere #1: allargare un LV a caldo

Il tuo /home di 200 GB e' pieno? Nessun problema, aggiungi 100 GB senza umount:

sudo lvextend -L +100G /dev/vg_data/lv_home
sudo resize2fs /dev/vg_data/lv_home         # per ext4
# oppure per xfs:
# sudo xfs_growfs /mnt/home

Fatto. Nessun reboot, nessun umount.

5. Superpotere #2: aggiungere un disco in caldo

Hai finito lo spazio del VG? Metti un disco nuovo:

sudo pvcreate /dev/sdd
sudo vgextend vg_data /dev/sdd
# Ora hai 2 TB in piu' nel VG, disponibili a qualsiasi LV

6. Superpotere #3: snapshot

Vuoi fare backup consistente di /var/lib/mysql mentre MySQL scrive? Snapshot LVM: instantaneo, blocca lo scrittura di MySQL per 1 secondo, poi lo libera.

# Crea snapshot da 20 GB del LV lv_home
sudo lvcreate -L 20G -s -n lv_home_snap /dev/vg_data/lv_home
# Monta lo snapshot read-only
sudo mount -o ro /dev/vg_data/lv_home_snap /mnt/snap
# Backup indisturbato
sudo rsync -avz /mnt/snap/ backup-server:/backup/
# A backup terminato:
sudo umount /mnt/snap
sudo lvremove /dev/vg_data/lv_home_snap

7. Ridurre un LV (attenzione)

Riducendo devi PRIMA rimpicciolire il filesystem, POI il LV. Sbagliare ordine = perdita dati.

sudo umount /mnt/home
sudo e2fsck -f /dev/vg_data/lv_home
sudo resize2fs /dev/vg_data/lv_home 150G   # filesystem prima
sudo lvreduce -L 150G /dev/vg_data/lv_home # LV dopo
sudo mount /dev/vg_data/lv_home /mnt/home

8. Comandi che userai il 90% del tempo

sudo pvs                    # elenca PV
sudo vgs                    # elenca VG
sudo lvs                    # elenca LV
sudo lvdisplay              # dettagli LV
sudo lvextend -l +100%FREE /dev/vg/lv    # allarga usando TUTTO lo spazio libero

9. LVM su RAID software (mdadm)

Best practice per server: mdadm (RAID) sotto, LVM sopra. Cosi' hai ridondanza fisica + flessibilita' logica.

# RAID1 di 2 dischi
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

# LVM sopra il RAID
sudo pvcreate /dev/md0
sudo vgcreate vg_raid /dev/md0

10. Migrazione da partizioni classiche a LVM

Ubuntu 22.04+ installer offre l'opzione "Usa LVM" al setup. Su sistema gia' installato, migrare richiede boot da live CD + pvmove: fattibile ma non triviale. Se stai per re-installare: attivalo, non te ne pentirai.

Trappola classica: quando fai lvreduce passare il numero SBAGLIATO (positivo o negativo) e' un disastro. Molti tools accettano -L +50G (aggiunge 50) e -L 50G (imposta A 50G, riducendo se prima era piu' grande). Sono comandi diversi con conseguenze opposte. Doppio-check e SEMPRE backup prima di operazioni riduttive.