LVM: Logical Volume Group

LVM è un gestore di volumi che permette di organizzare in modo più logico le partizioni sulla nostra Linux Box.

Uno dei problemi che affligge il classico sistema di partizionamento è la difficolta di ridimensionare la dimensione delle partizioni create. In passato ci dovevamo affidare a tool di terze parti o spostare tutti i dati delle partizioni in un disco capiente, riorganizzare le partizioni e travasare nuovamente i dati. Con LVM si supera questa difficoltà in quanto al posto delle partizioni vengono creati dei volumi logici che possono essere ridimensionati facimente ed anche “a caldo”.

Con LVM è possibile creare un volume unendo uno o più dischi fisici in modo da avere un unico grande volume. Un'altra caratteristica degna di nota e che LVM offre anche la possibilità di creare degli “snapshot” in modo da ripristinare facilmente i nostri dati.

Con LVM abbiamo:

  • Physical Volume: Uno o più dischi che vanno a creare il Volume Group
  • Volume Group: Il contenitore dei Logical Volume
  • Logical Volume: Volume che contiene i nostri dati, paragonabile alla vecchia partizione.
Physical volumes
Disco 1 Disco 2
/dev/sda (100GB) /dev/sdb (100GB)
/dev/sda1 (50GB) /dev/sda2 (50GB) /dev/sdb1 (50GB) /dev/sdb2 (50GB)
Volume Group
/dev/storage (/dev/sda + /dev/sdb = 200GB)
Logical Volume
/dev/storage/root
(20GB)
/dev/storage/home
(80GB)
/dev/storage/log
(10GB)
/dev/storage/backup
(40GB)
/dev/storage/web
(50GB)

Nell'esempio qui sopra abbiamo due dischi da 100GB l'uno partizionati a sua volta con due volumi da 50GB. Da questi due dischi è stato creato un unico volume da 200GB. Successivamente sono stati creati diversi volumi logici.

Utilizzate i comandi descritti in questo articolo con cautela in quanto stiamo lavorando con i dischi e se qualcosa va storto possiamo perdere i nostri dati. Se siamo in vena di esperimenti prendiamo una penna USB vuota!

Prima di iniziare è necessario verificare che sul nostro sistema sia installato il pacchetto lvm2.

La maggior parte delle distribuzioni inseriscono di default il pacchetto nell'installazione base.

Il pacchetto LVM mette a disposizione diversi comandi per amministrare i nostri volumi LVM.

Comando Descrizione
Physical Volume pvcreate Inizializza un disco per LVM
pvscan Elenca tutti i volumi fisici presenti nel nostro sitema
pvdisplay Mostra le informazioni sui volumi fisici presenti nel nostro sitema
Volume Group vgcreate Crea un gruppo di volumi LVM
vgscan Elenca tutti i gruppi di volumi presenti nel nostro sitema
vgdisplay Mostra le informazioni sui gruppi di volumi presenti nel nostro sitema
vgextend Aggiunge uno o più volumi fisici ad un gruppo di volumi gia esistente
vgreduce Rimuove uno o più volumi fisici da un gruppo di volumi
Logical Volume lvcreate Crea un volume logico
lvscan Elenca tutti i volumi logici presenti nel nostro sitema
lvdisplay Mostra le informazioni sui volumi logici presenti nel nostro sitema

Partizionare i dischi

Il prossimo passo è creare con fdisk o cfdisk una partizione di tipo Linux LVM (identificativo 8E o 0x08e) sul disco che abbiamo intenzione di usare con LVM.

Creiamo il Physical Volume

Il prossimo passo è inizializzare il disco con il comando pvcreate. Questo comando riserva un'area di dati sul disco per permettere ad LVM per scrivere le informazioni necessarie per gestire il volume.

# pvcreate /dev/sda

Se dobbiamo utilizzare più dischi con LVM è possibile indicare nello stesso comando più dispositivi:

# pvcreate /dev/sda /dev/sdb1

Creiamo il Volume Group

Adesso creiamo il gruppo di volumi ed assegnamogli un nome.

# vgcreate storage /dev/sda

Creiamo i Logical Volume

Prossimo passo è creare i singoli volumi logici dimensionandoli in base alle nostre necessità.

# lvcreate storage -L 10G -n root
# lvcreate storage -L 5G -n swap 
# lvcreate storage -L 50G -n home

Nell'esempio abbiamo creato 3 volumi logici chiamati root (da 10G), swap (da 5G) e home (da 50G).

Per assegnare ad un volume tutto lo spazio rimasto sul VolumeGroup possiamo usare il comando con questa sintassi:

# lvcreate storage -l 100%FREE -n home

Formattiamo le partizioni

Ultimo importante passo è formattare le partizioni con il filesystem più adatto allo scopo del volume. Ad esempio:

# mkfs.ext4 /dev/storage/root
# mkswap /dev/storage/swap
# mkfs.ext4 /dev/storage/home

Ultimi ritocchi

Editiamo /etc/fstab

Se abbiamo creato dei volumi con LVM per installare la nostra distribuzione assicuriamoci che /etc/fstab sia configurato correttamente.

LVM su dischi rimuovibili

Se al posto di un disco rigido abbiamo utilizzato un HD esterno o pennetta USB prima di rimuoverlo completamente è necessario disattivare il VolumeGroup altrimenti avremo una serie di errori:

# vgscan
[...]
/dev/storage/home: read failed after 0 of 4096 at 10737352704: Errore di input/output
/dev/storage/home: read failed after 0 of 4096 at 10737410048: Errore di input/output
/dev/storage/home: read failed after 0 of 4096 at 0: Errore di input/output
/dev/storage/home: read failed after 0 of 4096 at 4096: Errore di input/output

Per disattivare il VolumeGroup:

# vgchange -an <nome del gruppo>

Nel caso fosse necessario attivarlo:

# vgchange -ay <nome del gruppo>