Linux LVM In a Nutshell
He tenido que estudiar un poco de LVM aqui les dejo un documento digerido…
1. LVM Basics.
PV: Physical Volume estos regularmente son Discos Duros internos o de SAN o algun iSCSI.
PE: Physical Extent, estos son Chunks (Pequeñas partes) del PV.
LE: Logicall Extent, Son Chunks de un Logical Volume, los LE estan mapeados a los PE.
VG: Volume Group: Estos son la union de varios PV en una unidad logica.
LV: Volumen Logico, estos pueden ser de tres tipos
Linear Volume, Stripe Volume y Mirror.
El Label de LVM esta situado en el segundo sector de 512K al inicio del HD.
Metadatos, LVM2 Permite 0, 1 o 2 copias de seguridad de los metadados, estas se definen al creal el PV y no pueden ser cambiadas despues de su creación.
Estas copias se encuentran al inicio, justo despues de el Label, y al final del PV.
Logical Volumes:
Como dije en lineas anteriores LVM nos permite hacer tres tipos de Volumenes.
Linear Volume:
Este volumen es linear es decir los datos se escriben en los PE secuencialmente, desde mi punto de vista un LV de este tipo es muy peligroso cuando se involucran mas de un solo PV, ya que si se daña un PV todos los datos se pierden, es algo asi como un Raid Concatenado.
Striped Volume: Este tipo de Volumen tambien es como un raid concat, solo que la escritura de los datos se distribuye en los PV mediante un algoritmo de Round Robin, este tipo de LV nos permite alcanzar velocidades de I/O superiores pues se lee y escribe en diferentes PV aumentando el Ancho de Banda para las operaciones de I/O, a mi punto de vista se tiene el mismo problema con los Volumenes lineares.
Mirrored Volume:
En LVM la implementación de Mirror requiere de un tercer PV para guardar los Logs, los datos son copiados de una cara del mirror a la otra en bloques de 512 K, este tipo de LVs nos dan redundancia ya que en ambas caras tenemos los mismos datos, si llega a fallar una de las caras LVM automacticamente convierte el Mirror en un Volumen Linear.
Existe otro Tipo de Volumen llamado Snapshot, como su nombre lo dice es como una fotografia del LV, esto nos permite hacer backups en caliente de los sistemas de archivos.
Administrando LVM:
Physical Volume Administration:
Para poder hacer uso de LVM primero tenemos que inicializar los Discos (De ahora en adelante les llamaremos PV).
pvcreate [-d|--debug] [-f[f]|--force [--force]] [-y|--yes] [-h|--help]
[-t|--test] [-v|--verbose] [--labelsector] [-M|--metadatatypetype]
[--metadatacopies#copies] [--metadatasizesize] [--restorefilefile]
[--setphysicalvolumesizesize] [-u|--uuiduuid] [--version]
[-Z|--zeroy/n] PhysicalVolume [PhysicalVolume...]
Ejecutamos lo siguiente
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdd1 /dev/sdd2
Una cosa muy importante es que a diferencia de Veritas Volume Manager por ejemplo en LVM se pueden usar particiones, VxVM solo puede ser usado con Discos Enteros.
Para ver los PVs que tenemos ejecutamos
root@fenix:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 mirrorvg lvm2 a- 18.63G 12.63G
/dev/sdb2 linearvg lvm2 a- 18.62G 18.62G
/dev/sdd1 mirrorvg lvm2 a- 18.62G 17.62G
/dev/sdd2 mirrorvg lvm2 a- 18.62G 12.62G
Para desplegar informacion detallada de un PV
pvdisplay
root@fenix:~# pvdisplay
--- Physical volume ---
PV Name /dev/sdb2
VG Name linearvg
PV Size 18.62 GB / not usable 1.34 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 4767
Free PE 4767
Allocated PE 0
PV UUID gEEa9d-V5dv-jIdZ-o9Sa-p89K-W0Fk-fSFVws
para eliminar un PV
pvremove /dev/XXXXX
Volume Group Administration:
Una ves que tenemos inicalizados los PVs podemos crear VGs
para eso usamos vgcreate
vgcreate [--addtag Tag] [--alloc AllocationPolicy] [-A|--autobackup
{y|n}] [-c|--clustered {y|n}] [-d|--debug] [-h|--help] [-l|--maxlogi‐
calvolumes MaxLogicalVolumes] [-M|--metadatatypetype] [-p|--maxphysi‐
calvolumes MaxPhysicalVolumes] [-s|--physicalextentsize PhysicalExtent‐
Size[kKmMgGtT]] [-t|--test] [-v|--verbose] [--version] VolumeGroupName
PhysicalVolumePath [PhysicalVolumePath...]
para crear un volume group de nombre testvg
vgcreate testvg /dev/sdb1 /dev/sdb2 /dev/sdd1 /dev/sdd2
para ver los VGs que tenemos creados
root@fenix:~# vgs -a -o +devices
VG #PV #LV #SN Attr VSize VFree Devices
mirrorvg 3 2 0 wz--n- 55.88G 42.88G mirrorFs_mimage_0(0),mirrorFs_mimage_1(0)
mirrorvg 3 2 0 wz--n- 55.88G 42.88G /dev/sdd1(1),/dev/sdb1(1280),/dev/sdd2(1280)
mirrorvg 3 2 0 wz--n- 55.88G 42.88G /dev/sdd1(0)
mirrorvg 3 2 0 wz--n- 55.88G 42.88G /dev/sdb1(0)
mirrorvg 3 2 0 wz--n- 55.88G 42.88G /dev/sdd2(0)
LVs Administration:
Para crear un LV hacemos uso del comando
lvcreate
lvcreate [--addtag Tag] [--alloc AllocationPolicy] [-A/--autobackup y/n] [-C/--contiguous y/n] [-d/--debug] [-h/-?/--help] [-i/--stripes Stripes
[-I/--stripesize StripeSize]] {-l/--extents LogicalExtentsNumber[%{VG|PVS|FREE}] |
-L/--size LogicalVolumeSize[kKmMgGtT]} [-M/--persistent y/n] [--minor minor] [-m/--mirrors Mirrors [--nosync] [--mirrorlog {disk|core}]
[--corelog] [-R/--regionsize MirrorLogRegionSize]] [-n/--name LogicalVolumeName] [-p/--permission r/rw] [-r/--readahead ReadAheadSec‐
tors|auto|none] [-t/--test] [-v/--verbose] [-Z/--zero y/n] VolumeGroupName [PhysicalVolumePath...]
Opciones:
-I nos permite especificar el numero de Stripes (Al Especificar este parametro nuesto volumen deja de ser Linear y se convierte en un stripe, podemos poner sl Stripe Number hasta el numero de PV con el que cuente el VG donde crearemos el Volumen).
-l el tamaño del volumen en LE Numbers.
-L El tamaño del Volumen en gKm (Giga Bytes, Kilo Bytes o Mega Bytes)
-m con este indicamos los numeros de caras que queremos que tenga un LV Tipo Mirror.
–mirrorlog esta opcion especifica el tipo de log para un mirror el default es mirror y requerira de un disco extra para guardar el log (Se discutio en la parte superior del ducumento), existe la opcion de core este tipo de log esta en memoria y el usuarlo causara que cada vez que se reinicie la pc o se reactive el LV el mirror tenga que hacer sync.
Para verificar la configuracion de un LV ejecutamos
lvs -a -o +devices
root@fenix:~# lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
mirrorFs mirrorvg mwi-a- 5.00G mirrorFs_mlog 100.00 mirrorFs_mimage_0(0),mirrorFs_mimage_1(0)
[mirrorFs_mimage_0] mirrorvg iwi-ao 5.00G /dev/sdb1(0)
[mirrorFs_mimage_1] mirrorvg iwi-ao 5.00G /dev/sdd2(0)
[mirrorFs_mlog] mirrorvg lwi-ao 4.00M /dev/sdd1(0)
stripedVol mirrorvg -wi-a- 3.00G /dev/sdd1(1),/dev/sdb1(1280),/dev/sdd2(1280)
Para verificar que un Mirror si tenga redundancia:
root@fenix:~# lvs -a -o +seg_pe_ranges
LV VG Attr LSize Origin Snap% Move Log Copy% Convert PE Ranges
mirrorFs mirrorvg mwi-a- 5.00G mirrorFs_mlog 100.00 mirrorFs_mimage_0:0-1279 mirrorFs_mimage_1:0-1279
[mirrorFs_mimage_0] mirrorvg iwi-ao 5.00G /dev/sdb1:0-1279
[mirrorFs_mimage_1] mirrorvg iwi-ao 5.00G /dev/sdd2:0-1279
[mirrorFs_mlog] mirrorvg lwi-ao 4.00M /dev/sdd1:0-0
podemos ver que el Mirror mirrorFs tiene sus extents en /dev/sdb1:0-1279 y en /dev/sdd2:0-1279
Advanced Procedures:
Resize de un Mirror:
Esta operacion se puede hacer en Caliente sin necesidad de interrumpir la actividad de I/O del FS.
1) Hay que convertir el LV a Linear
lvconvert -m0 testvg/testMirror
2) Hacer el Resize del LV
lvextend -L+10g /dev/testvg/testMirror
3) Resize al FileSystem
resize2fs /mount/point
o
ext2online /mount/point
Se recomienda usar resize2fs.
4) Convertir el Volumen Linear a Mirror:
lvconvert -m1 testvg/testMirror
5) Checar el Status del Mirror
lvs -a -o +seg_pe_ranges --segment
Resize de un Concat
lvresize -L+5g testvg/concatLVS
grow del FileSystem
resize2fs /mount/point
Mostrar informacion de un dispositivo Fallado:
A los comandos que vimos para mostrar informacion de los PVs VGs y LVs se le puede agregar la opcion –P para mostrar informacion de algun PV fallado.
Restauracion de Metadatos.
pvcreate --uuid XXXXXX --restorefile /etc/lvm/archive/testvg.vg
vgcfgrestore testvg
lvchange -ay /dev/testvg/volume
Con el primer comando restauramos los metadatos del disco con UUID XXXXX, por defecto lvm guarda un backup de las definiciones de metadatos en /etc/lvm/archive/NOMBREVG.vg
despues restauramos la configuracion del VG
y por ultimo activamos ese Volumen con lvchange
Si Falla un Mirror el proceso para la recreacion del mismo es el siguiente
1) Remover los PVs fallados
vgreduce --removemissing
luego añadimos los nuevos PV al VG
al final convertimos el volumen linear a mirror.



Post a comment