LVM en GNU/Linux. Parte II: Anatomía y acciones básicas

Lo siento mucho por tanta demora al retomar este artículo, mi vida personal ha estado sumamente complicada y esto ha ayudado poco a mi rendimiento académico este primer semestre… pero bueno, a lo nuestro!

En la primera parte intenté además de explicar el concepto, permitirles evaluar si este método para particionar el disco responde a sus necesidades. En esta parte abordaremos dos temas, en primer lugar la anatomía del sistema y posterior a eso, veremos algunos de los comandos más básicos.

Anatomía

Nota: Esta parte puede ser más bien árida, si quieres puedes saltarte a la siguiente sección. Es probable que igual comprendas la lógica con los ejemplos.

La anatomía de LVM está compuesta de 3 partes principales, volumen lógico (LV), volumen físico (PV), y grupo de volúmenes (VG), más otras dos que pueden ser útiles para complementar a las primeras, los extents físicos y lógicos. La unidad base para poder tener un sistema LVM son los VG que están formados por un número a elección de PV, puede ser uno (en mi caso) o más de uno, y finalmente los LV que vendrían siendo lo más parecido a una partición propiamente tal. Para simplificar:

          sda1        sdb         (PV:s, ya sean particiones o discos completos)
                     /
                    /
               linuxvg            (VG)
             /    |    
           /      |      
       ubuntu   arch     home     (LV:s)
         |        |       |
       ext4      ext4    xfs      (sistemas de archivos)

(gracias Erik Bågfors)

Por otro lado, los PE son los trozos en los que se divide un PV, estos a su vez establecen el de los lógicos (LE) que tienen relación a los trozos de datos en los que se divide un VG.

Si tomamos el esquema anterior, supongamos que creo un grupo de volúmenes llamado linuxvg asignándolo una cantidad de 4 MB a cada extent, a este volumen le agregamos la segunda partición del primer disco (sda2) y el segundo disco completo (sdb), ahora cada uno tomará el nombre PV1 y PV2 (por supuesto que puede ser cualquier otro nombre). La segunda partición tiene 40 GB y el segundo disco 400 GB, de forma que PV1 tendrá (aprox) 10.000 extents y PV2 100.000 de forma que en total tendremos 110.000 extents en el VG linuxvg. Como consecuencia lógica, obtenemos una especie de «fusión» entre ambos discos. Ya nos queda crear un volumen lógico (o varios) asignándole una cantidad de disco (en MB, GB, etc) o a través de extents y por último, creamos un sistema de archivos para cada volumen lógico, que funciona para casi todo uso práctico como una partición.

Utilización básica

Nota: Los man de lvm son sumamente buenos, así que les sugiero encarecidamente que los miren.

Volumen físico (PV)

Si seguimos el ejemplo anterior, vemos que lo primero que debemos hacer es crear un PV, para ello utilizamos el intuitivo comando (siempre como root) de:

pvcreate /dev/particion o /dev/disco

Por ej:

pvcreate /dev/sda1 /dev/sdb2
# (Ahora podemos corroborar con:)
pvdisplay
pvs

Grupo de volúmenes (VG)

Continuando… tenía un disco de 40GiB y otro de 400GiB, resulta que tengo un PV de 440 GiB. Ya con nuestro volumen físico es hora de crear el (o los) grupos de volúmenes (VG), nuevamente con un intuitivo comando:

vgcreate GrupoDeVolumen /dev/sda1 /dev/sdb2
# (Corroboramos con:)
vgdisplay
vgs

Eso por supuesto, dejará un sólo gran volumen de 440GiB con un extent de 4MB que es lo que viene por defecto, en caso de querer cambiarlo sólo basta con agregar -s Tamaño[unidad] (qué puede ser m [megabytes], g [gigabytes], y así. Si no se agrega un sufijo, se asume que son megabytes).

Un PE de 4 MB nos permite un máximo de 256GB por LV.

Dependiendo de la distribución de GNU/Linux que utilices, puede ser que los volúmenes no se activen de forma automática, en ese caso, debes ejecutar:

vgchange -ay

Volumen lógico (LV)

Finalmente llegamos a la parte interesante de este extenso y latero artículo. Este es el momento que tenemos la mayor flexibilidad, y nuevamente LVM nos deslumbra con un intuitivo comando:

lvcreate -L 10G GrupoDeVolumen -n VolumenLogico
# (Para corrobar o si queremos más información:)
lvs
lvdisplay

Extender el tamaño de un LV es bastante simple, no así reducirlo, por lo que sugiero que comiences con tamaños pequeños y los aumentes en la medida que lo necesites. Recuerda que aquí eso no es problema.

Como ejemplo, los comandos lvs y lvdisplay en mi equipo son:

#~ lvs
  LV     VG    Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  arch   linux -wi-ao 10,00g
  gentoo linux -wi-a- 10,00g
  home   linux -wi-ao 93,13g
  swap   linux -wi-ao  1,02g
  ubuntu linux -wi-ao  9,31g

#~ lvdisplay
  --- Logical volume ---
  LV Name                /dev/linux/home
  VG Name                linux
  LV UUID                iIUY2W-bKwv-xCwZ-mxzo-qS2E-kikx-KMaw2O
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                93,13 GiB
  Current LE             23841
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

  --- Logical volume ---
  LV Name                /dev/linux/ubuntu
  VG Name                linux
  LV UUID                iZ6VaO-wTxv-igaL-hOiS-I306-7yB1-kvCBRU
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                9,31 GiB
  Current LE             2384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

  --- Logical volume ---
  LV Name                /dev/linux/swap
  VG Name                linux
  LV UUID                UEenCz-6ahZ-A930-Ahgy-eaz3-EA77-Dk5UPy
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1,02 GiB
  Current LE             262
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:2

  --- Logical volume ---
  LV Name                /dev/linux/arch
  VG Name                linux
  LV UUID                M3l88T-h2qW-IyiK-A4Sn-KL8n-3eRi-FWhe0D
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10,00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:3

  --- Logical volume ---
  LV Name                /dev/linux/gentoo
  VG Name                linux
  LV UUID                TR0qZ1-hZ5F-I1HX-2zam-0hqF-v2Ev-qWQOdH
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                10,00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:4

Como pueden ver con el primer comando, yo tengo 5 volúmenes lógicos (LV), arch, gentoo, home, swap y ubuntu, todos pertenecientes al mismo grupo de volúmenes (VG) llamado linux.

Si se fijaron en las primeras líneas de cada volúmen lógico:

  --- Logical volume ---
  LV Name                /dev/linux/arch
  VG Name                linux

Se podrán dar cuenta de cuál es la nomenclatura que utiliza el sistema para encontrar estas «particiones». LVM utiliza dos formas:

  1. /dev/GrupoDeVolumen/VolumenLógico
  2. /dev/mapper/GrupoDeVolumen-VolumenLógico

Por ejemplo, si quisiera montar la partición de gentoo en /mnt haría:

mount /dev/linux/arch /mnt

ó

mount /dev/mapper/linux-arch

Como decía, cualquiera de las dos es válida, yo me quedo con la primera porque me parece más amigable.

Otros comandos

Bueno, ya para terminar, les comento algunos comandos que podían serles útiles. El primero es lvextend, que tal como su nombre lo indica, consiste en aumentar el tamaño del LV en caso de que no hubiésemos llenado el VG. La sintaxis es como sigue:

lvextend -L+[Tamaño][Sufijo de la unidad] GrupoDeVolumen/VolumenLógico

Al igual que en los casos anteriores, si no especificamos el tipo de unidad (K, para kilobytes, M para megabytes, G para gigabytes, etc) se asumirá el por defecto que corresponde a megabytes. Así por ejemplo si yo quisiera darle 10 gigas más al volumen de gentoo ejecutaría:

lvextend -L+10G linux/gentoo

Tengan en cuenta que esto sólo aumenta el tamaño del volumen lógico y no del sistema de archivos, por lo que acto seguido tendríamos que aumentar ese tamaño también.

Además de agregar y modificar, también podemos eliminar un volumen lógico, grupo de volumen o disco físico se realiza con, lvremove, vgremove, pvremove más la unidad, por ejemplo:

lvremove /dev/linux/ubuntu

Palabras finales

Luego de todo esto deberías ser capaz de crear un sistema con LVM, crear, extender y borrar volúmenes. Tengo que hacerles notar un par de cosas importantes antes de incursionar en este método:

  1. La reducción de volúmenes es posible, pero es muy complejo y riesgoso.
  2. LVM sólo puede ser utilizado sólo por Linux, ni siquiera los sistemas BSD pueden (ni hablar de Windows).
  3. De lo anterior también se desprende de que es mala idea si quieres acceder a tus archivos desde otro SO, a menos que dejes una partición aparte que no sea lvm para compartir los datos.

Espero que les haya resultado interesante y que le encuentren algún uso. Cualquier comentario o feedback en los comentarios.

4 comentarios en “LVM en GNU/Linux. Parte II: Anatomía y acciones básicas

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.