Logical Volume Manager (LVM)

5 minute read

LVM


En el esquema de particionamiento tradicional de discos el administrador del sistema planifica con antelación el uso que se le dará cada partición. Por ejemplo, para una laptop con disco duro de 120 GB y RAM de 1 GB se puede tener el siguiente esquema de particiones:

  • 1 GB para swap (/dev/sda1),
  • 12 GB para la raíz (/dev/sda2),
  • 107 GB para /home (/dev/sda3), es decir,  el resto del disco.

Hasta aquí todo bien, pero qué pasa si el día de mañana el tamaño de la RAM aumenta a 2 GB? Para invernar habrá que aumentar la swap, y como ya se particionó todo el disco y no se dejó espacio lo que queda es reparticionar el disco, bien sea redimensionando con utilidades que lo permitan, siempre y cuando el sistema de archivo también lo permita (por ejemplo, los sistemas ext2/ext3/ext4 permite redimensionamiento).

¿No existe algo más flexible? Si, se llama LVM (Logical Volume Manager) , y en esencia permite redimensionar en caliente las particiones, para por ejemplo, quitar 1GB de /home (/dev/sda3) y dárselo a la swap (/dev/sda1).

LVM (Logical Volume Manager)

Para poder usar LVM primero se debe asignar volúmenes físicos, luego asignar volúmenes de grupo y por último volúmenes lógicos. Todo esto parece confuso a la primera, pero vamos a explicar cada uno de estos términos y cómo se relacionan:

  • Volúmenes físicos: Es el soporte final donde se guardaran los datos, y pueden ser varios discos o incluso particiones de un disco. No guarda relación directa con los puntos de montajes. Ejemplos de volúmenes físicos: /dev/sda , /dev/sdb1, etc.
  • Volúmenes de grupo: Es la agrupación de los volúmenes físicos en un volumen que permite ver todos los discos y particiones como uno solo dispositivo. Ejemplo de volumen de grupo: /dev/vg00
  • Volúmenes lógicos: Son los volúmenes donde irán nuestros sistemas de archivos (ext2, ext3,xfs,vfat, por ejemplo) y por ende los puntos de montaje (/, /home, swap, /usr, /var, etc). En este nivel es donde se hace el formateo del sistema de archivos a usar, y es donde los datos se distribuirán a nivel lógico, similar a las particiones que acostumbramos a usar. Ejemplo de volúmenes lógicos: /dev/vg00/lv_rootfs, /dev/vg00/lv_swap, /dev/vg00/lv_home.

Instalación de LVM

En Debian puede usarse LVM instalando el siguiente paquete:

aptitude install lvm2

En otras distribuciones como Fedora, Red Hat o el mismo Ubuntu deben buscar el nombre adecuado del paquete para su instalación.

Órdenes de LVM

Para crear un LVM con sus volúmenes físicos, de grupo y lógicos veamos algunas de las instrucciones que tenemos disponible:

Volúmenes físicos

Orden Descripción
pvcreate Crea volúmenes físicos para ser usado por LVM
pvs Muestra información acerca los volúmenes lógicos
pvdisplay Muestra varios atributos de los volúmenes físicos
pvresize Redimensiona volúmenes físicos
pvmove Mueve datos de un volumen físico a otro.

Volúmenes de grupo

Orden Descripción
vgcreate Crea volúmnes de grupo para ser usado por LVM
vgs Muestra información acerca de los volúmenes de grupo
vgdisplay Muestra varios atributos de los volúmenes de grupo
vgextend Agrega volúmenes físicos a un volumen de grupo
vfreduce Quita volúmenes físicos del volumen de grupo
vgremove Elimina volúmenes de grupo

Volúmenes lógicos

Orden Descripción
lvcreate  Crea volúmnes lógicos para ser usado por LVM
lvs Muestra información acerca de los volúmenes lógicos
lvdisplay Muestra varios atributos de los volúmenes lógicos
lvresize | lvreduce | lvextend Redimensiona volúmenes lógicos
lvmove Elimina volúmenes lógicos del sistema

Ejemplo de creación de un LVM

Supongamos que se tiene el disco /dev/sdb  libre con 8 GB,  con dos particiones de 4GB cada una (/dev/sdb1 y /dev/sdb2), y sobre estas particiones se quiere crear un LVM que alojará los puntos de montajes: La raíz (/) de 1 GB, la swap de 1 GB (swap) y el resto de los 6 GB al directorio de los usuarios (/home). Para hacer el LVM podemos escribir las siguientes órdenes:

root@buckbeak:~# pvcreate /dev/sdb1

root@buckbeak:~#pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created

root@buckbeak:~# pvs

PV         VG         Fmt  Attr PSize  PFree
/dev/sdb1                         lvm2 a-    4.00g 4.00g
/dev/sdb2                         lvm2 a-    3.99g 3.99g

root@buckbeak:~# vgcreate vg_group01 /dev/sdb1 /dev/sdb2

Volume group "vg_group01" successfully created

root@buckbeak:~# vgs

VG         #PV #LV #SN Attr   VSize  VFree
vg_group01   2   0   0 wz--n-  7.99g 7.99g

root@buckbeak:~# lvcreate -n lv_rootfs vg_group01 -L 1G
Logical volume "lv_rootfs" created

root@buckbeak:~# lvcreate -n lv_swap vg_group01 -L 1G
Logical volume "lv_swap" created

root@buckbeak:~# lvcreate -n lv_home vg_group01 -L 6G
Volume group "vg_group01" has insufficient free space (1534 extents): 1536 required

root@buckbeak:~# lvcreate -n lv_home vg_group01 -l 1534
Logical volume "lv_home" created

root@buckbeak:~# lvs
LV        VG         Attr   LSize  Origin Snap%  Move Log Copy%  Convert
lv_home   vg_group01 -wi-a-  5.99g
lv_rootfs vg_group01 -wi-a-  1.00g
lv_swap   vg_group01 -wi-a-  1.00g

Ahora se puede dar el sistema de archivo para cada uno de los volúmenes lógicos:

root@buckbeak:~# mkfs

Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

root@buckbeak:~# mkfs.ext4 /dev/vg_group01/lv_home
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
393216 inodes, 1570816 blocks
78540 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1610612736
48 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

root@buckbeak:~# mkswap /dev/vg_group01/lv_swap
mkswap: /dev/vg_group01/lv_swap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=e743b4f3-1c80-4503-be88-6934d575cd55

root@buckbeak:~# swapon /dev/vg_group01/lv_swap

root@buckbeak:~# swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1                               partition    2064376    8    -1
/dev/dm-5                               partition    1048568    0    -2

Si se quieren usar estos volúmenes lógicos, bien puenden montarse con la orden mount o especificarlos en el archivo /etc/fstab para que sea montados al iniciar el sistema.

Referencias

Leave a Comment