# LVM (Español)

Artículos relacionados

- Software RAID and LVM
- dm-crypt (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

- Exclusivo de Linux (o casi). No hay apoyo oficial en la mayoría del resto de sistemas operativos (FreeBSD, Windows, ...).
- Los pasos adicionales en la configuración del sistema, lo hace más complicado.
- Si utiliza el sistema de archivos Btrfs, su característica «Subvolume» también le dará el beneficio de tener un diseño flexible. En ese caso, el uso de la capa de abstracción adicional de LVM puede ser innecesaria.

## 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 y cargado el módulo apropiado con la orden: `# modprobe dm-mod`

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.

### Creando volúmenes físicos

Advertencia: Asegúrese de indicar bien dispositivos/particiones correcta, o de lo contrario la ejecución de las órdenes de abajo se traducirá en la perdidad de sus datos

Es momento de inicializar las particiones creadas para que puedan ser usadas por LVM. Use `fdisk -l` para sistemas MBR o `lsblk` seguido de `gdisk -l DISPOSITIVO` para sistemas GPT, para encontrar aquellas particiones que tengan como sistema de archivos el tipo «Linux LVM» y cree un volumen físico en ellas:

    # pvcreate DISPOSITIVO

Debe substituir `DISPOSITIVO` por las particiones respectivas para crear los volúmenes físicos en todas ellas (por ejemplo, un disco `/dev/sda`, o una partición `/dev/sda2`). Este comando creará una cabecera en cada partición para que pueda ser usada por LVM.

Puede ver los volúmenes físicos creados con:

    # pvdisplay

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

### Creando grupo de volúmenes

El siguiente paso, es crear un grupo de volúmenes en este volumen fisico. Primero debe crear un grupo de volúmenes en una de las nuevas particiones y luego agregarle todos los volúmenes físicos que desee:

    # vgcreate VolGroup00 /dev/sda2
    # vgextend VolGroup00 /dev/sdb1

Puede usar cualquier otro nombre en vez de VolGroup00. Puede fijarse cómo el grupo de volúmenes va aumentando con:

    # vgdisplay

Nota: Puede crear más de un grupo de volúmenes si lo necesita, pero no tendrá todo su almacenamiento en un solo disco.

### Creando volúmenes lógicos

Necesitaremos crear volúmenes lógicos en este grupo de volúmenes. Para ello debe utilizar el siguiente comando, dándole como parámetros el nombre del nuevo volumen lógico, su tamaño, y el grupo de volúmenes al que pertenecerá:

    # lvcreate -L 10G VolGroup00 -n lVolHome

Luego prodra acceder con `/dev/mapper/Volgroup00-lvolhome` o `/dev/VolGroup00/lvolhome`. Se puede usar el nombre que desee para los volúmenes lógicos.

Para crear una swap en un volumen lógico, se necesita un parámetro adicional:

    # lvcreate -C y -L 10G VolGroup00 -n lvolswap

El parámetro `-C y` es usado para crear particiones contiguas, lo que significa que el espacio swap no podrá ser particionado entre varios discos.

Si quiere llenar todo el espacio libre restante en un grupo de volúmenes, use el siguiente comando:

    # lvcreate -l +100%FREE VolGroup00 -n lvolmedia

Verifique los volúmenes lógicos creados con:

    # lvdisplay

Nota: Debe cargar el modulo device-mapper al kernel, (con la orden modprobe dm-mod) para que las órdenes anteriores tengan éxito.
Sugerencia: Puede empezar con una cantidad relativamente pequeña de volúmenes lógicos y expandirlos luego si lo necesita. Para facilitarlo, deje algo de espacio libre en el grupo de volúmenes.

### Creando el sistema de archivos y montando 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.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.

### Agrandando el volúmen físico

Después de cambiar el tamaño de un volumen físico (pv), por ejemplo: aumentando una matriz raid mdadm, necesita agrandar el pv con la siguiente orden:

    # pvresize /dev/mdX

Nota: Esta orden se puede hacer mientras el volumen está en línea

### Agrandando volúmenes lógicos

Para agrandar un volumen lógico, se debe agrandar el volumen lógico y luego el sistema de archivos para poder usar el nuevo espacio libre creado. Digamos que tenemos un volumen lógico de 15GB con ext3, y queremos agrandarlo a 20GB. Debe seguir los siguientes pasos:

    # lvextend -L 20G VolGroup00/lvolhome (o lvresize -L +5G VolGroup00/lvolhome)
    # resize2fs /dev/VolGroup00/lvolhome

Puede usar `lvresize` en vez de `lvextend`.

Si quiere llenar todo el espacio libre de un grupo de volúmenes, use el siguiente comando:

    # lvextend -l +100%FREE VolGroup00/lvolhome
    # resize2fs /dev/VolGroup00/lvolhome

Advertencia: No todos los sistemas de archivos soportan ser agrandados 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 usado en parte).

### 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. 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:

    $ df -h

... y desmóntelo:

    # umount /your_mountpoint

Por último, elimine el volumen lógico:

    # lvremove /dev/yourVG/yourLV

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 n my_volume_group

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`.

## Véase también

- LVM2 Resource Page on SourceWare.org
- LVM HOWTO article at The Linux Documentation project
- LVM article at Gentoo wiki
- LVM2 Mirrors vs. MD Raid 1 post by Josh Bryan
- Ubuntu LVM Guide Part 1 Part 2 detals snapshots

Categories:

- Getting and installing Arch (Español)
- File systems (Español)