Trabajar con LVM | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Trabajar con LVM

LVM (Logical Volume Manager) es un sistema de gestión de discos que añade una capa de abstracción sobre el almacenamiento físico. Permite asignar el espacio en disco de forma flexible, cambiar su tamaño en línea y realizar copias de seguridad basadas en snapshots. Se utiliza ampliamente como capa de almacenamiento para la virtualización. En sistemas cifrados, LVM suele situarse sobre un dispositivo cifrado con LUKS, de modo que un único desbloqueo expone todo el grupo de volúmenes.

Este artículo explica cómo instalar LVM en Linux, crear Physical Volumes, Volume Groups y Logical Volumes, cambiar su tamaño, trabajar con snapshots y utilizar thin provisioning.

Instalar LVM

LVM está incluido de forma predeterminada en la mayoría de las distribuciones de Linux. Si no está disponible, instale el paquete lvm2 mediante el gestor de paquetes del sistema.

En Debian y Ubuntu:

sudo apt-get install lvm2

En RHEL, CentOS Stream, AlmaLinux y Rocky Linux:

sudo dnf install lvm2

Crear un Physical Volume

Un Physical Volume (PV) es el componente básico de LVM en el nivel más bajo. Puede ser un disco completo (por ejemplo, /dev/sdb) o una sola partición (por ejemplo, /dev/sdb1).

Info

El uso de un disco completo como PV simplifica las operaciones posteriores de cambio de tamaño, ya que no es necesario ampliar primero una partición subyacente. Se recomienda utilizar una partición cuando el disco también deba alojar datos que no pertenezcan a LVM o cuando otras herramientas del sistema esperen una tabla de particiones.

Cree un Physical Volume con pvcreate:

sudo pvcreate /dev/sdb

Sustituya /dev/sdb por la ruta de su dispositivo de bloques.

Compruebe el resultado con pvdisplay:

sudo pvdisplay

La salida muestra los Physical Volumes que LVM administra actualmente, junto con su tamaño y la información de la Volume Group correspondiente.

Crear una Volume Group

Una Volume Group (VG) combina uno o varios Physical Volumes en un único pool de almacenamiento. A partir de este pool se crean los Logical Volumes.

Cree una Volume Group llamada vg0 a partir de un único Physical Volume:

sudo vgcreate vg0 /dev/sdb

O a partir de varios Physical Volumes al mismo tiempo:

sudo vgcreate vg0 /dev/sdb /dev/sdc

Compruebe el resultado con vgdisplay:

sudo vgdisplay

Crear un Logical Volume

Un Logical Volume (LV) aparece en el sistema como un dispositivo de bloques normal. Puede formatearlo con un sistema de archivos y montarlo.

Cree un Logical Volume lv0 de 10 GB dentro de la Volume Group vg0:

sudo lvcreate -n lv0 -L 10G vg0

La opción -n establece el nombre del Logical Volume y -L establece su tamaño.

Compruebe el resultado con lvdisplay:

sudo lvdisplay

Cree un sistema de archivos en el Logical Volume:

sudo mkfs.ext4 /dev/vg0/lv0

Cree un punto de montaje y monte el sistema de archivos:

sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0

El nuevo sistema de archivos estará disponible en /mnt/lv0. Para montarlo automáticamente durante el arranque, añada una entrada correspondiente a /etc/fstab.

Info

LVM expone cada Logical Volume mediante dos rutas equivalentes: /dev/<vg>/<lv> y /dev/mapper/<vg>-<lv>. En el ejemplo anterior son /dev/vg0/lv0 y /dev/mapper/vg0-lv0. Ambas rutas apuntan al mismo dispositivo; las herramientas y los archivos de configuración pueden utilizar cualquiera de ellas.

Para ver la jerarquía completa de PV/VG/LV junto con los dispositivos de bloques normales, ejecute:

lsblk

Cambiar el tamaño de los volúmenes

LVM admite el cambio de tamaño en línea en cada nivel: Physical Volumes, Volume Groups y Logical Volumes.

pvresize actualiza la información que LVM tiene sobre un Physical Volume después de que se haya cambiado el tamaño del dispositivo de bloques subyacente (por ejemplo, después de ampliar un disco virtual en el hipervisor):

sudo pvresize /dev/sdb

vgextend añade un Physical Volume a una Volume Group existente, aumentando así el tamaño de la Volume Group:

sudo vgextend vg0 /dev/sdc

vgreduce elimina un Physical Volume de una Volume Group:

sudo vgreduce vg0 /dev/sdc

lvresize cambia el tamaño de un Logical Volume. Por ejemplo, para añadir 5 GB a lv0:

sudo lvresize -L +5G /dev/vg0/lv0

O para ampliar el Logical Volume y utilizar todo el espacio libre de la Volume Group:

sudo lvresize -l +100%FREE /dev/vg0/lv0

Info

Preste atención a la diferencia entre -L (mayúscula) y -l (minúscula). La versión en mayúscula acepta un tamaño con un sufijo de unidad como M, G o T. La versión en minúscula acepta un número de extents o un porcentaje.

Cambiar el tamaño de un Logical Volume no cambia el tamaño del sistema de archivos que contiene. Utilice la herramienta correspondiente al sistema de archivos. Para ext2, ext3 y ext4:

sudo resize2fs /dev/vg0/lv0

Para XFS, ejecute xfs_growfs sobre el punto de montaje del sistema de archivos.

En los sistemas de archivos compatibles, incluidos ext4 y XFS, lvextend con la opción -r cambia el tamaño del Logical Volume y del sistema de archivos en un solo paso:

sudo lvextend -r -L +5G /dev/vg0/lv0

Esta es la forma más habitual de realizar un crecimiento en línea.

Warning

Reducir un Logical Volume requiere el orden contrario: primero debe reducirse el sistema de archivos y solo después el Logical Volume. Si se hace al revés, el dispositivo subyacente se recorta mientras el sistema de archivos sigue considerando que tiene su tamaño original, lo que destruye los datos. En ext4, la operación se realiza sin conexión. Desmonte el sistema de archivos, ejecute sudo e2fsck -f /dev/vg0/lv0, reduzca el sistema de archivos con sudo resize2fs /dev/vg0/lv0 <new_size>, reduzca el Logical Volume al mismo tamaño con sudo lvresize -L <new_size> /dev/vg0/lv0 y vuelva a montar el sistema de archivos. XFS no admite la reducción de tamaño; la única forma de hacer más pequeño un sistema de archivos XFS es realizar una copia de seguridad, crear uno más pequeño y restaurar los datos.

Todos los comandos anteriores aceptan --help para mostrar la lista completa de opciones.

Snapshots de LVM

Un snapshot captura el estado de un Logical Volume en un momento determinado. Funciona mediante un mecanismo copy-on-write: a medida que cambia el Logical Volume original, los bloques modificados se guardan en el espacio reservado del snapshot, por lo que este continúa mostrando el estado original.

Los snapshots son útiles para crear copias de seguridad consistentes frente a fallos de un sistema de archivos en ejecución y para probar cambios que pueden revertirse eliminando el snapshot. Las copias de seguridad consistentes con la aplicación requieren coordinación adicional, como congelar el sistema de archivos o poner la aplicación en un estado de espera antes de crear el snapshot.

Crear un snapshot

Cree un snapshot con lvcreate y la opción -s:

sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume

Esto crea un snapshot llamado myvolume_snap del Logical Volume myvolume en la Volume Group myvg, reservando 1 GB para los cambios. Elija el tamaño reservado en función de la cantidad de datos que se espera que cambie mientras exista el snapshot: los snapshots de volúmenes casi inactivos necesitan poco espacio, mientras que los volúmenes con mucha actividad de escritura pueden requerir una parte considerable del tamaño original.

Para snapshots de larga duración y casos de uso que impliquen muchos snapshots, considere utilizar thin snapshots dentro de un thin pool. Obtienen el espacio del pool compartido según sea necesario en lugar de reservar una cantidad fija por adelantado, lo que normalmente aprovecha mejor el espacio.

Warning

Si el Logical Volume original cambia más de lo que el snapshot puede almacenar, el snapshot deja de ser válido y los datos que había capturado se pierden. Dimensione el snapshot para cubrir la cantidad de cambios esperada durante su vida útil.

Usar un snapshot

Un snapshot puede montarse como cualquier otro Logical Volume. Para tareas de copia de seguridad e inspección, móntelo en modo de solo lectura a menos que realmente se necesite acceso de escritura:

sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot

Una vez montado, el snapshot puede leerse para realizar copias de seguridad o inspecciones.

Eliminar un snapshot

Cuando el snapshot ya no sea necesario, elimínelo con lvremove:

sudo lvremove /dev/myvg/myvolume_snap

Eliminar un snapshot libera el espacio que tenía reservado. Cualquier dato escrito directamente en el snapshot, en lugar del volumen original, se pierde.

Para revertir el volumen original al estado capturado por el snapshot, utilice lvconvert --merge en lugar de lvremove:

sudo lvconvert --merge /dev/myvg/myvolume_snap

Después de la fusión, el snapshot se consume y se elimina automáticamente. Si el volumen original está actualmente en uso, la fusión se pospone hasta la próxima vez que se active el volumen.

Thin provisioning

Un thin pool es un tipo especial de Logical Volume que asigna almacenamiento bajo demanda. Los Logical Volumes creados dentro de él (thin volumes) pueden tener un tamaño declarado superior al espacio libre real del pool, y solo los bloques que se escriben consumen almacenamiento real.

Esta tecnología se utiliza ampliamente en virtualización, donde muchos discos virtuales comparten un único pool de almacenamiento, pero rara vez todos alcanzan simultáneamente su capacidad declarada.

Crear un thin pool

Cree un thin pool mythinpool de 50 GB en la Volume Group myvg:

sudo lvcreate -L 50G -T -n mythinpool myvg

La opción -L establece el tamaño del pool, -T indica a lvcreate que cree un thin pool y -n establece el nombre del pool. LVM asigna el pool a partir del espacio libre de la Volume Group; al final del comando se pueden indicar Physical Volumes concretos si el pool debe ubicarse en determinados dispositivos.

Crear un thin volume

Cree un thin volume mythinvolume de 10 GB dentro de mythinpool:

sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume

La opción -V establece el tamaño virtual del thin volume, -T hace referencia al thin pool y -n establece el nombre del nuevo volumen.

Usar un thin volume

Un thin volume se utiliza como cualquier otro Logical Volume. Cree un sistema de archivos en él:

sudo mkfs.ext4 /dev/myvg/mythinvolume

Después, el thin volume puede montarse y utilizarse como un dispositivo de bloques normal.

Warning

Debido a que los thin pools pueden sobreasignarse, supervise su uso real. Tanto el espacio de datos como el espacio de metadatos pueden agotarse de forma independiente, y ambos son críticos: si un thin pool se queda sin espacio de datos o de metadatos mientras se escribe en un thin volume, las operaciones de escritura de ese volumen comenzarán a fallar.

El uso actual de datos y metadatos de todos los Logical Volumes, incluidos los thin pools, puede consultarse con lvs:

sudo lvs -o +data_percent,metadata_percent

Cuando data_percent o metadata_percent se acerque al 100 %, amplíe el thin pool con lvextend antes de que se llene.

Referencia de comandos

Comandos comunes de LVM agrupados por nivel.

Physical Volumes:

  • pvcreate inicializa un dispositivo de bloques como Physical Volume.
  • pvdisplay muestra información detallada sobre los Physical Volumes.
  • pvs muestra una tabla resumida de los Physical Volumes.
  • pvresize actualiza un Physical Volume después de cambiar el tamaño del dispositivo subyacente.

Volume Groups:

  • vgcreate crea una Volume Group a partir de uno o varios Physical Volumes.
  • vgextend añade un Physical Volume a una Volume Group.
  • vgreduce elimina un Physical Volume de una Volume Group.
  • vgdisplay muestra información detallada sobre las Volume Groups.
  • vgs muestra una tabla resumida de las Volume Groups.

Logical Volumes:

  • lvcreate crea un Logical Volume.
  • lvextend y lvresize cambian el tamaño de un Logical Volume.
  • lvremove elimina un Logical Volume.
  • lvconvert --merge fusiona un snapshot de nuevo con su volumen de origen.
  • lvdisplay muestra información detallada sobre los Logical Volumes.
  • lvs muestra una tabla resumida de los Logical Volumes.

Para el uso diario, los comandos de resumen pvs, vgs y lvs suelen ser más prácticos que las variantes detalladas *display. Cada comando admite --help para consultar la lista completa de opciones.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA