#4sysadmins

Inicio » GNU/Linux » ¿Que es Logical Volume Manager o LVM? – 1/2

¿Que es Logical Volume Manager o LVM? – 1/2

Últimas Entradas

Follow #4sysadmins on WordPress.com

Logical Volume Manager o LVM no es mas que una forma de crear y administrar particiones virtuales de disco proporcionada por una función del kernel llamada Device-mapper. Cuando trabajemos con LVM lo estaremos haciendo sobre una capa que nos abstrae de la estructura del disco por lo que no deberemos de preocuparnos por algunos aspectos como la tabla de partición que estamos usando, el espacio disponible en el disco, el tamaño inicial de las particiones, etc… entre otras cosas porque con LVM podremos redimensionar las particiones y añadir nuevos discos extendiendo las particiones sobre estos.

Los bloques principales que conforman LVM son los volúmenes físicos o physical volumen (PV), los grupos de volúmenes o volume group (VG) y los volúmenes lógicos o logical volume (LV).

Para entender bien que es cada uno de estos bloques tendremos en cuenta a un volumen físico (PV) como si de un disco duro físico se tratase, ya que puede ser una sola parte de un disco, un disco completo o incluso mas de un disco. Están formados por extensiones físicas o physical extent (PE). Cuando ya tenemos definida una porción de disco, este completo o mas de un disco físico como un PV, deberemos de crear sobre este uno o varios grupos de volúmenes (VG) que los entenderemos como una unidad de disco sobre la que crearemos una o mas particiones, en este caso volúmenes lógicos (LV).

Veremos esto mejor ejemplarizado en la siguiente imagen en la que se muestra los dispositivos /dev/sda (130GB) con dos particiones (/dev/sda1 y /dev/sda2)  y /dev/sdb (120GB) con tan solo una partición (/dev/sdb1). Si creáramos un volumen físico en cada una de las particiones de los discos y posteriormente asociáramos estos tres PV con un grupo de volúmenes sumaríamos un total de 250GB que serían tratados como una sola unidad física. Entonces, nos quedaría un VGMy Storage” sobre los tres PV y sobre el “My Storage” tres particiones; una para root (la raíz del sistema) con nombre rootvol, otra para los home de los usuarios (homevol) y por último una para almacenamiento (medialvol).

Nota: evidentemente tanto los nombres de los volúmenes lógicos como del grupo de volúmenes y volumen físicos son personalizados.

lvm2

LVM aporta numerosas ventajas y no tantas desventajas. Un inconveniente importante de LVM es no respetar el principio KISS (Keep it simple stupid) lo que significa que quizás nos estemos complicando la vida sin motivo, ya que podríamos recurrir a un particionamiento estándar del disco con sus correspondientes particiones primarias, extendidas, etc…. Otra limitación es si estamos usando GRUB Legacy, que nos veremos obligados a crear una partición independiente a LVM (/boot) donde instalaremos el gestor de arranque, no así para aquellos que utilicen GRUB.

Si no es nuestro caso, puesto que vamos a necesitar una gran independencia con respecto al tamaño de los discos y particiones (probablemente necesitemos aumentar el tamaño de las particiones considerablemente con el paso del tiempo teniendo incluso que añadir nuevos discos al sistema) nos beneficiaremos de las siguientes ventajas:

  • Poder tratar varios discos físicos como uno solo
  • Tener una partición de tamaño superior al tamaño de un disco físico
  • Modificar el tamaño de las particiones (volúmenes lógicos)
  • No depender de la posición de la partición (volumen lógico, LV) en el disco para redimensionarla
  • Modificar la estructura de almacenamiento: añadir o redimensionar los PV, crear/eliminar nuevos VG y LV, etc…
  • Crear snapshot del sistema de archivos

 

Administrar LVM

A continuación vamos a partir desde cero suponiendo que tenemos un dispositivo físico de 160GB (/dev/sdb) sobre el que vamos a crear una partición primaria que ocupe todo el disco (/dev/sdb1) y se la asignaremos a un PV, por lo que ya tendremos un volumen físico PV de 160GB. Posteriormente crearemos un grupo de volúmenes llamado myvolgrup al que le asignaremos este volumen físico.

Con un VG al que le hemos asignado nuestro PV de 160GB procederemos a crear nuevos LV sobre este. En nuestro caso vamos a crear tres volúmenes lógicos o LV; lvroot, lvhome y lvopt.

Una vez creado los tres LV les daremos formato y entonces tendremos ya todo listo para trabajar sobre el disco.

Nota: Si en un futuro se nos queda corto los 160GB, podremos insertar otro dispositivo en el sistema (por ejemplo /dev/sdc), crea una partición sobre este y asignársela a otro PV. Luego extenderemos el VG sobre este nuevo PV obteniendo así el nuevo espacio sobre el que podremos crear nuevos LV o redimensionar algunos ya existentes.

 

Crear un PV

Lo primero que haremos será insertar el dispositivo (en nuestro caso es externo), ver de que unidad se trata, particionarlo con fdisk y asignarle su correspondiente tipo: 8e si usamos MBR o 8e00 si estamos utilizando GPT (para lo que deberíamos utilizar el comando parted si queremos particionar el disco).

Nota: Para particionar el dispositivo y asignarle su tipo correspondiente podéis visitar la siguiente entrada donde aprendimos a particionar un disco.

Una vez tenemos el dispositivo con su correspondiente partición y tipo asignado, crearemos el volumen físico o PV.

Aviso: Para trabajar con LVM deberemos de tener el paquete lvm2 instalado:

$ sudo yum install lvm2    ## RPM
$ sudo apt-get install lvm2    ## Debian

Ahora utilizaremos el siguiente comando para ver que dispositivos están disponible para ser usados por LVM, pero antes nos vamos a pasar al usuario root para trabajar desde ahora en adelante como usuario administrador:

nebul4ck@LiMinCinn ~ $ sudo su -
root@LiMinCinn ~ # lvmdiskscan
 ...
 /dev/sdb1 [ 149,05 GiB]
...
 0 disks
 21 partitions
 0 LVM physical volume whole disks
 0 LVM physical volumes

Ahora sobre nuestra partición /dev/sdb1 vamos a crear nuestro PV:

LiMinCinn ~ # pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

Podemos ver como ha quedado nuestro PV con el siguiente comando:

LiMinCinn ~ # pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               myvolgrp
  PV Size               149,05 GiB / not usable 2,84 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              38156
  Free PE               38156
  Allocated PE          0
  PV UUID               FwqIph-G94B-fMHa-uZ4M-nCou-NSR8-iDe9sl

 

Crear el grupo de volúmenes

Bien, ahora vamos a crear un grupo de volúmenes (VG) al que le asignaremos nuestro PV y sobre el que crearemos los tres volúmenes lógicos (LV)

LiMinCinn ~ # vgcreate myvolgrp /dev/sdb1
Volume group "myvolgrp" successfully created

Nota: Algo común es quedarse sin espacio y tener que redimensionar el grupo de volúmenes. Para ello insertaremos un nuevo dispositivo particionado, crearemos un PV sobre el y extenderemos el grupo de volúmenes a ese nuevo PV:

LiMinCinn ~ # vgextend myvolgrp /dev/sdc1

Ventaja: Si de entrada ya contamos con dos o tres dispositivos físicos con sus correspondientes PV ya creados, podremos crear un grupo de volúmenes que abarque los tres PV tal que así:

LiMinCinn ~ # vgcreate myvolgrp /dev/sda2 /dev/sdb1 /dev/sdc

Podremos ver como ha quedado nuestro VG con el siguiente comando:

LiMinCinn ~ # vgdisplay
  --- Volume group ---
  VG Name               myvolgrp
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               149,05 GiB
  PE Size               4,00 MiB
  Total PE              38156
  Alloc PE / Size       0 / 0   
  Free  PE / Size       38156 / 149,05 GiB
  VG UUID               JL0lSd-RBJK-Aj1E-vh2u-m3cy-mKjh-weMLZu

 

Crear volúmenes lógicos

Bueno ya estamos a pocos pasos de terminar de crear nuestra nueva estructura de almacenamiento LVM, por lo que lo siguiente que haremos será crear los tres volúmenes lógicos o LV en nuestro grupo de volúmenes myvolgrp:

LiMinCinn ~ # lvcreate -L 15G myvolgrp -n lvroot
Logical volume "lvroot" created
LiMinCinn ~ # lvcreate -L 100G myvolgrp -n lvhome
Logical volume "lvhome" created

La sintaxis es sencilla, basta con indicar el tamaño (-L) con su correspondiente unidad de medida (en este caso el Giga, G), el grupo de volúmenes y por último el nombre (-n) que le vamos a dar a nuestro LV.

Podríamos además indicar un PV específico sobre el que queremos crear el LV, por ejemplo si en nuestro caso /dev/sdb1 fuese un disco SSD sobre el que nos conviene instalar el sistema operativo por tema de rendimiento (partición root, lvroot) podríamos especificarlo tal que así:

LiMinCinn ~ # lvcreate -L 15G myvolgrp -n lvroot /dev/sdb2
 Logical volume "lvroot" created

Tal vez no queramos esto, si no que deseemos que un LV ocupe el tamaño completo disponible del grupo de volúmenes. Para tal caso haremos lo siguiente:

LiMinCinn ~ # lvcreate -l +100%FREE myvolgrp -n lvopt
 Logical volume "lvopt" created

Pues listo ya tenemos nuestros tres volúmenes lógicos ocupando el total de nuestro actual grupo de volúmenes myvolgrp. Podremos visualizar los LV tal que así:

LiMinCinn ~ # lvdisplay
 --- Logical volume ---
 LV Path /dev/myvolgrp/lvroot
 LV Name lvroot
 VG Name myvolgrp
 LV UUID sahMOr-enBj-vqDj-GMr2-qr5r-4WCJ-u6HOMN
 LV Write Access read/write
 LV Creation host, time LiMinCinn, 2015-09-18 20:04:07 +0200
 LV Status available
 # open 0
 LV Size 15,00 GiB
 Current LE 3840
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 252:0
 
 --- Logical volume ---
 LV Path /dev/myvolgrp/lvhome
 LV Name lvhome
 VG Name myvolgrp
 LV UUID tVcwbq-g72Q-p9GP-ztWm-pU7z-3bPk-Z0Ddi3
 LV Write Access read/write
 LV Creation host, time LiMinCinn, 2015-09-18 20:11:22 +0200
 LV Status available
 # open 0
 LV Size 100,00 GiB
 Current LE 25600
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 252:1
 
 --- Logical volume ---
 LV Path /dev/myvolgrp/lvopt
 LV Name lvopt
 VG Name myvolgrp
 LV UUID XGWHj1-hrea-WI4a-ofU6-hIa5-oK6d-WxbqUP
 LV Write Access read/write
 LV Creation host, time LiMinCinn, 2015-09-18 20:12:21 +0200
 LV Status available
 # open 0
 LV Size 34,05 GiB
 Current LE 8716
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 252:2

Nota: Es posible que deba cargar el módulo del kernel device-mapper para que las órdenes anteriores tengan éxito.

# modprobe dm-mod

Recomendación :  Es conveniente crear volúmenes lógicos de pequeño tamaño (si solo contamos con un disco), de manera que nos quede espacio libre en el grupo de volúmenes por si en un futuro fuese necesario crear nuevos volúmenes lógicos o redimensionar según demanda uno u otro ya existente.

 

Crear los sistema de archivos

Ahora ya tenemos nuestras tres particiones, para hacer uso de ellas deberemos de formatearlas y posteriormente montarlas en el sistema.

Para formatear una partición lógicamente deberemos de saber cual y donde se encuentra. Por defecto LVM crea las particiones bajo /dev/mapper/<nombre_grupo_volumen>-<nombre_volumen_logico> y /dev/<nombre_grupo_volumen>.

Podemos obtener esta información de distintas formas por ejemplo tal que así:

LiMinCinn ~ # ls /dev/myvolgrp/
lvhome lvopt lvroot

Por lo que ya sabremos que se trata de /dev/myvolgrp/lvroot, /dev/myvolgrp/lvhome y /dev/myvolgrp/lvopt.

O bien si queremos una información mas detallada podremos usar fdisk:

LiMinCinn ~ # fdisk -l

IMPORTANTE: Si no nos aparece los dispositivos quizás necesitemos cargar el módulo dm-mod y activarlos:

LiMinCinn ~ # modprobe dm-mod    ## Cargamos el módulo
LiMinCinn ~ # vgscan    ## Buscamos los grupos de volúmenes
 Reading all physical volumes. This may take a while...
 Found volume group "myvolgrp" using metadata type lvm2
LiMinCinn ~ # vgchange -ay    ## Activamos los grupos de volúmenes
 3 logical volume(s) in volume group "myvolgrp" now active

Bien ahora que ya conocemos los dispositivos, vamos a darles formato. lvroot lo vamos a formatear con EXT4 mientras que lvhome y lvopt serán formateados con XFS:

LiMinCinn ~ # mkfs.ext4 /dev/mapper/myvolgrp-lvroot
LiMinCinn ~ # mkfs.xfs /dev/mapper/myvolgrp-lvhome
LiMinCinn ~ # mkfs.xfs /dev/mapper/myvolgrp-lvopt

 

Montar los LV

Ahora montaremos los volúmenes lógicos en los directorios correspondientes:

LiMinCinn ~ # mount /dev/mapper/myvolgrp-lvroot /
LiMinCinn ~ # mount /dev/mapper/myvolgrp-lvhome /home
LiMinCinn ~ # mount /dev/mapper/myvolgrp-lvopt /opt

 

Terminando

Bueno quizás en nuestro caso no necesitemos montar nada, puede que hayamos creado esta estructura para posteriormente instalar un sistema operativo sobre ella.

En caso de correr un sistema sobe esta estructura deberemos de tener en cuenta alguna cuestiones, como por ejemplo los parámetros del kernel para el arranque, donde deberemos de indicar que root= corresponde a nuestra partición /dev/mapper/myvolgrp-lvroot o incluso crear los hook lvm2 en mkinitcpio.conf y nuestro initramfs. Podemos aprender mas sobre la instalación de mkinitcpio (siguiente generación a initramfs) en este link.

Nota: Lo segundo seguramente no sea necesario cuando instalemos un sistema sobre nuestro LVM

 

Para no alargar mas esta entrada, en una siguiente veremos como realizar operaciones avanzadas sobre esta estrcutura LVM ya creada, como por ejemplo: añadir nuevos dispositivos o dimensionar particiones para extender o crear nuevos PV, extender nuestro grupo de volúmenes sobre estos, crear, redimensionar y borrar volúmenes lógicos, etc…

 


Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: