5/11/08

LVM en Linux Debian

Breve Reseña sobre LVM

Bueno acá lo que les prometí, estuve investigando sobre como utilizar LVM en mi distribución Linux, debian por supuesto wink , luego de estar leyendo una amplia documentación sobre LVM y hacer pruebas en mi propio equipo y servidor les presento acá un resumen de mi experiencia con este comando. Quede muy satisfecho con los resultados, desde ahora ya tengo una herramienta más para poder manejar mis servidores en Linux, espero les sea de utilidad, mi recomendación es que lean todo hasta hasta el final antes de intentar hacer la prueba en algún equipo, así se ahorran uno que otro dolor de cabeza o fallo smile

La teoría dice…

La Administración de Volúmenes Lógicos provee un tratamiento de más alto nivel del espacio de disco de nuestro sistema que el tratamiento tradicional de discos y particiones. Esto brinda al administrador del sistema mucha mas flexibilidad asignando espacio a aplicaciones y usuarios. Con LVM podemos ver todo el espacio de cada uno de los discos duros conectados a nuestro sistema llamados “Physical Volumes” (PV) como un sólo Disco Duro Virtual, en él creamos los “Volume Group” (VG), de éstos VG podemos coger cierta cantidad de bloques y crear “Logical Volumes” (LV), el LV no necesita ser un grupo de bloques continuos ni tampoco pertenecer a un mismo disco duro.
La estructura de LVM es la siguiente:

Physical Volumes (PVs)
hda, hdb, hdc, sda2, etc.
Aquí vemos toda la colección de discos duros de nuestro sistema.

Volume Group (VG)
vg1
Aquí vemos los Grupo de Volúmenes.
Logical Volumes (LV)==>lvhome, lvusr, lvvar, etc==>Aquí vemos los Volúmenes Lógicos.
Sistema de Archivos==>ext3, reiserfs, xfs, etc.==>Aquí vemos los Sistemas de Archivos que puede contener cada Volumen Lógico.
Archivos y Directorios==>/home, /usr, /var, etc==>Los Sistemas de Archivos, almacenan archivos y directorio

En el párrafo anterior podemos apreciar que el espacio total de nuestro sistema sera la suma del tamaño de cada Disco Duro (PVs) dentro del LVM, luego todo ese gran disco virtual se convierte en un VG, para el ejemplo tenemos un sólo VG llamado “vg1” y dentro de éste VG se crean los LVs conteniendo cada unos de ellos diferentes Sistemas de Archivos y dentro de ellos archivos y directorio.
Por ejemplo si tenemos un disco duro de 80G con 3 particiones:
1.La raíz / ===> 3G
2. Swap =====> 2G
3. Y lo demás LVM, es decir un VG ===> 75G

Dentro del VG creamos LVs para /home y /usr de 10G y 5G respectivamente (Podemos hacerlo para varios puntos de montaje, teniendo en cuenta que no es recomendable tener la raiz / en un volumen lógico, es mejor tener la / fuera del LVM, ya que hay problemas para desmontarla) . Quedando entonces 60G de espacio disponible en el VG.

Si luego de un tiempo nos damos cuenta que nos estamos quedando sin espacio en /home, el problema se soluciona fácilmente: cogemos de lo que tenemos disponible en el VG y listo! Todo ésto en caliente. Así como también podemos reducir el espacio de /usr a 3G, etc.
Si conectamos un nuevo disco duro de 40G a nuestro sistema, creamos un nuevo PV y lo metemos al LVM y listo ya tenemos 40G más de espacio disponible en nuestro VG.
Con esta breve reseña he tratado de mostrarles algunos beneficios de LVM. Ya queda en Uds. poder investigar más y ver cómo aprovechar todos lo beneficios que brinda para sus necesidades.

Ahora paso a mostrarles un tutorial para una de las tareas mas comunes usando LVM: Reducir y Expandir los Volúmenes Lógicos (LV).
Cuando trabajamos con LVM debemos recordar que hay 2 capas implicadas:
La capa bajo el filesystem, antes conocida como partición, y El filesystem propiamente dicho.
Para poder reducir o expandir algún LV debemos proveernos antes de cierta información tal como: espacio disponible en el VG y espacio disponible en los LVs, además de la información propia de cada uno.
Para este ejemplo les mostrare los datos de mi equipo:
bolpiilinux2:/home/aperedo#pvdisplay
— Physical volume —

PV Name /dev/sda2
VG Name bolpiilinux2
PV Size 148,77 GB / not usable 2,95 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 38085
Free PE 25
Allocated PE 38060
PV UUID xgMMhu-qan9-Ef0G-gqPr-EBXt-8JIv-tfSSTt

bolpiilinux2:/home/aperedo#vgdisplay
— Volume group —
VG Name bolpiilinux2
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 12
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 6
Open LV 6
Max PV 0
Cur PV 1
Act PV 1
VG Size 148,77 GB
PE Size 4,00 MB
Total PE 38085
Alloc PE / Size 38060 / 148,67 GB
Free PE / Size 25 / 100,00 MB
VG UUID eouPKG-BvSM-EBG0-TEhR-CijF-uM6U-eKQleR

Por ejemplo, para ver el espacio disponible observamos la línea que dice:
Free PE / Size 25 / 100,00 MB

Para ver la información del VG ejecutamos el comando:

bolpiilinux2:/home/aperedo#lvdisplay
– Logical volume —
LV Name /dev/bolpiilinux2/root
VG Name bolpiilinux2
LV UUID aV9sLu-D0XP-rlQp-xIjM-UySA-f71F-Nsa1Lh
LV Write Access read/write
LV Status available
# open 1
LV Size 3,05 GB
Current LE 781
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
— Logical volume —
LV Name /dev/bolpiilinux2/usr
VG Name bolpiilinux2
LV UUID JrDOUK-d1UP-CKwp-5wqK-Y37d-771n-tC68f1
LV Write Access read/write
LV Status available
# open 1
LV Size 4,77 GB
Current LE 1221
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
— Logical volume —
LV Name /dev/bolpiilinux2/var
VG Name bolpiilinux2
LV UUID 7e7RKc-gFbD-P6TI-l3h0-hYaV-CSvZ-NqCoUg
LV Write Access read/write
LV Status available
# open 1
LV Size 2,86 GB
Current LE 733
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
— Logical volume —
LV Name /dev/bolpiilinux2/swap_1
VG Name bolpiilinux2
LV UUID gMIG70-5VnF-trB2-sfem-K9GD-oYLB-jMP31Z
LV Write Access read/write
LV Status available
# open 2
LV Size 2,59 GB
Current LE 664
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:3
— Logical volume —
LV Name /dev/bolpiilinux2/tmp
VG Name bolpiilinux2
LV UUID STnNI2-iv89-hiVe-Eenm-TT2Z-izcM-5BM9Lr
LV Write Access read/write
LV Status available
# open 1
LV Size 400,00 MB
Current LE 100
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:4
— Logical volume —
LV Name /dev/bolpiilinux2/home
VG Name bolpiilinux2
LV UUID OcrSAn-a2rO-0uEY-Veqw-Dscl-Vv3j-LVC30X
LV Write Access read/write
LV Status available
# open 1
LV Size 135,00 GB
Current LE 34561
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:5

Obtendremos la información de todos los LVs presentes en nuestro sistema, por ejemplo, para ver su tamaño observamos la línea que dice:

LV Size 135,00 GB

Reduciendo un Logical Volume:

Es importante recordar reducir el tamaño del filesystem o lo que este residiendo en el volumen antes de encoger el volumen, sino se perderán datos (data).

1° Desmontar el filesystem:
# umount /home
2° Reduciendo el filesystem:
Si es Ext2/Ext3:
# resize2fs /dev/vg1/lvhome XX (XX es el nuevo tamaño)
Si es Reiserfs:
# resize_reiserfs -s-XXG /dev/vg/datalv (XX es el tamaño a restarle en este caso)
Para Xfs y Jfs no es posible reducir éstos filesystems.
3° Reduciendo el LV:
# lvreduce -L-1G /dev/vg1/lvhome
4° Volvemos a montar el filesystem:
# mount /home
Expandiendo un Logical Volume:
1° Expandiendo del LV:
# lvresize -L+XXG /dev/vg1/lvusr (XX es el tamaño a sumarle en este caso)

2° Expandiendo el filesystem para que coincida con el del LV:
Si es Ext2/Ext3:
# umount /usr
# resize2fs /dev/vg1/lvusr
# mount /usr
Si es Reiserfs:
#resize_reiserfs /dev/vg1/lvusr

Si es Xfs:
# xfs_growfs /usr

Si es Jfs:
# mount -o remount,resize /usr

Eliminando un LV
Supongamos que no queremos más el LV llamado home, por alguna razón. Y que deseamos eliminarlo para disponer de ese espacio en otras cosas. Lo hacemos con:
umount /dev/disk/home
lvremove /dev/disk/home
Extendiendo un LV
Supongamos que por el contrario, sí queremos home, pero queremos agregarle 5GB extras, para eso:
umount /dev/disk/home
lvextend -L+5G /dev/disk/home
e2fsck -f /dev/disk/home
resize2fs /dev/disk/home
1- Desmontamos home, pues no puede estar activo para el cambio
2- extendemos con lvextend, si te fijas -L ahora va con +5G, esto es, sumandole 5GB al valor que tenía originalmente.
3- chequeamos el FS (supongo que es formato ext3)
4- hacemos un resize del FS, con el comando resize2fs
Con esto nos basta para incrementar en 5GB el tamaño de ese LV

Reduciendo un LV
Veamos el caso contrario, pensemos que queremos reducir home, le quitaremos 5GB, el proceso es parecido al anterior:
umount /dev/disk/home
e2fschk -f /dev/disk/home
resize2fs /dev/disk/home 35G
lvreduce -L-5G /dev/disk/home

Con esto
1- desmontamos home, no debe estar montado para la operación
2- revisamos el FS ext3
3- reducimos el tamaño del FS ext3 (aquí sí hay que saber a cuánto lo reduces
4- reducimos el tamaño del LV home, si te fijas usamos -L-5G aunque también podíamos haber usado -L35G para indicarle el valor hacia donde lo reduciríamos.
Con esto nos basta para reducir el tamaño en 5GB

Removiendo un PV
Supongamos que un PV nuestro lo queremos sacar. Puede ser porque hemos agregado un nuevo PV anteriormente que es muy grande y ya este PV viejo nos queda pequeño y nos molesta, queremos digamos eliminar el disco.
Supongamos que queremos remover sda2 del ejemplo de mi equipo.
pvmove /dev/sda2
En este proceso demorará un buen rato, pvmove saca la información que tenga guardada y la almacena en los otros PV, esto sin alterar el esquema de los LV.
Por supuesto que la suma de capacidad disponible en los otros PV debe ser mayor o igual a la cantidad de información que esté moviendo.
Al finalizar de mover el PV, lo podemos eliminar del VG con:
vgreduce disk /dev/hdc1

Listo, con este paso deja de constar dentro del VG y lo podemos sacar físicamente de la PC donde lo tenemos.
Notar que en este ejemplo esto no es factible porque solo tengo un PV.

Algunos Tips

En mi caso, tengo en mi LVM: /root, /home, /swap y /usr, tuve problemas al querer desmontar /root por ejemplo, ya que recibía el mensaje de que el dispositivo estaba ocupado. Entonces si queremos desmontar /home, /usr, etc ó algún dispositivo que esté siempre en uso debemos seguir los siguientes pasos:

1° Salir del entorno gráfico hasta la pantalla de logueo, nos pasamos a una terminal con Ctrl+F1 y ejecutamos como root:
# telinit 1 (con esto nos pasamos al modo de usuario simple: “sigle mode user”)
2° Desmontar el dispositivo y hacer las operaciones respectivas de reducción o expansión.
3° Volver al modo normal:
# telinit 2

* La mayoría recomienda no tener la raíz / dentro del LVM, ya que hay problemas cuando queremos acceder a ella desde algunos Live CDs y además es posible que no puedan desmontarla, en Debian según mi experiencia a la raíz tambien la pone dentro de LVM, claro que se batalla un poco más para desmontarla pero se puede.
* No sugiero que usen LVM para /boot, los gestores de arranque normalmente no entienden de lvm y fallará el arranque. Después de todo /boot tampoco crece tanto durante el tiempo de vida de la máquina.

Su uso en servidores de producción ha sido de utilidad eso de poder quitar y/o poner espacio a particiones, en verdad ayuda y te evita la reinstalación o el pasar trabajo insertando nuevos discos.
Sugiero usarlo encima de un RAID, pues si un PV se daña, puede romperse todo el sistema.

Se me olvidaba, una vez terminado el trabajo con LVM reinician el equipo verán que al cargar el sistema les dice que hará una comprobación del directorio que hayan extendido o al que le hayan quitado espacio, no se preocupen esto es normal, si efectúan la operación de extender el espacio para /root verán que al iniciar el sistema se queda quieto en la comprobación del directorio en cuestión, o que les da un error, no se alarmen tan solo reinicien el equipo y verán que carga sin problemas.

Saludos

No hay comentarios:

Mira #AntesQueSeaTarde completo

Echa un vistazo al Tweet de @NatGeo_la: https://twitter.com/NatGeo_la/status/792908992661950464?s=09