LVM - Logical Volume Management

Rafa Morales 12 Septiembre 2013
7min
0
Linux

LVM (Logical Volume Managent) es una forma de asignar espacio de forma más flexible que las formas tradicionales como el particionado. Permite concatenar, dividir o combinar particiones (incluso de discos distintos) o discos completos, en otras unidades virtuales más grandes que los administradores pueden redimensionar o mover, sin ni siquiera interrumpir su uso. También permite la administración de volúmenes con nombres más sensibles como “desarrollo” o “sistema” en lugar de nombres de discos físicos que poco nos dicen como “sda” y “sdb”.

Su funcionamiento es el siguiente, crear un grupo de volúmenes (VG) que contengan todas las particiones o discos, volúmenes físicos (PV), que deseemos utilizar para este cometido, pueden ser de distinto tamaño. Sobre ese grupo de volúmenes se crearían distintos volúmenes lógicos (LV) a los que se le asignaría el espacio que nosotros quisiéramos, sólo teniendo en cuenta que no podemos sobrepasar el espacio máximo que tenga el grupo de volúmenes. La ventaja es que no estaríamos limitados al tamaño de las particiones o discos que se han agregado al grupo de volúmenes. Estos volúmenes lógicos se formatearían y montarían en el sistema como cualquier otra partición.

Aparte de la gran ventaja de poder crear particiones de tamaños incluso superiores a los que podríamos tener con esas particiones de manera independiente, sumamos también la ventaja de que estos volúmenes lógicos se pueden redimensionar de una manera sencilla, es decir, disminuir su tamaño o aumentarlo asignándole al volumen lógico espacio del grupo de volúmenes que esté sin utilizar.

El proceso de aumentar tamaño es fácil y sin riesgo, pero el de reducir tamaño a un volumen lógico es más delicado, aunque no imposible, de ahí que siempre se recomiende comenzar con volúmenes lógicos de tamaños más reducidos e ir asignándole espacio según sea necesario.

A continuación se muestra una figura de la arquitectura resultante con los diferentes componentes que van a entrar a formar parte del sistema LVM:

En el ejemplo anterior observamos cómo los volúmenes físicos serían la partición 1 del primer disco y el segundo disco al completo. Con estos volúmenes físicos crearíamos el volumen lógico linuxvg. A partir de él definiríamos los volúmenes lógicos ubuntu, arch y home, como hemos dicho anteriormente, el nombre es totalmente personalizable. A estos volúmenes lógicos los formatearíamos y los montaríamos en el sistema para su uso.

Aún nos quedaría por nombrar las extensiones físicas (PE – Physical Extent), éstas serían las partes en las que se divide un volumen físico, las cuales a su vez tienen relación con las extensiones lógicas (LE – Logical Extent) en las que se divide un volumen lógico. Por defecto el tamaño de un extent es 4MB.

Comenzamos instalando el paquete necesario:

apt-get install lvm2

 

Crear los volúmenes físicos

Creamos los volúmenes físicos indicando los discos o particiones que van a formar parte.

pvcreate /dev/sdb /dev/sdc1

Comprobamos los discos o particiones incluidas en el volumen físico mediante los siguientes comandos, el primero muestra un resumen y el segundo las propiedades detalladas de cada dispositivo:

pvs
pvdisplay

 

Crear el grupo de volúmenes

De entre la lista de discos o particiones disponibles en el volumen físico, elegimos los que deseemos para crear un grupo de volúmenes mediante el siguiente comando, en el que indicaremos el nombre que le asignemos del grupo:

vgcreate linuxvg /dev/sdb /dev/sdc1

Esto creará un grupo de volúmenes con un extent de 4MB, cuyo tamaño podemos modificar de la siguiente manera, indicando un tamaño en potencia de dos con las unidades MB o GB:

vgcreate linuxvg –s 8M /dev/sdb /dev/sdc1

Comprobamos los datos y tamaños del grupo de volúmenes mediante los siguientes comandos, el primero muestra un resumen y el segundo las propiedades detalladas del grupo:

vgs
vgdisplay

Dependiendo de la distribución de GNU/Linux que utilices, puede ser que los grupos de volúmenes no se activen de forma automática, en ese caso, hay que ejecutar:

vgchange -ay

 

Añadir o eliminar un volumen físico del grupo de volúmenes existente

Si se nos ha olvidado añadir un volumen físico o queremos ampliarlo más adelante, lo haremos con el comando:

vgextend linuxvg /dev/sdd

Si queremos eliminar un volumen físico del grupo de volúmenes, lo haremos con el comando:

vgreduce linuxvg /dev/sdd

 

Crear el volumen lógico

Para crear un volumen lógico debemos indicar el nombre del grupo de volúmenes que queremos utilizar, el nombre que le daremos al volumen lógico, y el tamaño que deseamos que tenga. Ten en cuenta que el tamaño final se redondeará en función del tamaño del extent, ya que debe ser múltiplo de éste.

lvcreate –L 1G linuxvg –n homes

Comprobamos los datos y tamaños del volumen lógico mediante los siguientes comandos, el primero muestra un resumen y el segundo las propiedades detalladas del grupo:

lvs
lvdisplay

En el último comando observaremos la ruta por la que podremos acceder al dispositivo creado, aunque siempre tenemos dos opciones para encontrarlos, en nuestro caso serían:

/dev/linuxvg/homes
/dev/mapper/linuxvg-homes

Sólo nos quedaría formatear la partición con el sistema de archivos que elijamos y montarla en algún directorio, por ejemplo:

mkfs.ext3 /dev/linuxvg/homes
mount /dev/linuxvg/homes /mnt/homes

 

Redimensionar el volumen lógico

Para aumentar el tamaño de un volumen lógico, siempre que haya extents disponibles en el grupo de volúmenes, utilizamos el siguiente comando, en el que especificamos el tamaña que deseamos añadir:

lvextend –L+1G /dev/linuxvg/homes

Para disminuir el tamaño de un volumen lógico debemos tener en cuenta de que el espacio que deseamos reducir no se encuentre ocupado con información. Esto proceso siempre implica riesgos, por lo que no se recomienda realizarlo.

lvreduce –L-1G /dev/linuxvg/homes

 

Eliminar los volúmenes

Podemos eliminar todos los dispositivos creados, para ello debemos desmontar los volúmenes lógicos, eliminarlos y, posteriormente, eliminar el grupo y los volúmenes físicos.

Eliminamos los volúmenes lógicos con:

lvremove /dev/linuxvg/homes

Eliminamos el grupo de volúmenes con el siguiente comando, teniendo en cuenta que si posee volúmenes lógicos los eliminará sin advertirnos de ello:

vgremove /dev/linuxvg

Eliminamos los volúmenes físicos:

pvremove /dev/sdb