LVM - Gestió de volumns lògics

LVM és l’acrònim de Logical Volume Manager, que en computació fa referència a una forma d’assignar espai de forma més flexible que les formes tradicionals com la partició. Un volume manager és una capa de gestió d’emmagatzematge que abstrau els discs físics, que permet crear, redimensionar i administrar espais d’emmagatzematge de manera flexible i dinàmica sense haver de reiniciar el sistema ni canviar particions físicament. També permet l’administració de volums definits per grups d’usuaris, atorgant-li a l’administrador del sistema bregar amb grups de volums amb noms més sensibles com “desenvolupament” o “sistema” en comptes de noms de discos físics que poc ens diuen com “sda” o “sdb”.

1. Arquitectura d’LVM

LVM es descompon en tres capes:

Capa Funció
Volums físics (PV) Discs o particions físiques preparades per a LVM (pvcreate)
Grups de volums (VG) Pool d’emmagatzematge que agrupa un o més PV (vgcreate)
Volums lògics (LV) Volums lògics creats dins del VG, que comporten com particions (lvcreate)
Anatomia d’LVM

2. Avantatges d’utilitzar LVM en un sistema petit

Una de les decisions que afronta un usuari instal·lant GNU/Linux és com particionar el disc dur. La necessitat d’estimar quant espai serà necessari per al sistema, per als temporals o per les dades personals, pot convertir-se en alguna cosa problemàtica, de manera que molts usuaris opten per crear una partició que ocupi tot el disc i allà introduir les dades. Encara havent estimat correctament quant espai es necessita per a /home, /usr, /tmp, o qualsevol altre directori important, és bastant comú que ens quedem sense espai en aquestes particions, quan tenim espai de sobres en alguna altra.

Amb l’ús d’un gestor de volums lògics, el disc complet pot ser assignat a un únic grup lògic i definir diferents volums lògics per emmagatzemar /home o altres directoris. En el cas que ens quedem sense espai, per exemple, a /home, i tenim espai a /opt, podríem redimensionar /home i /opt i utilitzar l’espai que li hem tret a /opt i afegir-lo a /home. Cal tenir en compte, que per fer això, el nostre sistema de fitxers ha de suportar el redimensionat per dalt i per baix, com ReiserFS.

Una altra alternativa seria deixar una certa quantitat d’espai del disc sense assignar i quan fos necessari, expandir el volum.

3. Avantatges d’utilitzar LVM en un sistema gran

Administrar un sistema amb molts discos és una feina que consumeix temps, i es fa particularment complex si el sistema conté discs de diferents mides. Balancejar els requisits d’emmagatzematge de diferents usuaris (sovint conflictius) pot ser una tasca molt laboriosa i complexa.

Els grups d’usuaris (diguem-ne per exemple administració, desenvolupament, etc.) Poden tenir els seus volums lògics i aquests poden créixer el que sigui necessari, i l’administrador pot efectuar les operacions oportunes sobre aquests volums.

Quan un nou disc s’afegeix al sistema, no cal moure les dades dels usuaris. Simplement, s’afegeix el nou disc al grup lògic corresponent i s’expandeixen els volums lògics tot el que es consideri adient. També es poden migrar les dades de discos antics a altres nous, de forma totalment transparent a l’usuari.

4. Inconvenients i precaucions

🔴
Precaució

Fes sempre proves en entorns no productius. La manipulació incorrecta de LVM pot provocar una pèrdua irreversible de dades.

5. Ordres essencials

5.1. Preparar discs o particions

# Format amb tipus 8e (Linux LVM) si cal
fdisk /dev/sdb → t → 8e

# Crear PV
pvcreate /dev/sdb /dev/sdc

# Informació
pvs | pvdisplay

5.2. Gestionar grups de volums

vgcreate vg_dades /dev/sdb /dev/sdc
vgextend vg_dades /dev/sdd   # Afegir disc
vgreduce vg_dades /dev/sdc   # Eliminar (després de migrar dades)
vgs | vgdisplay

5.3. Gestionar volums lògics

lvcreate -L 50G -n lv_sistema vg_dades
lvcreate -l 100%FREE -n lv_rest vg_dades  # Usa tot l'espai lliure

# Ampliar
lvextend -L +20G /dev/vg_dades/lv_sistema
lvextend -l 100%FREE /dev/vg_dades/lv_rest

# Reduir (RISC, fa primer resize2fs o xfs_repair)
lvreduce -L -10G /dev/vg_dades/lv_sistema

5.4. Sistemes de fitxers

# Crear ext4
mkfs.ext4 /dev/vg_dades/lv_sistema

# Ampliar online (ext4/xfs)
resize2fs /dev/vg_dades/lv_sistema   # ext4
xfs_growfs /mnt/point                # xfs

# Snapshots
lvcreate -s -L 1G -n snap_lv /dev/vg_dades/lv_sistema

6. Monitoratge i diagnòstic

Comanda Ús
lvs / lvdisplay Llista LV
vgs / vgdisplay Llista VG
pvs / pvdisplay Llista PV
lvm fullreport Informació completa
dmsetup ls Estructura de dispositius mappats

7. Bones pràctiques

  1. Còpia de seguretat de metadades LVM abans de canvis: vgcfgbackup
  2. Deixa espai lliure al VG per a futures ampliacions.
  3. Verifica sempre amb df -h i lvs després de canvis.
  4. Documenta l’estructura LVM del teu sistema.
  5. Actualitza lvm2 per a correccions de seguretat i compatibilitat.

8. Gestionar LVM

Podem gestionar els LVM en un entorn gràfic amb el programa kvpm (KDE). El programa system‑config‑lvm (Gnome) tan sols mostra gràficament la distribució dels volums del LVM.

També podem fer servir directament les ordres de LVM des del terminal:

Ordre Descripció
pvchange Canvia atributs d’un volum físic.
pvck Comprova metadades del volum físic.
pvcreate Inicialitza un disc o partició per ser usat com a LVM.
pvdisplay Mostra els atributs d’un volum físic.
pvmove Mou extensions físiques.
pvremove Elimina un volum físic.
pvresize Canvia la mida d’un disc o partició en ús per LVM2.
pvs Informa sobre els volums físics.
pvscan Analitza tots els discos a la recerca de volums físics.
vgcfgbackup Crea una còpia de seguretat de l’àrea del descriptor del grup de volums.
vgcfgrestore Restaura una còpia de seguretat de l’àrea del descriptor del grup de volums.
vgchange Canvia els atributs d’un grup de volums.
vgck Comprova les metadades d’un grup de volums.
vgconvert Converteix el format de metadades del grup de volums.
vgcreate Crea un grup de volums.
vgdisplay Mostra els atributs dels grups de volums.
vgexport Fa grups de volums desconeguts per al sistema.
vgextend Afegeix volums físics a un grup de volums.
vgimport Fa grups de volums exportats coneguts pel sistema.
vgimportclone Importa i canvia el nom del grup de volums duplicat (per exemple, una instantània de maquinari).
vgmerge Combina dos grups de volums.
vgmknodes Recrea el directori del grup de volums i arxius especials del volum lògic
vgreduce Redueix un grup de volums mitjançant l’eliminació d’un o més volums físics.
vgremove Elimina un grup de volums.
vgrename Canvia el nom d’un grup de volums.
vgs Informa sobre els grups de volums.
vgscan Analitza tots els discos dels grups de volums i reconstrueix les caus.
vgsplit Divideix un grup de volums en dos, movent els volums lògics del grup de volums a un altre movent tots els volums físics.
lvchange Canvia els atributs d’un volum lògic.
lvconvert Converteix un volum lògic de lineal a mirall o instantània.
lvcreate Crea un volum lògic en un grup de volums existent.
lvdisplay Mostra els atributs d’un volum lògic.
lvextend Amplia la mida d’un volum lògic.
lvmchange Canvia atributs del gestor de volums lògics.
lvmdiskscan Analitza tots els dispositius visibles per LVM2.
lvmdump Crea bolcats d’informació per a fins de diagnòstic.
lvreduce Redueix la mida d’un volum lògic.
lvremove Elimina un volum lògic.
lvrename Canvia el nom d’un volum lògic.
lvresize Canvia la mida d’un volum lògic.
lvs Informa sobre els volums lògics.
lvscan Analitza tots els discs a la recerca de volums lògics.

9. Exemples

Exemple 1

Els passos que haurem de seguir per ampliar amb l’eina kvpm són:

  1. Crear una nova taula de particions en el nou disc
  2. Afegir una partició en el nou disc
  3. Crear un volum físic amb la nova partició
  4. Estendre el grup de volums existent
  5. Estendre el volum lògic existent

Exemple 2

Els passos que haurem de seguir per ampliar, per exemple, /home des del terminal són:

En aquest exemple tenim dos discs durs de 8 GB cadascú i hem creat un grup de volums anomenat grup de 16 GB dins del qual s’han definit tres volums lògics: arrel (6 GB), casa (9,6 GB) i intercanvi (0,4 GB). En el volum lògic arrel hem muntat el / i en el volum lògic casa hem muntat /home. El volum lògic intercanvi s’ha fet servir per al swap.

Amb l’ordre df veiem l’estat inicial

df -h
S. fitxers Mida En ús Lliure %Ús Muntat a 
/dev/mapper/grup-arrel 6,0G 3,0G 2,8G 52% / 
udev 494M 4,0K 494M 1% /dev 
tmpfs 201M 800K 200M 1% /run 
none 5,0M 0 5,0M 0% /run/lock 
none 501M 152K 501M 1% /run/shm 
/dev/mapper/grup-casa 9,6G 274M 8,8G 3% /home 

Després d’haver afegit físicament el nou disc, que és de 10 GB, el particionem

fdisk /dev/sdc
El dispositiu no conté ni taula de particions DOS vàlida, ni cap etiqueta de disc Sun, SGI o OSF 
Building a new DOS disklabel with disk identifier 0x1b8c2b90. 
Changes will remain in memory only, until you decide to write them. 
After that, of course, the previous content won't be recoverable. 

Avís: el senyalador 0x0000 invàlid de la taula de particions 4 es corregirà amb w(escriu) 

Ordre (m per a obtenir ajuda): o
Building a new DOS disklabel with disk identifier 0x4c5c816b. 
Changes will remain in memory only, until you decide to write them. 
After that, of course, the previous content won't be recoverable. 

Avís: el senyalador 0x0000 invàlid de la taula de particions 4 es corregirà amb w(escriu) 

Ordre (m per a obtenir ajuda): n

Partition type: 
 p primary (0 primary, 0 extended, 4 free) 
 e extended 
Select (default p): p
Nombre de partició (1-4, valor per defecte 1): 
S'està utilitzant el valor per defecte 1 
Primera sector (2048-20971519, valor per defecte 2048): 
S'està utilitzant el valor per defecte 2048 
Last sector, +sectors or +size{K,M,G} (2048-20971519, valor per defecte 20971519): 
S'està utilitzant el valor per defecte 20971519 

Ordre (m per a obtenir ajuda): w 
S'ha modificat la taula de particions. 

S'està cridant ioctl() per rellegir la taula de particions. 
S'estan sincronitzant els discs.

Creem el volum físic

pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created 

Estenem el grup de volums

vgextend grup /dev/sdc1
Volume group "grup" successfully extended

Estenem el volum lògic casa

lvextend /dev/mapper/grup-casa /dev/sdc1
Extending logical volume casa to 19,53 GiB
Logical volume casa successfully resized 

Redimensionem el volum lògic

resize2fs /dev/mapper/grup-casa
resize2fs 1.42 (29-Nov-2011) 
El sistema de fitxers a /dev/mapper/grup-casa està muntat a /home; cal un canvi de mida en línia 
old_desc_blocks = 1, new_desc_blocks = 2 
Performing an on-line resize of /dev/mapper/grup-casa to 5120000 (4k) blocks. 
The filesystem on /dev/mapper/grup-casa is now 5120000 blocks long. 

Finalment, comprovem que la mida de /home s’ha incrementat

df -h
S. fitxers Mida En ús Lliure %Ús Muntat a 
/dev/mapper/grup-arrel 6,0G 3,0G 2,8G 52% / 
udev 494M 4,0K 494M 1% /dev 
tmpfs 201M 800K 200M 1% /run 
none 5,0M 0 5,0M 0% /run/lock 
none 501M 152K 501M 1% /run/shm 
/dev/mapper/grup-casa 20G 274M 19G 2% /home 

10. LVM vs. altres solucions

Característica LVM mdadm (RAID) ZFS/Btrfs
Gestió d’espai Excel·lent Limitat Integrat
Tolerància a fallades No (combinar amb RAID)
Snapshots Suportat No Natiu
Complexitat Mitjana Alta Alta

11. Recursos oficials

Versions d’aquest document

Domini Públic (CC0)