Gentoo Logo

Renuncia de responsabilidad: La versión original de este artículo fue publicada por IBM developerWorks y es propiedad de Westtech Information Services. Este documento es una versión actualizada del artículo original y contiene mejoras introducidas por el Equipo de Documentación de Gentoo.
Este documento carece de soporte activo.


Aprender LVM Linux, Parte 2

1.  La mejora de cvs.gentoo.org

Introducción

En mi primer artículo LVM, expliqué los conceptos que hay tras LVM. Ahora es el momento de poner LVM en acción. En este artículo, voy a configurar LVM en el servidor oficial cvs de Gentoo Linux, cvs.gentoo.org. Aunque cvs.gentoo.org tiene una sola unidad de disco, la flexibilidad de LVM proporciona una increíble mejora sobre el esquema normal de particionamiento estático. Mostraré todos los pasos del proceso de conversión a LVM por lo que, si se está interesado, se podrá realizar una conversión similar en cualquier otra máquina.

Aviso: Debido a que implementar LVM es un cambio importante para el sistema (involucrando la creación de nuevas particiones y otras acciones potencialmente arriesgadas) es realmente una buena idea realizar una copia de seguridad completa de todo el sistema antes de comenzar a llevar a cabo este proceso. Si no se va a realizar una copia de seguridad, espero que se esté usando una máquina de pruebas que no contenga datos importantes. He de mencionar que no tuve el más mínimo problema en la conversión a LVM, pero es mejor estar preparado por si algo sale mal.

Queda dicho, continuemos. Antes de comenzar con el proceso de conversión, actualicé cvs.gentoo.org y estaba utilizando los siguientes paquetes. En el momento en que realicé la transición LVM, estas eran las últimas versiones disponibles (ver Recursos más adelante en este artículo):

  • Linux kernel 2.4.1-ac19
  • LVM 0.9.1_beta5
  • reiserfs-utils 3.6.25

Ahora, el disco duro. cvs.gentoo.org tenía una unidad IBM de 45 GB; aunque, cuando instalé Gentoo Linux en el cvs, solamente particioné alrededor de 10 GB de la unidad, manteniendo los 35 GB restantes para futuras particiones. Estos son los pequeños trucos que se necesitan usar cuando no se está utilizando LVM -- dejar parte de la unidad sin particionar es una primitiva, aunque efectiva, forma de permitir una futura expansión. De todos modos, con LVM tenemos una solución mucho mejor.

El problema del espacio

En las pasadas semanas, venía observando que la partición raíz ReiserFS se había ido llenando lentamente, como puede verse con este resultado de df:

Listado de Código 1.1: Reducción de espacio libre

Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda3              9765200   6989312   2775888  72% /
tmpfs                   269052         0    269052   0% /dev/shm

Bien, una partición raíz con un 72% de ocupación no es exactamente una crisis, pero tampoco es una situación maravillosa. ReiserFS, como muchos otros sistemas de ficheros, comienza a ser mucho más lento en cuanto se empieza a ocupar todo el espacio, y era solo una cuestión de tiempo que mi sistema de ficheros raíz estuviese ocupado por completo y el rendimiento del mismo se redujera considerablemente.

Decidí solucionar el problema usando LVM para crear un nuevo volumen lógico a partir de los 35 GB sin utilizar al final de mi disco duro. Entonces, crearía un sistema de ficheros en este volumen y movería gran parte de los contenidos de /dev/hda3 al mismo.

Si se está pensando en hacer algo similar en una máquina, lo primero que se necesita hacer es encontrar la parte del sistema de ficheros raíz que vamos a mover al volumen lógico. Para mí, la elección fue fácil -- el árbol /home estaba ocupando alrededor de 5,7 GB. Moviendo /home a su propio volumen lógico LVM, dejaría al sistema de ficheros raíz al 20% de su capacidad. Dado que la mayoría de nuevos datos iban a parar a /home, mi sistema de ficheros raíz se quedaría aproximadamente al 20% de su capacidad -- lo cual es muy favorable.

El comienzo de la solución

Para comenzar la conversión, primero tuve que particionar el espacio no utilizado al final del disco duro. Usando cfdisk, creé una partición de 35 GB (/dev/hda5) y configuré el tipo de partición como 8E (el tipo de partición LVM oficial). Después de este cambio, reinicié para forzar la relectura de la tabla de particiones. Después de haber reiniciado, mi tabla de particiones era la siguiente:

Listado de Código 1.2: La nueva tabla de particiones

# sfdisk -l
Disk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/track
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
   Device Boot Start     End   #cyls   #blocks   Id  System
/dev/hda1   *      0+    247     248-   124960+  83  Linux
/dev/hda2        248     743     496    249984   82  Linux swap
/dev/hda3        744   20119   19376   9765504   83  Linux
/dev/hda4      20120   89354   69235  34894440    5  Extended
/dev/hda5      20120+  89354   69235- 34894408+  8e  Linux LVM

Ahora que tenía una partición de 35 GB, estaba listo para inicializarla para LVM. He aquí el procedimiento -- primero, tenía que inicializar los 35 gigabytes como un volumen físico; después tenía que crear un grupo de volumen que usase el volumen físico y, finalmente, tenía que localizar algunos de los "extents" (grupos de bloques dedicados al almacenamiento) en el grupo de volumen, creando un volumen lógico que contendría el nuevo sistema de ficheros y ocuparía con todos los archivos contenidos en /home.

Para comenzar el proceso, usé el comando pvcreate para inicializar /dev/hda5 como volumen físico:

Listado de Código 1.3: Creación del volumen físico

# pvcreate /dev/hda5
pvcreate -- physical volume "/dev/hda5" successfully created

pvcreate configuró un área especial de "cuentas" en /dev/hda5, denominada VGDA (Área del Descriptor del Grupo de Volumen). LVM usa este área para seguirle la pista a cómo se localizan los extents físicos, entre otras cosas.

Mi siguiente paso fue crear un grupo de volumen y añadir /dev/hda5 al grupo. El grupo de volumen actuaría como un conjunto de extents (fragmentos de bloques de almacenamiento). Una vez que el grupo de volumen estaba creado, podía crear tantos volúmenes lógicos como quisiese. Decidí que mi grupo de volumen se llamaría "principal":

Listado de Código 1.4: Creación del grupo de volumen

# vgcreate principal /dev/hda5
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "principal"
vgcreate -- volume group "principal" successfully created and activated

El comando vgcreate hizo un par de cosas. Además de crear el grupo de volumen "principal", también configuró /dev/hda5 para usar extents de 4 MB, el tamaño por defecto de los extents. Esto significa que cualquier volumen lógico que crease a partir de este grupo de volumen, puede ser expandido o reducido en bloques de 4MB.

Debido a limitaciones en el núcleo, el tamaño del extent determina el máximo tamaño del volumen lógico. Como puede verse en la información mostrada anteriormente, un tamaño de 4 MB por extent impone una limitación del volumen lógico a 256 gigabytes, que es una cantidad fácilmente alcanzable si se están añadiendo varias unidades de gran capacidad al grupo de volumen. Si los volúmenes pueden llegar a ser mayores de 256 GB por unidad, recomiendo indicar un tamaño mayor de extent cuando se use el comando vgcreate. Los extents pueden ser de 8 KB hasta 512 MB, y debe ser siempre un múltiplo de 2. Incrementar el tamaño del extent más de 4 MB, causará que el tamaño máximo del volumen físico crezca a escala de acuerdo con el mismo, hasta un máximo de 1 petabyte (aunque el límite actual de tamaño en sistemas x86 es de 2 terabytes). Por ejemplo, si hubiese querido crear un un grupo de volumen con extents de 32 MB, habría tecleado:

Listado de Código 1.5: Extent de mayor tamaño

# vgcreate -s 32M principal /dev/hda5

32 MB es un buen tamaño para los extents, dado que las porciones de 32 MB se pueden manejar adecuadamente y aumenta el tamaño máximo del volumen lógico a 2 terabytes. En cuanto creamos el grupo de volumen, podemos ver toda su información tecleando vgdisplay:

Listado de Código 1.6: Examinar la información del volumen

# vgdisplay
--- Volume group ---
VG Name               principal
VG Access             read/write
VG Status             available/resizable
VG #                  0
MAX LV                256
Cur LV                0
Open LV               0
MAX LV Size           255.99 GB
Max PV                256
Cur PV                1
Act PV                1
VG Size               33.28 GB
PE Size               4 MB
Total PE              8519
Alloc PE / Size       0 / 0
Free  PE / Size       8519 / 33.28 GB
VG UUID               2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn

Ahora que teía mi grupo de volumen, estaba listo para crear un volumen lógico. Decidí darle un tamaño inicial de 8 gigabytes y llamarlo "lv_home":

Listado de Código 1.7: Creación del nuevo volumen lógico

# lvcreate -L8G -nlv_home principal
lvcreate -- doing automatic backup of "principal"
lvcreate -- logical volume "/dev/principal/lv_home" successfully created

Después, creé un sistema de ficheros en el volumen:

Listado de Código 1.8: Creación del sistema de ficheros

# mkreiserfs /dev/principal/lv_home


  <----------- MKREISERFSv2 ----------->

   Block size 4096 bytes
   Block count 2097152
   Used blocks 8275
           Journal - 8192 blocks (18-8209), journal header is in block 8210
           Bitmaps: 17, 32768, 65536, 98304, 131072, 163840,
           196608, 229376, 262144, 294912, 327680, 360448,
           393216, 425984, 458752, 491520, 524288, 557056,
           589824, 622592, 655360, 688128, 720896, 753664,
           786432, 819200, 851968, 884736, 917504, 950272,
           983040, 1015808, 1048576, 1081344, 1114112,
           1146880, 1179648, 1212416, 1245184, 1277952,
           1310720, 1343488, 1376256, 1409024, 1441792,
           1474560, 1507328, 1540096, 1572864, 1605632,
           1638400, 1671168, 1703936, 1736704, 1769472,
           1802240, 1835008, 1867776, 1900544, 1933312,
           1966080, 1998848, 2031616, 2064384
   Root block 8211
Hash function "r5"
ATTENTION: ALL DATA WILL BE LOST ON '/dev/principal/lv_home'! (y/n)y
journal size 8192 (from 18)
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..done.

Ahora que se había creado el nuevo sistema de ficheros, podía montarlo en /mnt/newhome:

Listado de Código 1.9: Montar el nuevo volumen

# mkdir /mnt/newhome
# mount /dev/principal/lv_home /mnt/newhome
# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda3              9765200   6989840   2775360  72% /
tmpfs                   291388         0    291388   0% /dev/shm
/dev/principal/lv_home      8388348     32840   8355508   1% /mnt/newhome

Como puede verse, estaba casi listo para empezar a copiar todos los archivos de /home. Pero antes de comenzar, debía pasar al nivel de ejecución 1 para asegurarme de que ningún usuario o proceso accedía o modificaba archivos en /home.

Listado de Código 1.10: Nivel de ejecución 1

# init 1

Entonces, empecé a copiar los archivos:

Listado de Código 1.11: Copiado de archivos al nuevo directorio

# cp -avx /home/* /mnt/newhome

La copia terminó en alrededor de 10 minutos. Entonces hice una copia de seguridad del /home original a /home.old, solo por si algo había ido mal con la copia. Creé un nuevo punto de montaje y remonté el nuevo home en /home:

Listado de Código 1.12: Nuevo punto de montaje

# cd /
# mv home home.old
# mkdir home
# umount /mnt/newhome
# mount /dev/principal/lv_home /home

Entonces, era el momento de configurar el servidor para que mi nueva partición /home estuviese disponible cada vez que la máquina se iniciase. Primero, modifiqué /etc/fstab para que incluyese la nueva entrada de /home:

Listado de Código 1.13: Editar fstab


#fs                 mountpoint       type         opts          dump/pass
/dev/hda3           /                reiserfs     defaults      1 1
/dev/principal/lv_home   /home       reiserfs     defaults      2 2
/dev/hda2           none             swap         sw            0 0
/dev/hda1           /boot            reiserfs     noauto        0 0
/dev/cdrom          /mnt/cdrom       iso9660      noauto,ro     0 0
proc                /proc            proc         defaults      0 0
none                /dev/pts         devpts       mode=620      0 0
tmpfs               /dev/shm         tmpfs        defaults      0 0

Entonces, hice unas modificaciones menores a las macros de inicialización. Modifiqué la macro de inicio "checkroot" para que ejecutase los siguientes comandos en cuanto la partición raíz se remontase en modo lectura/escritura:

Listado de Código 1.14: Modificación de la macro de inicio

/sbin/vgscan
/sbin/vgchange -a y

Entonces, modifiqué la macro que desmonta todos los sistemas de ficheros cuando el sistema se apaga, para que ejecutase el siguiente comando inmediatamente después de desmontarlos:

Listado de Código 1.15: Modificación de la macro de apagado

/sbin/vgchange -a n

En cuanto terminé con todos estos pasos, reinicié la máquina, y todo funcionó perfectamente. Después de un día o así sin el más mínimo problema, borré el directorio /home.old para liberar espacio en la partición raíz. El paso a LVM fue todo un éxito.

La belleza de LVM

Mientras que la transición a LVM puede parecer algo compleja, una vez que la hemos completado, manejar los sistemas de ficheros es algo mucho más sencillo. Como ejemplo, decidí cambiar el tamaño de mi nuevo volumen lógico /home añadiéndole unos 2 gigabytes al final del sistema de ficheros. Primero, añadí la capacidad adicional al volumen lógico "lv_home", y después usé la utilidad resize_reiserfs para expandir el sistema de ficheros y utilizar esta capacidad añadida. He aquí los dos comandos que lo llevaron a cabo:

Listado de Código 1.16: Utilización del espacio adicional

# lvextend -L+2G /dev/principal/lv_home
# resize_reiserfs -f /dev/principal/lv_home

En aproximadamente un segundo, incrementé la capacidad del sistema de ficheros /home 2 GB; además, ni tan siquiera necesité reiniciar, pasar al nivel de ejecución 1, ni desmontar /home para realizar el cambio de tamaño. Todo continuó funcionando tal y como lo había hecho anteriormente. ¿No es excelente? He aquí el estado actual de mis sistemas de ficheros:

Listado de Código 1.17: Espacio en los sistemas de ficheros

# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda3              9765200   1413340   8351860  15% /
/dev/principal/lv_home     10485436   5609836   4875600  54% /home

Se habrá visto que LVM puede hacer el trabajo de un administrador mucho más sencillo. En el futuro, espero mover partes adicionales del sistema de ficheros raíz a LVM y, eventualmente, convertir el sistema de ficheros raíz en un volumen lógico LVM. Los siguientes recursos ayudarán a aprender más acerca de LVM.

Recursos

  • Para conceptos LVM y consejos para conseguir los últimos parches para el núcleo y herramientas instaladas en nuestro sistema, ver mi anterior artículo Aprender LVM Linux, Parte 1.
  • Descargue el tarball LVM desde RedHat.
  • Los impacientes querrán comprobar el LVM HOWTO de Heinz Mauelshagen, que muestra cómo configurar volúmenes físicos, grupos de volumen y volúmenes lógicos. Todo esto es algo que cubriré en mi siguiente artículo.
  • Hay un interesante HOWTO que muestra cómo configurar el sistema de archivos raíz en un volumen lógico. En cuanto salga la versión final de LVM-0.9.1, intentaré hacer esto.
  • Andreas Dilger se ha involucrado en el proyecto LVM Linux y tiene un muy interesante redimensionador del sistema de ficheros ext2.
  • ReiserFS es un excelente sistema de ficheros (especialmente en combinación con LVM). Si se está usando ReiserFS, debería tenerse instalado también reiserfs-utils, que contiene el programa llamado reiserfs_resize -- que permite cambiar el tamaño de dicho sistema de ficheros.
  • Para más información acerca de la configuración de volúmenes RAID, ver la Parte 1 y la Parte 2 de los artículos de Daniel acerca del RAID software.
  • Como repaso, ver el tutorial de compilación del núcleo Linux de Daniel.


Imprimir

Página actualizada 22 de enero, 2006

Sumario: En este artículo, Daniel comparte su experiencia convirtiendo el sistema de ficheros /home de cvs.gentoo.org en un volumen lógico LVM. Después de la transición, veremos los beneficios de LVM al poder cambiar dicha partición de tamaño en tiempo real, sin reiniciar, desmontar /home ni teniendo que pasar al nivel de ejecución 1. Todos los procesos continúan funcionando sin interrupción. Los detalles paso a paso de la conversión efectuada por Daniel guiarán a cualquiera interesado en una transición similar en su propia máquina.

Daniel Robbins
Autor

Fernando M. Bueno
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.