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 sólo 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, sólo 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 |
/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.
|
|