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_homedi 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.
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.