Marvin Pascale

[B.Log]

20 Giugno 2020

Logical Volume Management (LVM)

Logical Volume Management (LVM) sfrutta una funzione del kernel Linux ( device-mapper ) per offrire un sistema di partizioni che sia indipendente dall’hardware. Di fatto LVM fornisce un’astrazione e al contempo aggiunge interessanti funzionalità.

Le componenti base di LVM sono:

  • Volume Fisico (Physical volume - PV): un disco (o frazione di disco) sul quale è possibile creare un gruppo di volumi;
  • Gruppo di Volumi (Volume group - VG): uno o più volumi fisici usati come un unico volume di archiviazione;
  • Volume Logico (Logical volume - LV): una “partizione virtuale/logica” che risiede in un volume logico;
  • Estensione Fisica (Physical extent - PE): una piccola porzione di un disco che può essere assegnata ad un volume logico;

Con LVM sarà più semplice gestire il proprio storage.

Ad esempio, sarà possibile:

  • usare un qualsiasi numero di dischi come se fosse un unico disco(VG);
  • avere partizioni(LV) distribuite su diversi dischi;
  • ridimensionare/creare/eliminare partizioni(LV) e dischi(VG);
  • etichettare i propri dischi(VG) e le proprie partizioni(LV);
  • creare partizioni(LV) e ridimensionarle “dinamicamente” appena si rende necessario.

Ma in soldoni, che vantaggi ho?

  • Ridimensionamento online/live;
  • non sono più necessarie partizioni estese;
  • ridimensionare le partizioni senza preoccuparsi del loro ordine sul disco;
  • migrazione online/live delle partizioni usate da servizi senza doverli riavviare.

In Pratica

Creare i volumi fisici(Physical volumes)

Prima di poter disporre dello spazio storage sarà necessario inizializzare le partizioni così che possano essere utilizzate da LVM. Nell’esempio userò parted.

# parted /dev/sdb mklabel gpt
# parted /dev/sdb mkpart pv01 ext4 0% 50%

Inizializziamo il volume fisico.

# pvcreate /dev/sdb1

Sostituire /dev/sdb1 con la partizione su cui si vuole creare il volume fisico. Questo comando crea un’intestazione sulle partizioni così che possano essere utilizzate da LVM. E’ possibile monitorare i volumi fisici creati con il comando:

# pvdisplay

NB: Se utilizzi un disco SSD ottimizza la creazione con:

# pvcreate --dataalignment 1m /dev/vdb1

Creare gruppi di volumi (Volume group)

Il prossimo passo consiste nel creare un gruppo di volumi (VG) sul volume fisico appena creato.

# vgcreate dati /dev/sdb1

Sarà possibile utilizzare un qualsiasi altro nome invece di dati per il VG durante la sua creazione. Verifichiamo quanto fatto con:

# vgdisplay

NB: Sarà possibile creare più di un VG.

Se volessimo invece espandere un VG:

# vgextend dati /dev/sd??

Creare i volumi logici (Logical Volumes)

In questo passaggio creeremo il volume logico sul gruppo di volumi dati. Creare il volume logico con il seguente comando specificando il nome del volume logico, la sua dimensione, ed il gruppo di volumi dove risiederà:

# lvcreate -L 10G dati -n importanti

Questo comando creerà un volume logico al quale sarà possibile accedere con /dev/mapper/dati-importanti o /dev/dati/importanti. Come per il gruppo di volumi, sarà possibile utilizzare qualsiasi nome per il volume logico durante la sua creazione ( -n NOME).

Per creare una partizione di swap su di un volume logico, sarà necessario un argomento aggiuntivo:

# lvcreate -C y -L 4G dati -n swap

L’opzione -C y è usata per creare una partizione contigua, cioè la partizione di swap non sarà allocata su più di un disco né su estensioni fisiche (PE) non contigue.

Se si vuole utilizzare tutto lo spazio libero di un gruppo di volumi, utilizzare il seguente comando:

# lvcreate -l +100%FREE dati -n importanti

Si possomo controllare i volumi logici esistenti con:

# lvdisplay

Se volessimo invece espandere un LV con file system ext4:

# lvextend -l+100%FREE /dev/dati/importanti
# resize2fs /dev/dati/importanti

Creare i filesystem ed effettuare il mount dei volumi logici

Adesso i volumi logici dovrebbero essere situati in /dev/mapper/ e /dev/NomeGruppoDiVolumi. Se non riuscissi a trovarli, puoi usare il prossimo comando per caricare il modulo per rendere accessibili i gruppi di volumi:

# vgscan
# vgchange -ay

Adesso sarà possibile creare i filesystem sui volumi logici ed effettuarne il mount come per le normali partizioni:

# mkfs.ext4 /dev/dati/importanti
# mount /dev/dati/importanti /opt/dati

Mettiamo le mani in pasta

Nell’esempio:

Dischi fisici
  Disco (/dev/sdb):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    |pv01 20GB (Volume fisico)     |pv02        20GB (Volume fisico)  |
    |/dev/sdb1                     |/dev/sdb2                         |
    |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |

Gruppi di volumi
  dati (/dev/dati):
   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  |dati 40GB /dev/dati (Gruppo di Volumi)                             |
  | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
  |pv01 20GB (Volume fisico)         |pv02      20GB (Volume fisico)  |
  |/dev/sdb1                         |/dev/sdb2                       |
  |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |

Volumi logici
  Gruppo di volumi (/dev/dati/ = /dev/sdb1 + /dev/sdb2):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
   |importanti 40GB (Volume logico)                                    |
   |/dev/dati/importanti                                               |
   |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
   |dati 40GB /dev/dati (Gruppo di Volumi)                             |
   | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
   |pv01 20GB (Volume fisico)         |pv02      20GB (Volume fisico)  |
   |/dev/sdb1                         |/dev/sdb2                       |
   |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |


Musica: The Entertainer by Kevin MacLeod

Link: https://incompetech.filmmusic.io/song/5765-the-entertainer

License: http://creativecommons.org/licenses/by/4.0/


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: