LVM (Español)

De Wikipedia:

LVM es un gestor de volúmenes lógicos para el kernel de Linux, que gestiona unidades de disco y dispositivos similares de almacenamiento masivo.

Bloques para construir LVM

Logical Volume Management (LVM) hace uso de la función device-mapper del kernel de Linux para proporcionar un sistema de particiones independientes de la estructura subyacente del disco. Con LVM es posible crear un espacio de almacenamiento abstracto así como distintas «particiones virtuales», por lo que es más fácil de agrandar/encoger particiones (siempre sujeto a posibles limitaciones de su sistema de archivos) y añadir/eliminar particiones sin tener que preocuparse acerca de si se tiene suficiente espacio contiguo en un disco concreto, ni quedar atrapado en el fdisking de un disco en uso (y preguntándose si el kernel está utilizando una tabla de particiones vieja o nueva), ni tener que mover otras particiones en el camino. Esto es un asunto que afecta estrictamente a la facilidad de gestión: no proporciona ninguna seguridad. Sin embargo, se acomoda muy bien con las otras dos tecnologías que estamos usando.

Los bloques básicos que construyen LVM son:

  • Physical volume/Volúmenes físicos (PV): Particiones en el disco rígido (puede ser sobre tanto sobre un disco o sobre un archivo de loopback) donde se tener un grupo de volúmenes. Posee una cabecera especial y está dividida en extensiones físicas. Piense en los volúmenes físicos como un gran edificio de bloques que pueden ser usados para armar tus discos rígidos
  • Volume group/Grupo de volúmenes (VG): Son grupos de volúmenes físicos que son usados como volúmenes de almacenamiento (como si fueran un solo disco). Contienen volúmenes lógicos. Piense en los grupos de volúmenes como discos rígidos
  • Logical volume/Volúmenes lógicos (LV): Una «partición virtual/lógica» que reside en un grupo de volúmenes y está compuesta por extensiones físicas. Piense en volúmenes lógicos como particiones normales.
  • Physical extent/Extensiones físicas (PE): Una pequeña parte de un disco (usualmente 4MB) que puede ser asignada a un volumen lógico. Piense en las extensiones físicas como partes de los discos que pueden ser asignadas a cualquier partición

Ejemplo:

 Disco físico

  Disco1 (/dev/sda):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    |Partición1 50GB (Volumen físico) |Partición2 80GB (Volumen físico)       |
    |/dev/sda1                         |/dev/sda2                             |
    |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
                                  
  Disco2 (/dev/sdb):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    |Partición1 120GB (Volumen físico)                  |
    |/dev/sdb1                                          |
    | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _|
Volúmenes lógicos LVM

  Grupo de volumen1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    |Volumen lógico1 15GB  |Volúmen lógico2 35GB      |Volúmen lógico3 200GB               |
    |/dev/MyStorage/rootvol|/dev/MyStorage/homevol    |/dev/MyStorage/mediavol             |
    |_ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |            

Ventajas

Con LVM se pueden manejar particiones (volúmenes lógicos) más fácilmente que con las particiones comunes. Por ejemplo se puede:

  • Usar cualquier cantidad de discos como un gran disco (VG).
  • Tener particiones (LV) del tamaño de varios discos (pueden ser del tamaño del total de todos tus discos juntos).
  • Redimensionar/crear/borrar particiones (LV) y discos (VG) como quieras (no depende de la posición del volumen lógico dentro del grupo de volúmenes, como pasa con las particiones normales).
  • Redimensionar/crear/borrar particiones (LV) y discos (VG) en línea (los sistemas de archivo aun necesitan ser mencionados, pero algunos soportan dimensionamiento en línea).
  • Puede nombrar a sus discos (VG) y particiones (LV) como quiera.
  • Cree pequeñas particiones (LV) y dimensiónelas «dinamicamente» mientras se van llenando (agrandarlas se debe hacer a mano, pero algunos sistemas de archivos soportan hacerlo en línea).

Desventajas

  • Los pasos adicionales en la configuración del sistema, lo hace más complicado.

Instalando Arch Linux en LVM

Se deben crear los volúmenes LVM entre el particionado y el formateado durante el procedimiento de instalación. En lugar de dar formato directamente a una partición para que sea su sistema de archivos root, esta operación se hará dentro de un volumen lógico (LV).

Asegúrese de que el paquete lvm2 está instalado.

Resumen breve:

  • Cree partición(s) donde residirá PV. Ajuste el tipo de partición para «Linux LVM», que es 8e si usa MBR y 8e00 para GPT.
  • Cree los volúmenes físicos (PV). Si se tiene un disco lo mejor es simplemente crear un PV en una partición grande. Si tiene varios discos se pueden crear particiones en cada uno de ellos y crear un PV en cada partición.
  • Cree el grupo de volúmenes (VG) y asocie todo el PV al mismo.
  • Cree volúmenes lógicos ( LV) dentro de su VG .
  • Continúe con el paso «Formatear las particiones» de Beginners' guide (Español).
  • Cuando llegue al paso «Crear entorno inicial ramdisk» en la Guía para principiantes, agregue el hook lvm a /etc/mkinitcpio.conf (ver detalles más abajo ).
Advertencia: /boot no puede residir en LVM cuando se utiliza GRUB Legacy, ya que no soporta LVM. Los usuarios de GRUB no tienen esta limitación. Si necesita utilizar GRUB Legacy, debe crear una partición /boot separada y particionarla directamente.

Particionando discos

Nota: Este paso es opcional y depende de las preferencias de los usuarios. No obstante, en la mayoría de los casos es recomendable particionar el primer dispositivo.

Véase Partitioning (Español) para saber cómo crear particiones en el dispositivo.

Crear volúmenes físicos

Para listar todos los dispositivos capaces de ser utilizado como un volumen físico:

# lvmdiskscan
Advertencia: Asegúrese de indicar bien el dispositivo correcto, o de lo contrario la ejecución de las órdenes de abajo se traducirá en la perdidad de sus datos

Cree un volumen físico en ellos:

# pvcreate DISPOSITIVO

Esta orden crea una cabecera en cada dispositivo para que se pueda utilizar para LVM. Tal como se define en LVM (Español)#Bloques para construir LVM, el DISPOSITIVO puede ser un disco (por ejemplo, /dev/sda), una partición (por ejemplo, /dev/sda2) o un dispositivo loop back.

Por ejemplo:

# pvcreate /dev/sda2

You can track created physical volumes with:

# pvdisplay
Nota: Si se utiliza un disco SSD sin particionarlo primero, utilice pvcreate --dataalignment 1m /dev/sda (para el tamaño de bloque de borrado de < 1MiB), véase por ejemplo esto

Crear grupo de volúmenes

El siguiente paso, será crear un grupo de volúmenes sobre el volumen físico:

# vgcreate <grupo_de_volúmenes> <volumen_físico>

Por ejemplo:

# vgcreate VolGroup00 /dev/sda2

A continuación, puede añadir a dicho grupo de volúmenes tantos volúmenes físicos como desee tener en el mismo (a modo de una sola unidad):

# vgextend <grupo_de_volúmenes> <volumen_físico>
# vgextend <grupo_de_volúmenes> <otro_volumen_físico>
# ...

Por ejemplo:

# vgextend VolGroup00 /dev/sdb1
# vgextend VolGroup00 /dev/sdc

Puede hacer un seguimiento de cómo su grupo de volúmenes ha crecido con:

# vgdisplay
Nota: Se pueden crear más de un grupo de volúmenes si es necesario, pero entonces no tendrá todo su almacenamiento presente como si fuera un disco.

Crear en un solo paso

LVM le permite la creación de un grupo de volúmenes sobre varios volúmenes físicos en un solo paso. Por ejemplo, para crear el grupo VolGroup00 con los tres dispositivos mencionados anteriormente, puede ejecutar:

# vgcreate VolGroup00 /dev/sda2 /dev/sdb1 /dev/sdc

Esta orde configurará primero las tres particiones como volúmenes físicos (si es necesario) y luego creará el grupo de volúmenes con los tres volúmenes físicos. La orde le advertirá si detecta un sistema de archivos existente en cualquiera de los dispositivos.

Crear volúmenes lógicos

Necesitaremos crear volúmenes lógicos en este grupo de volúmenes. Para ello debe utilizar la siguiente orden, proporcionandole como parámetros, su tamaño (-L), el grupo de volúmenes al que pertenecerá, y el nombre (-n) del nuevo volumen lógico:

# lvcreate -L <tamaño> <grupo_de_volúmenes> -n <volumen_lógico>

Por ejemplo:

# lvcreate -L 10G VolGroup00 -n lvolhome

Luego prodra acceder al nuevo volumen lógico creado con /dev/mapper/Volgroup00-lvolhome o /dev/VolGroup00/lvolhome. Igual que sucede con los grupos de volúmenes, puede ponerle el nombre que desee al volumen lógico cuando lo crea.


También puede especificar uno o más volúmenes físicos para limitar donde quiere que LVM asigne los datos. Por ejemplo, es posible que desee crear un volumen lógico para el sistema de archivos raíz en SSD (si es pequeño), y el volumen de su home en una unidad mecánica más grande y lenta. Tan solo tiene que añadir el dispositivo de volumen físico a la línea de órdenes, por ejemplo:

# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1

Si desea ocupar todo el espacio libre que queda del grupo de volúmenes, utilice la siguiente orde:

# lvcreate -l +100%FREE  <grupo_de_volúmenes> -n <volumen_lógico>

Puede hacer un seguimiento de los volúmenes lógicos creados con:

# lvdisplay
Nota: Es posible que deba cargar el módulo del kernel device-mapper (modprobe dm-mod) para que las órdenes anteriores puedan tener éxito.
Sugerencia: Se puede comenzar creando volúmenes lógicos relativamente pequeños y ampliarlos más adelante si fuera necesario. Para simplificar, deje un poco de espacio libre en el grupo de volúmenes para que tenga margen para su expansión.

Crear el sistema de archivos y montar los volúmenes lógicos

Sus volúmenes lógicos deberian encontrarse en /dev/mapper/ y /dev/NombredelGrupodeVolúmenes. De no encontrarse, use el siguiente comando para cargar el modulo que crea nodos de dispositivos y hacer que los grupos de volúmenes estén disponibles:

# modprobe dm-mod
# vgscan
# vgchange -ay

Ahora puede crear el sistema de archivos en los volúmenes lógicos, y montarlos como particiones normales (si está instalando Arch, remítase a montar las particiones para obtener información adicional):

# mkfs.<tipo_sistema_archivos> /dev/mapper/<grupo_volúmenes>-<volumen_lógico>
# mount /dev/mapper/<grupo_volúmenes>-<volumen_lógico> /<punto_montaje>

Por ejemplo:

# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome
# mount /dev/mapper/VolGroup00-lvolhome /home
Advertencia: Al elegir los puntos de montaje, solo tiene que seleccionar los volúmenes lógicos recién creados (utilice: /dev/mapper/Volgroup00-lvolhome). No seleccione las particiones reales en las que se crearon los volúmenes lógicos (por tanto, no utilice: /dev/sda2).

Añadir el hook lvm a mkinitcpio.conf

Tendrá que asegurarse de que el hook udev y lvm2 en mkinitcpio están activados.

udev está en el archivo por defecto. Edite el archivo e inserte lvm2 entre block y filesystem como sigue:

/etc/mkinitcpio.conf
HOOKS="base udev ... block lvm2 filesystems"

Después, puede continuar con las instrucciones normales de instalación en el paso crear imagen ram inicial.

Configuración

Opciones avanzadas

Si necesita monitorización (necesario para snapshots —instantáneas—) puede activar lvmetad. Para ello establezca use_lvmetad = 1 en /etc/lvm/lvm.conf. Este es el valor predeterminado por ahora.

Puede restringir los volúmenes que se activan de forma automática mediante el establecimiento de la variable auto_activation_volume_list en el archivo /etc/lvm/lvm.conf. En caso de duda, deje esta opción comentada.

Aumentar el volumen físico

Tras cambiar el tamaño de un dispositivo asociado a un volumen físico, es necesario aumentar el volumen físico con la siguiente orden:

# pvresize Dispositivo

Por ejemplo, para aumentar un volumen físico situado en una matriz de mdadm RAID:

# pvresize /dev/md0
Nota: Esta orden se puede hacer mientras el volumen está en línea

Aumentar el volumen lógico

Para aumentar el espacio disponible en un sistema de archivos que reside en un volumen lógico, es necesario realizar dos pasos. Primero, aumentar el volumen lógico, y luego redimensionar el sistema de archivos para que se extienda al espacio libre creado tras el aumento del volumen lógico.

lvextend

Para aumentar un volumen lógico, se pueden usar dos órdenes diferentes, lvextend o lvresize.

# lvextend -L +<size> <grupo_volúmenes>/<volumen_lógico'>

Por ejemplo:

# lvextend -L +20G VolGroup00/lvolhome

Si desea ocupar todo el espacio libre de un grupo de volúmenes, utilice la siguiente orden:

# lvextend -l +100%FREE <grupo_volúmenes>/<volumen_lógico>

resize2fs

Para redimensionar el tamaño de un sistema de archivos ext2, ext3 o ext4:

# resize2fs /dev/<grupo_volúmenes>/<volumen_lógico>

Por ejemplo:

# resize2fs /dev/VolGroup00/lvolhome
Advertencia: No todos los sistemas de archivos soportan ser aumentados sin perder datos, o ser agrandados en línea.
Nota: Si no le cambia el tamaño al sistema de archivos, este mantendra el tamaño que tenía antes (el volumen será más grande, pero solo se usará una parte del mismo).

Partir volúmenes lógicos

Probablemente el sistema de archivos sea tan grande como el volumen lógico en el que reside, para partirlo, se debe partir primero el sistema de archivos, y luego el volumen lógico. Dependiendo del sistema de arhcivos, puede que lo deba desmontar antes. Digamos que tenemos un volumen lógico de 15GB con ext3 y lo queremos dejar de 10GB. Seguiremos los siguientes pasos:

# resize2fs /dev/VolGroup00/lvolhome 9G
# lvreduce -L 10G VolGroup00/lvolhome

Ya hemos partido el sistema de archivos, más de lo que debiamos para que cuando sea partido el volumen lógico, no cortemos accidentalmente el final del sistema de archivos. Luego agrandaremos normalmente el sistema de archivos para llenar todo el espacio libre del volumen lógico.

También se puede usar lvresize en lugar de lvreduce.

# lvresize -L -5G VolGroup00/lvolhome
# resize2fs /dev/VolGroup00/lvolhome
Advertencia:
  • No reduzca el sistema de archivos a un tamaño menor al ocupado por los datos, por que se arriesga a perderlos.
  • No todos los sistemas de archivos soportan ser partidos sin perder datos, o ser partidos en línea.
Nota: Es mejor reducir el sistema de archivos a un tamaño menor que el volumen lógico, para que accidentalmente no cortemos el final del sistema de archivos.

Eliminar volúmenes lógicos

Advertencia: Antes de quitar un volumen lógico, asegúrese de mover todos los datos que desee conservar a otro lugar; ¡de lo contrario, se perderán!

En primer lugar, averigüe el nombre del volumen lógico que desea eliminar. Se puede obtener una lista de todos los volúmenes lógicos instalados en el sistema con:

# lvs

A continuación, busque el punto de montaje del volumen lógico elegido, con:

$ lsblk

Ahora, desmonte el sistema de archivos del volúmen lógico:

# umount /<punto_montaje>

Por último, elimine el volumen lógico:

# lvremove <grupo_volúmenes>/<volumen_lógico>

Por ejemplo:

# lvremove VolGroup00/lvolhome

Confirme la operación escribiendo y, y habrá terminado.

No se olvide de actualizar el archivo /etc/fstab.

Se puede verificar la eliminación del volumen lógico escribiendo lvs como root de nuevo (vea el primer paso de esta sección).

Agregar una partición al grupo de volúmenes

Para agregar una partición al grupo de volúmenes primero debe darle a la partición el código tipo «Linux LVM» (por ejemplo con cfdisk). Luego necesitara crear un volumen fisico dentro y extender el grupo de volúmenes sobre la partición:

# pvcreate /dev/sdb1
# vgextend VolGroup00 /dev/sdb1

Ahora tendrás el espacio libre en tu grupo de volúmenes, que puede ser usado por los volúmenes lógicos del grupo.

Nota: Se considera una buena práctica tener una tabla de particiones en el soporte de almacenamiento que aloja LVM. Utilice el código tipo apropiado para su partición: 8e para MBR, y 8e00 para GPT.

Remover una partición de un grupo de volúmenes

Todos los datos de la partición deben ser movidos a otra partición. Afortunadamente, LVM lo hace sencillo:

# pvmove /dev/sdb1

Si quiere tener los datos en un volumen fisico específico, agréguelo como segundo argumento a pvmove:

# pvmove /dev/sdb1 /dev/sdf1

Luego removemos los volúmenes físicos del grupo de volúmenes:

# vgreduce myVg /dev/sdb1

O removemos todos los volúmenes vacíos:

# vgreduce --all vg0

Por último, si quiere usar la partición para algo más, y quiere evitar a LVM, piense que esa partición es un volumen fisico más:

# pvremove /dev/sdb1

Desactivar un grupo de volúmenes

Basta con invocar la orden:

# vgchange -a <grupo_volúmenes>

Esto desactivará el grupo de volúmenes y le permitirá desmontar el contenedor donde está almacenado.

Instantáneas/Snapshots

Introducción

LVM permite tomar instantáneas/snapshots de su sitema lo que es mucho más eficiente que el tradicional backup. Podemos hacer esto usando una politica COW (copy-on-write)/(copia-cuando-escribe). La instantánea inicial simplemente contiene enlaces fuertes a los inodos de tus datos actuales. Mientras los datos estén descargados, la instantánea simplemente contará con punteros a sus respectivos inodos y no a los datos en sí mismos. Cada vez que se modifica un archivo o un directorio a la que apunte la isntantanea, LVM automaticamente colonara los datos. Por lo tanto puede tener instantáneas de un sistema de 35GB de datos usando solo 2GB de espacio libre, mientras sean modificadas menos de 2GB de datos (en el original y en la instantánea).

Configuracion

Los volúmenes lógicos para las instantáneas se crean igual que los normales:

# lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv

Con dicho volumen, podrá modificar menos de 100MB de datos, antes de que el volumen para las instantáneas se llene.

Para revertir el volumen lógico de «pv» modificado al estado en que se tomó la instantánea «snap01», ejecute:

# lvconvert --merge /dev/vg0/snap01 

Es importante tener el modulo dm-snapshot agregado en la variable MODULES de /etc/mkinitcpio.conf, de otra manera el sistema no iniciara. Si hizo esto en un sistema ya instalado, asegúrese de reconstruir la imagen del kernel con:

# mkinitcpio -g /boot/initramfs-linux.img

Si tiene volúmenes LVM no activados a través de initramfs, active el servicio lvm-monitoring, proporcionado por el paquete lvm2.

Solucionando problemas

Cambios que podrían ser necesarios debido a cambios en los valores predeterminados de Arch Linux

El valor use_lvmetad = 1 debe ser puesto en /etc/lvm/lvm.conf. Este es el valor predeterminado ahora, si tiene un archivo lvm.conf.pacnew este debe reflejar dicho cambio.

Los comandos LVM no funcionan

  • Cargue los modulos apropiados:
# modprobe dm-mod

El módulo dm_mod debería cargarse automáticamente. En caso contrario, pruebe con:

/etc/mkinitcpio.conf:
MODULES="dm_mod ..."

Tendrá que recompilar la imagen initramfs para que surtan efectos los cambios realizados.

  • Anteponga lvm al comando:
# lvm pvdisplay

No se ven los volúmenes lógicos

Si se está tratando de montar volúmenes lógicos existentes, pero que no se muestran con lvscan, puede utilizar las siguientes órdenes para activarlos:

# vgscan
# vgchange -ay

LVM sobre un medio extraíble

Síntomas:

# vgscan
 Reading all physical volumes.  This may take a while...
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error
 Found volume group "backupdrive1" using metadata type lvm2
 Found volume group "networkdrive" using metadata type lvm2

Causa:

Extraer una unidad externa con LVM sin ​​desactivar el grupo(s) de volúmenes primero. Antes de desconectar el medio, asegúrese de ejecutar:
# vgchange -an nombre_del_grupo_de_volumen

Arreglo:

Asumiendo que ya ha intentado activar el grupo de volúmenes con # vgchange -ay vg, y se siguen recibiendo los errores de entrada/salida, ejecute:
# vgchange -an nombre_del_grupo_de_volumen
Desconecte la unidad externa y espere unos minutos:
# vgscan
# vgchange -ay nombre_del_grupo_de_volumen

Opciones del kernel

En las opciones del kernel, es posible que necesite introducir dolvm. root= debe mostrar el volumen lógico, por ejemplo /dev/mapper/nombre_vg-nombre_lv.

Al redimensionar un volumen lógico contiguo falla

Si al intentar extender un volumen lógico produce errores con:

" Insufficient suitable contiguous allocatable extents for logical volume "

La razón es que el volumen lógico se creó con una explícita política de asignación contigua (con las opciones -C y o --alloc contiguous) y no hay extensiones contiguas adyacentes adicionales disponibles (vea también reference).

Para solucionar este problema, antes de extender el volumen lógico, cambie su política de asignación con lvchange --alloc inherit <volumen_lógico>. Si necesita mantener la política de asignación contigua, un método alternativo consistiría en mover el volumen a un área del disco con suficientes extensiones libres (vea [1]).

Véase también