materials

LVM (Logical Volume Manager)

Introducción

Normalmente en un disco tendremos diferentes particiones:

El problema es que al hacer las particiones no sabemos exactamente cuánto creceran los ficheros almacenados en cada una de ellas y posiblemente en algún momento nos quedaremos sin espacio suficiente en alguna. Cuando eso pasa se tendrá que comprar un disco duro mayor, pero no podemos hacer que la partición que necesita más espacio sea la que teníamos más parte del nuevo disco sino que tenemos que pasarla toda al disco nuevo ya que una partición debe ser un trozo contiguo de un disco (no de dos).

Eso se soluciona con LVM porque trabaja con discos y particiones virtuales (lógicas) que pueden estar formadas por partes de varios discos diferentes.

LVM (Logical Volume Manager) es un sistema de gestión de volúmenes lógicos que permite gestionar el almacenamiento de forma más flexible que las particiones tradicionales, permitiendo:

Algunas de las ventajas que proporciona LVM son:

Componentes de LVM

LVM funciona en tres niveles:

lvm

Principales comandos LVM

Los comandos básicos de LVM son:

Existen otros comandos como XXscan que escanea los discos y particiones del sistema (pvscan, vgscan_ y lvscan), lvrename que renombra una partición virtual (LV), vgchange que activa o desactiva un disco virtual (VG), lvchange que activa o desactiva una partición virtual (LV), lvconvert que convierte un volumen lógico en un RAID, etc.

Hay herramientas gráficas para gestionar LVM como system-config-lvm pero nosotros utilizaremos la consola de comandos.

Creación del disco virtual

NOTA: si durante la instalación del sistema operativo hemos elegido la opción de usar LVM, ya tenemos un disco virtual creado y no es necesario crear uno nuevo. En el caso de Ubuntu ya se ha creado un disco virtual llamado ubuntu-vg y una partición lógica llamada ubuntu-lv donde se almacena el sistema. Por tanto NO es necesario hacer nada de esto.

En primer lugar escogemos los volúmenes físicos (PV, Phisical Volums) que utilizaremos para LVM. Podemos escoger particiones o discos enteros. Por ejemplo, para asignar a LVM la partición sda3 haremos:

pvcreate /dev/sda3

Esto lo tenemos que repetir para cada partición a utilizar (por ejemplo sda4 y sda5). También podríamos usar un disco completo (por ejemplo sdb) con:

pvcreate /dev/sdb

A continuación creamos el disco virtual (grupo de volúmenes) que contendrá nuestras particiones virtuales (volúmenes lógicos). Por ejemplo para crear el disco virtual disco_vg con la partición sda3 y el disco sdb que asignamos antes a LVM haremos:

vgcreate disco_vg /dev/sda3 /dev/sdb

Ampliación del disco virtual

Si necesitamos aumentar el tamaño de nuestro disco virtual, por ejemplo porque queremos hacer una nueva partición y no queda suficiente espacio en el disco virtual, lo primero que necesitaremos es nuevo espacio de almacenamiento. Para ello podemos añadir un nuevo disco duro al sistema (por ejemplo sdc) y se lo asignamos a LVM:

pvcreate /dev/sdc

A continuación lo añadimos a nuestro disco virtual (grupo de volúmenes):

vgextend disco_vg /dev/sdc

Con este comando hemos ampliado el disco virtual disco_vg con el nuevo disco duro /dev/sdc añadido antes a LVM.

Creación de una partición virtual

Una vez tenemos el disco virtual creado, podemos crear las particiones virtuales (volúmenes lógicos) que utilizaremos. Por ejemplo crearemos un volumen lógico llamado datos_lv de 5 GB:

lvcreate -L5G -n datos_lv disco_vg

los parámetros de este comando son:

Ya tenemos la partición hecha y podemos verla tanto con lsblk como con el comando lvdisplay.

La partición lógica (LV) creada es un dispositivo estándar de bloques, por lo cual debemos formatearla y montarla como cualquier otra partición. Por ejemplo para formatear la partición lógica (LV) datos_lv con el sistema de archivos ext4 y montarla en la carpeta /datos haremos:

mkfs.ext4 /dev/disco_vg/datos_lv
mount /dev/disco_vg/datos_lv /datos

Recordad que el comando mount monta la partición temporalmente, por lo cual si reiniciamos el sistema no estará montada. Para que se monte automáticamente al iniciar el sistema, tenemos que añadirla al archivo /etc/fstab.

Ampliación de una partición virtual

Si tenemos más espacio en el disco virtual (VG) podemos aumentar cualquiera de las particiones creadas en él. Si no tenemos sufuciente espacio en el VG deberemos ampliarlo como se ha visto antes. Por ejemplo vamos a darle otros 3 GB al volumen datos_lv:

lvextend -L +3G /dev/disco_vg/datos_lv

Los parámetros de este comando son:

Por tanto ahora el volumen datos_lv tendrá 8 GB (los 5 que tenía al crealo más los 3 que le hemos dado ahora).

Tanto lvdisplay como lsblk nos mostrarán el nuevo tamaño de la partición pero al hacer df -h sigue mostrando su tamaño anterior. Esto es porque el sistema de archivos ext4 no se ha ampliado automáticamente y tenemos que ampliarlo nosotros con resize2fs:

resize2fs /dev/disco_vg/datos_lv

Como no hemos indicado el tamaño, el sistema de archivos se ampliará al tamaño máximo del volumen lógico (LV). Si queremos que tenga un tamaño específico, podemos indicarlo. Por ejemplo para que el sistema de archivos tenga un tamaño de sólo 7 GB haremos:

resize2fs /dev/disco_vg/datos_lv 7G