LVM

LVM

DEFINICIÓN:

LVM son las siglas de Logical Volume Manager (gestor de volúmenes lógicos), una potente herramienta presente en los actuales sistemas Linux, que nos ofrece un punto de vista de más alto nivel del almacenamiento en disco que el de discos y particiones.

Esta herramienta ofrece al administrador del sistema una gran flexibilidad a la hora de gestionar el espacio disponible en los discos, permitiendo añadir espacio adicional a volúmenes ya creados de manera transparente y simple.

Una de las ventajas del sistema LVM es que nos permite tener sistemas de ficheros sobre varios discos, redimensionarlos según las necesidades y por lo tanto, hacer un uso más eficiente del espacio del que disponemos, con independencia de su ubicación.

Además, LVM permite asignar nombres más «comprensibles» para las personas a los grupos de volúmenes, como por ejemplo «administracion», «desarrollo», etc, en lugar de los nombres físicos de discos como «sda», «sdb», etc. ¿Qué queremos decir con ésto? Imaginemos que creamos un grupo de volumen con varios discos para el departamento de administración. Podemos llamar a este volumen «administracion». De este modo, cuando trabajemos con él, tendremos muy claro a qué conjunto de discos nos estamos refiriendo.

Como podemos ver en la imagen anterior, LVM funciona a tres niveles:

  • Grupos de volumen (VG): Los grupos de volumen agrupan Volúmenes Físicos y Volúmenes Lógicos. Son como discos virtuales, que toman su capacidad de entre los Volúmenes Físicos asignados al Grupo de Volumen.
  • Volúmenes físicos (PV): Un volumen físico es un disco o una parte del disco que habilitaremos para su colocación en un grupo de volúmenes. Esto quiere decir que podemos usar discos completos y particiones como volúmenes físicos.
  • Volúmenes lógicos(LV): Los volúmenes lógicos se crean dentro de un grupo de volumen y, por decirlo de algún modo, son el equivalente a las particiones en otros sistemas.

Cuando usamos LVM, creamos uno o varios grupos de volumen. A esos grupos de volumen, les añadimos volúmenes físicos, que serán discos o particiones. Y, por último, crearemos volúmenes lógicos, que formatearemos con un sistema de ficheros y que luego anexaremos a nuestro sistema para poder utilizarlos como almacén de información.

PRÁCTICA:
La práctica está realizada en Virtual Box.
Lo primero que hicimos fue instalar Debian Squeeze, que incluye la posibilidad de usar LVM durante el proceso de instalación. Dejamos una partición para el boot (/dev/sda1), como se recomienda, y asignando el resto del disco (/dev/sda2) a un grupo de volumen. Al grupo de volumen le llamamos, por ejemplo, administracion y creamos un volumen físico con la partición /dev/sda2. Usamos este volumen físico para crear dos volumenes lógicos:

  • Uno para el sistema raiz: /dev/administracion/root
  • Y otro para la swap: /dev/administracion/swap

Después agregamos un segundo disco duro virtual de tamaño fijo a nuestra máquina que nos serviría para añadir al grupo de volumen creado al instalar Debian Squeeze.
Una vez hecho ésto, arrancamos la máquina virtual.
No tuvimos que instalar el paquete lvm2 porque ya se instaló al realizar la instalación de Debian. Pero si partiéramos de un sistema ya instalado, en el que quisiéramos comenzar a utilizar lvm, lo instalaríamos de la siguiente manera:
$ sudo apt-get install lvm2
Para comprobar las particiones que tenemos en el disco, ejecutamos:
$ sudo fdisk -l
Podemos decir que instalar lvm y configurarlo es muy sencillo si lo hacemos durante el proceso de instalación de Debian Squeeze, porque tan sólo tenemos que seguir el asistente y responder a las preguntas.
Así que veamos ahora cómo trabajar mediante comandos:
Como dijimos anteriormente, añadimos un segundo disco duro virtual (/dev/sdb) a nuestra máquina. Para usarlo con lvm lo primero que debemos hacer es crear un volumen físico con él:
$ sudo pvcreate /dev/sdb
Por cierto, no tenemos que crear el grupo de volúmen porque ya lo creamos durante el proceso de instalación de Debian, pero si hubiera que hacerlo mediante comandos, sería muy sencillo:
$ sudo vgcreate administracion /dev/sda2
¿Qué hace el comando anterior? Crea un grupo de volumen, al que llamamos administracion, con una sola partición de disco: /dev/sda2 (Recordemos que la partición /dev/sda1 la dejamos sin lvm para el boot). Por poner otro ejemplo, para que se entienda: Si quisiéramos crear un grupo de volumen, con la partición 2 del primer disco y todo el segundo disco, haríamos lo siguiente:
$ sudo vgcreate administracion /dev/sda2 /dev/sdb
Si queremos ver qué grupos de volumen tenemos en el sistema, podemos ejecutar:
$ sudo vgscan
Si queremos escanear nuestro sistema para ver qué volumenes físicos tenemos, ejecutaríamos:
$ sudo pvscan
Y si queremos escanear nuestro sistema en busca de volumenes lógicos:
$ sudo lvscan
Bueno, pues una vez que hemos creado el volumen físico /dev/sdb, vamos a añadirlo al grupo de volumen. Para ello usamos el comando vgextend:
$ sudo vgextend administracion /dev/sdb
Como podéis ver, al comando vgextend, tenemos que indicarle dos cosas:

  • El grupo de volumen al que vamos a añadir el volúmen físico.
  • Y el volumen físico que queremos añadir.

Ahora que ya hemos añadido el volumen físico /dev/sdb, vamos a crear, por ejemplo, un volumen lógico de 500MB para almacenar datos al que llamaremos «datos»:
$ sudo lvcreate -L500M -ndatos administracion
El comando anterior creará un volúmen lógico de 500MB al que llamaremos datos en el grupo de volumen administracion.
Nota. Cuando indicamos un tamaño:

  • Podemos indicar al tamaño completo que vamos a dar al volumen lógico. Por ejemplo: -L500M
  • Podemos indicar el incremento que vamos a realizar en el volumen lógico. Por ejemplo: -L+500M

Una vez creado el volumen logico, lo formateamos con formato ext3, por ejemplo:
$ sudo mkfs -t ext3 /dev/administracion/datos
Si queremos ver los grupos de volumen que hemos creado (en este caso uno: administracion), podemos ejecutar:
$ sudo vgdisplay
Y si queremos ver los volúmenes lógicos:
$ sudo lvdisplay
Bien. Pues ahora que ya tenemos creado el volumen lógico, editamos el fichero /etc/fstab y añadimos una línea para que se monte automáticamente cada vez que se inicie el sistema:
# nano /etc/fstab
Y añadimos la línea que montará el volumen logico automáticamente:
/dev/administracion/datos /mnt/datos  ext3    defaults    0 0
Guardamos y cerramos nano.
Creamos la carpeta donde se va a montar el volumen lógico:
$ sudo mkdir /mnt/datos
Para comprobar que se monta el volumen lógico, tenemos dos opciones:

  • Reiniciamos.
  • O ejecutamos el comando:  mount -a

Para ver si se ha montado, ejecutamos mount sin parámetros:
$ sudo mount
Si quisiéramos montar manualmente un volumen lógico, no tendríamos más que ejecutar:
$ sudo mount /dev/administracion/datos /mnt/datos
A continuación vamos a ver cómo aumentar el tamaño de un volumen lógico y cómo reducirlo.
Aumentar el tamaño de un volumen lógico:
Los volumenes lógicos, por decirlo de algún modo, son contenedores, que tienen en su interior sistemas de archivos. Así que, si vamos a aumentar un volumen lógico:

  • Primero aumentaremos el volumen lógico.
  • Luego aumentaremos el sistema de archivos.

Siguiendo con la práctica, vamos a aumentar 1GB el tamaño del volumen lógico /dev/administracion/datos:
Primero. Aumentamos el volumen lógico:
$ sudo lvextend -L+1G /dev/administracion/datos
Segundo. Desmontamos el sistema de archivos:
$ sudo umount /dev/administracion/datos
Tercero. Chequeamos el sistema de archivos:
$ sudo e2fsck -fy /dev/administracion/datos
Cuarto. Redimensionamos el sistema de archivos para adaptarlo al nuevo tamaño de volumen:
$ sudo resize2fs /dev/administracion/datos
Quinto. Una vez redimensionado, montamos el volumen:
$ sudo mount /dev/administracion/datos /mnt/datos
Reducir el tamaño de un volumen lógico:
Como hemos dicho, los volúmenes lógicos son una especie de contenedores que tienen sistemas de archivos en su interior. En este caso, habrá que hacer las cosas a la inversa que cuando aumentamos. Es decir:

  • Primero reducimos el sistema de archivos.
  • Después reducimos el tamaño del volumen lógico.

Siguiendo con la práctica, vamos a reducir 500MB el tamaño del volumen lógico /dev/administracion/datos:
Primero. Desmontamos el sistema de archivos.
$ sudo umount /dev/administracion/datos
Segundo. Chequeamos el sistema de archivos:
$ sudo e2fsck -fy /dev/administracion/datos
Tercero. Redimensionamos el sistema de archivos para adaptarlo al nuevo tamaño:
$ sudo resize2fs /dev/administracion/datos 1G
Cuarto. Reducimos el tamaño del volumen lógico:
$ sudo lvreduce -L-500M /dev/administracion/datos
Quinto. Una vez redimensionado, montamos el volumen:
$ sudo mount /dev/administracion/datos /mnt/datos
Para terminar, tan sólo nos queda mencionar que existe una herramienta gráfica para configurar volumenes lvm: Su nombre es system-config-lvm. Está desarrollada por RedHat y se encuentra también disponible para Debian. Para instalarla, no tenemos más que usar apt-get:
$ sudo apt-get install system-config-lvm
Está bien para sistemas de usuario, pero si preguntáis a cualquier administrador, os dirá que prefiere trabajar con comandos, porque en servidores linux no se montan entornos gráficos y si te acostumbras a usar una herramienta gráfica, cuando no la tienes, todo te resulta más difícil.