Copyright © 2002-2003 Sistina Software, Inc
Copyright © 2004 Red Hat, Inc
Se concede el permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.2 publicada por la Fundación para el Software Libre; sin cambiar secciones, sin texto de portada ni contraportada. Una copia de esta licencia está incluída en la sección titulada "Licencia de Documentación Libre de GNU".
Este documento se distribuye con el anhelo de que será útil, pero SIN NINGUNA GARANTÍA, tanto explícita o implícita. Mientras que todos los esfuerzos que se han tomado para asegurar la exactitud de la información aquí documentada, el/los autor(es)/editor(es)/mantenedor(es)/contribuyente(s) NO ASUMEN NINGUNA RESPONSABILIDAD por ningún error, o por ningún daño, directo o por consecuencia, del resultado del uso de la información aquí documentada.
Este es un intento de recopilar todo lo necesario para saber cómo tener LVM instalado y funcionando. Abarcará el proceso íntegro de obtener, compilar, instalar y configurar LVM. También se incluirán las sugerencias de configuraciones de LVM que han sido probadas. Esta versión del Cómo es para LVM 2 con "device-mapper" y LVM 1.0.8.
Todas las versiones anteriores de LVM se consideran obsoletas y se mantienen sólo por razones de histórico. Este documento no intenta explicar o describir cómo funcionan o el uso de esas versiones.
Mantendremos la última versión de este Cómo (en inglés) en el CVS con los otros Cómos de la LDP. Puedes obtenerlo yendo a ``LDP/howto/docbook/LVM-HOWTO.xml'' desde el servidor de CVS tLDP. Deberías poder obtener una versión legible por los humanos de este Cómo desde http://www.tldp.org/HOWTO/LVM-HOWTO.html
Este documento es distribuído con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, tanto explícita o implícita. Aunque los esfuerzos se han realizado por mantener la veracidad de la información aquí documentada, el(los) autor(es)/editor(es)/mantenedor(es)/contribuyente(s) NO asumen NINGUNA RESPONSABILIDAD por ningún error, o por ningún daño, directo o a consecuencia del uso de la información aquí documentada.
Listado de todo aquel que ha puesto palabras en este archivo.
Jochen Radmacher - Información extendida de JFS
Por favor, notifica al mantenedor de este Cómo si piensa que debería estar en la lista anterior.
LVM es un gestor de volúmenes lógicos para el sistema operativo Linux. Existen dos versiones de LVM para Linux:
LVM 2 - La última y mejor versión de LVM para Linux.
LVM 2 es casi totalmente compatible con los volúmenes creados con LVM 1. La excepción a ésto son las instantáneas (Debería eliminar los volúmenes de tipo instantánea antes de actualizar a LVM 2)
LVM 2 usa el controlador para el mapeo de dispositivos del kernel. El soporte del mapeador de dispositivos está en el árbol del núcleo 2.6 y hay parches disponibles para las actuales versiones del kernel 2.4.
LVM 1 - La versión que está en la serie de kernels 2.4.
LVM 1 es un producto bien definido que ha sido considerado estable desde hace un par de años. Los controladores del kernel para LVM 1 están incluídos en la serie 2.4, pero eso no significa que su kernel 2.4.x esté actualizado con la última versión de LVM. Eche un vistazo a LÉAME para la última información sobre qué kernels tienen al código actual.
LVM ofrece un punto de vista de más alto nivel del almacenamiento en disco en el sistema de un ordenador que el punto de vista de discos y particiones. Ofrece al administrador del sistema mucha más flexibilidad y capacidad de almacenamiento para aplicaciones y usuarios.
Los volúmenes de almacenamiento creados bajo el control de LVM pueden ser redimensionados y movidos casi como quiera, aunque ésto implique alguna actualización en las herramientas del sistema de archivos.
LVM permite además la gestión de gestionar la capacidad de almacenamiento en grupos definidos por el usuario, permitiendo al administrador llegar a un acuerdo en cuanto a los nombres de los grupos de volúmenes, como "desarrollo" y "ventas" preferibles a los nombres físicos de los discos como "sda" y "sdb".
LVM está asociado tradicionalmente a instalaciones que tienen muchos discos pero es igual de apropiado para sistemas pequeños para uno o dos discos.
Una de las difíciles decisiones de cara a un nuevo usuario instalando Linux la primera vez es cómo particionar el disco. La necesidad de estimar cuánto espacio será necesario para el sistema y para el usuario hace la instalación más compleja de lo necesario y muchos usuarios optan por poner todos los datos en una partición grande intentando evitar el tema.
Una vez que el usuario ha adivinado cuanto espacio necesitará para /home /usr / (o ha dejado al programa de instalación hacerlo) entonces es muy común que alguna de estas particiones se llene antes de que lo haga otra y se quede sin espacio.
Con LVM, el disco entero será destinado para un único grupo de volúmen y un volúmen lógico creado para mantener el sistema de archivos de / /usr y /home. Si, por ejemplo el volumen lógico de /home se llenara pero todavía hubiese espacio disponible en /usr entonces sería posible encoger /usr unos cuantos megabytes y realojar el espacio en /home.
Otra alternativa sería alojar el mínimo espacio para cada volúmen lógico y dejar algo de disco sin alojar. Entonces, cuando las particiones empiecen a llenarse, podrían ser expandidas tanto como fuesen necesarias.
Un ejemplo: Juan compra un PC con un disco de 8.4 Gigabytes de capacidad e instala Linux particionando el sistema de esta forma:
/boot /dev/hda1 10 Megabytes
swap /dev/hda2 256 Megabytes
/ /dev/hda3 2 Gigabytes
/home /dev/hda4 6 Gigabytes
Así, él piensa, maximizará el espacio disponible para todos sus archivos MP3.
Un tiempo después Juan decide que quiere instalar la última "suite" ofimática y el último escritorio disponible pero se da cuenta de que la partición principal no tiene suficiente capacidad, pero que si guarda todos sus archivos MP3 en su nueva grabadora de DVD tendrá mucho espacio en /home.
Sus opciones no son buenas:
Reformatear el disco, cambiar el esquema de particionada y reinstalar.
Comprar un nuevo disco e imaginarse otro esquema de particionado que requiera el mínimo movimiento de datos.
Crear un enlace simbólico en / apuntando a /home e instalar el nuevo software en /home
Con LVM ésto resulta mucho más fácil:
Juana compra un PC similar pero usa LVM para dividiar el disco de una manera similar:
/boot /dev/hda1 10 Megabytes
swap /dev/vg00/swap 256 Megabytes
/ /dev/vg00/root 2 Gigabytes
/home /dev/vg00/home 6 Gigabytes
![]() | el arranque no se incluye en el LV porque los gestores de arranque no entienden volúmenes LVM todavía. Es posible que el arranque en LVM funciones, pero corre el riesgo de tener un sistema que no arranque. |
![]() | la raiz en LV debería ser usado por sólo por usuarios avanzados |
|---|---|
la raiz en LVM requiere una imagen "initrd" que active la raiz LV. Si un kernel es actualizado sin compilar la imagen "initrd" necesaria, entonces el kernel será imposible de arrancar. Las nuevas distribuciones soportan lvm en sus scripts "mkinitrd" así como tienen imágenes "initrd" empaquetadas, por lo que no resulta difícil. |
Para resuelver el problema similar ella puede reducir el tamaño de /home en unos cuantos Gigabytes y añadírselos a la partición raiz.
Supongamos que Juan y Juana deciden llenar la partición /home y deciden añadir un nuevo disco de 20 Gigabytes a sus sistemas.
Juan formatea el disco entero como una partición (/dev/hdb1) y mueve los datos de /home dentro de ella y usa el nuevo disco como /home. Pero él tiene 6 gigabytes sin usar o tiene que usar enlaces simbólicos para hacer que el disco aparezca como una extensión de /home, como /home/joe/oldm-mp3s.
Juana simplemente añade el nuevo disco a su existente grupo de volumen y extiende su volumen lógico /home para incluir el nuevo disco. O, de hecho, ella puede mover los datos desde /home en el disco antiguo hacia el nuevo y entonces extender la raiz para cubrir todo el disco antiguo.
Los beneficios de LVM son más obvios en sistemas grandes con muchos discos.
Gestionando un conjunto de discos grandes es un trabajo arduo, particularmente complejo si el sistema contiene muchos discos de distintos tamaños. Balanceando (a veces comflictivo) la necesidad de capacidad de almacenamiento de varios usuarios puede ser una pesadilla.
Los grupos de usuarios pueden ser alojados en grupos de volúmenes y volúmenes lógicos y estos pueden ir creciendo según se necesite. Es posible para el administrador del sistema "ocultar" la capacidad de disco hasta que sea necesaria. Puede ser añadida al volumen del grupo de usuarios que lo necesite.
Cuando se añaden nuevas unidades al sistema, no es necesario mover los archivos de los usuarios para usar del mejor modo posible la capacidad de disco; simplemente se añade el nuevo disco al grupo de volumen existente o grupos y extender el volumen lógico como sea necesario.
También es fácil mantener fuera de servicio las viejas unidades moviendo los datos que estén en ellas dentro de las nuevas - ésto puede hacerse "online", sin interrumpir el servicio al usuario.
Este diagrama nos da una visión general de los principales elementos en un sistema LVM:
+-- Volume Group --------------------------------+
| |
| +----------------------------------------+ |
| PV | PE | PE | PE | PE | PE | PE | PE | PE | |
| +----------------------------------------+ |
| . . . . |
| . . . . |
| +----------------------------------------+ |
| LV | LE | LE | LE | LE | LE | LE | LE | LE | |
| +----------------------------------------+ |
| . . . . |
| . . . . |
| +----------------------------------------+ |
| PV | PE | PE | PE | PE | PE | PE | PE | PE | |
| +----------------------------------------+ |
| |
+------------------------------------------------+
Otra manera de verlo es esta (cortesía de Erik Bågfors procedente de la lista de correo de linux-lvm):
hda1 hdc1 (PV:s en particiones o los propios discos)
\ /
\ /
diskvg (VG)
/ | \
/ | \
usrlv rootlv varlv (LV:s)
| | |
ext2 reiserfs xfs (sistemas de archivos)
El Grupo de Volumen es el más alto nivel de abstración usado en LVM. Se refiere a la colección de Volúmenes Lógicos y Volúmenes Físicos dentro de una unidad administrativa.
Un volumen físico es tipicamente un disco duro, además podría ser también un dispositivo que 'parece' un disco duro (ej. un raid por software).
El equivalente a una partición de disco en un sistema no-LVM. El LV es visible como un dispositivo de bloques estándar; el LV puede contener un sistema de archivos (ej. /home).
Cada volumen físico está dividido por trozos de datos, conocidos como extensiones físicas, estas extensiones tienen el mismo tamaño que las extensiones lógicas en un grupo de volumen.
Cada volumen lógico está dividido en trozos de datos, conocidos como extensiones lógicas. El tamaño de la extensión es el mismo para todo el volumen lógico dentro del grupo de volumen.
Un ejemplo concreto ayudará:
Supongamos que tenemos un grupo de volumen llamado VG1, este grupo de volumen tiene una extensión física de 4MB. Dentro de este grupo de volumen metemos 2 particiones, /dev/hda1 y /dev/hdb1. Estas particiones se convertirán en los volúmenes físicos PV1 y PV2 (se les puede dar nombres más significativos dependiendo del administrador). Los PV's son divididos en trozos de 4MB, y este será el tamaño de extensión del grupo de volumen. Los discos son de distintos tamaños y tendremos 99 extensiones en PV1 y 248 en PV2. Ahora podemos crear un volumen lógico, que puede tener el tamaño que queramos entre 1 y 347 (248 + 99) extensiones. Cuando creamos el volumen lógico se define un mapeado entre extensiones lógicas y físicas, ej. extensión lógica 1 podría mapearse en la extensión física 51 de PV1, los datos escritos en los primeros 4 MB del volumen lógico se escribirán en la extensión 51 de PV1.
El administrador puede elegir entre varias estrategias de mapeado para las extensiones lógicas dentro de las extensiones físicas:
Mapeado linealasignará un rango de PE's en orden en un área de un LV ej., LE 1 - 99 se mapea en PV1 y LE 100 - 347 se mapea en PV2.
Mapeado rayado intercalará las rayas de extensiones lógicas por un número de volúmenes físicos eg.,
1ª raya de LE[1] -> PV1[1],
2ª raya de LE[1] -> PV2[1],
3ª raya de LE[1] -> PV3[1],
4ª raya de LE[1] -> PV1[2],
y así. En ciertas situaciones esta estrategia puede
perjudicar el rendimiento del volumen lógico.
![]() | LVM 1 Caveat |
|---|---|
Los LV creados usando el modo troceado no pueden ser extendidos después de los PV de los que originalmente fueron creatos en el LVM 1. |
Una maravillosa utilidad provista por LVM son las 'instantáneas'. Esto permite a los administradores crear un nuevo dispositivo de bloque que tiene una copia exacta de un volumen lógico, congelado en algún punto del tiempo. Normalmente podría ser usado cuando se va a lanzar un proceso batch o una copia de seguridad, por ejemplo, y necesita realizarse en un volumen lógico, pero no quiere parar un sistema vivo en el que se están cambiando datos. Cuando se ha terminado con el dispositivo de la instantánea simplemente se puede borrar. Esta herramienta requiere que la instantánea se cree cuando los datos contenidos en el volumen lógico sean consistentes - el parche de bloqueo de VFS para LVM1 se asegura que algunos sistemas de archivos hagan ésto automaticamente cuando una instantánea es creada, y muchos de los sistemas de archivos en el kernel 2.6 hacen esto automaticamente cuando se crea una instantánea sin parche.
LVM1 tiene instantáneas de sólo-lectura. Las instantáneas de sólo lectura funcionan creando una tabla de excepción, que es usada para mantener una pista de los bloques que han sido modificados. Si un bloque a de ser cambiado, primero se copia a la instantánea, marcada como que se ha copiado en la tabla de excepción, y entonces los nuevos datos son escritos en el volumen original.
En LVM2, las instantáneas son de lectura/escritura por defecto. Las instantáneas de lectura/escritura funcionan como las de sólo lectura, con la característica adicional de que si los datos son escritos en la copia instantánea, ese bloque es marcado en la tabla de excepción como usado, y nunca se vuelve a copiar del volumen original. Ésto nos abre nuevas posibilidades que no nos brindan las instantáneas de sólo lectura de LVM1. Un ejemplo es crear una instantánea de un volumen, montar la instantánea, y experimentar con programas que cambian archivos en ese volumen. Si no le gusta lo que ha hecho, puede desmontar la instantánea, borrarla, y montar el sistema original en su lugar. Es muy útil para crear volúmenes para usar con Xen. Puede crear una imagen de disco, entonces crear una instantánea y modificar la instantánea para una instancia particular de domU. Puede crear entonces otra instantánea del volumen original, y modificarlo para otra instancia diferente de domU. Desde que la única capacidad usada por la instantánea son los bloques que han cambiado en el original o en la instantánea, la mayoría del volumen es compartido por el domU.
![]() | Información para actualizar LVM 1 -> LVM 2 |
|---|---|
Asegúrese de eliminar las instantáneas de LVs antes de actualizar de LVM 1 a LVM 2. (Lea Section 4.1) |
Aquí van unas instrucciones para empezar :)
Comienza por eliminar las instantáneas de LVs del sistema. No son manejadas por LVM 2 y evitará que sean activadas cuando LVM 2 se arranque.
Asegúrate de que tienes otro sistema de arranque del sistema que no sea el típico de la partición de arranque. Necesitas las utilidades de LVM 1, las utilidades estándares del sistema (mount) y un kernel compatible con LVM 1 en caso de que necesites echar para atrás y arreglar alguna cosa.
Instala las fuentes y compila las herramientas de LVM 2 y el mapeador de dispositivos. Necesitas instalar la biblioteca del mapeador de dispositivos tecleando " make install " antes de compilar las herramientas de LVM 2. También copia el script dm/scripts/devmap_mknod.sh dentro de /sbin. Recomiendo que sólo se instale el binario 'lvm' de momento por si necesitas acceso a las herramientas de LVM 1. Si tienes acceso a paquetes de LVM 2 y del "device-mapper", puedes instalarlos, pero cuidado con eliminar el conjunto de utilidades de LVM 1.
Obtén un mapeador de dispositivos compatible con el kernel, o compílalo dentro del kernel o como módulo.
Recuerda dónde se activa LVM 1 en el arranque. Asegúrate de que el mapeador de dispositivos es cargado en ese punto (si estás usando el mapeador de dispositivos como módulo) y añade '/sbin/devmap_mknod.sh; lvm vgscan; lvm vgchange -ay' seguidamente.
Instala el kernel con soporte para el mapeador de dispositivos. Rearranca. Si todo va bien, deberías poder funcionar con lvm2. lvm2.
No. Necesitas el mapeador de dispositivos. Las utilidades de lvm2 usan el mapeador de dispositivos para comunicarse con el kernel y hacer todo el mapeo de dispositivos (de ahí el nombre de mapeador de dispositivos). Mientras tengas el mapeador de dispositivos, podrás usar LVM2.
4.1.3. Obtengo errores sobre /dev/mapper/control cuando intento usar las utilidades de LVM 2. ¿Qué ocurre?
La principal causa es que no hayas ejecutado "dmsetup mknodes" después de arrancar dentro de un kernel con capacidad para dm. Este script genera el nodo de control para el mapeador de dispositivos.
Si no tienes el "dmsetup mknodes", no desesperes! (Aunque deberías actualizar a la última versión del mapeador de dispositivos.) Es muy fácil de crear el archivo /dev/mapper/control manualmente:
Asegúrate de que tienes el módulo del mapeador de dispositivos cargado (si no lo agregaste dentro del kernel).
Ejecuta
# cat /proc/misc | grep device-mapper | awk '{print $1}'
y apunta el número
en pantalla. (Si no obtienes ninguna saluda, vuelve al
paso 1.)
Ejecuta
# mkdir /dev/mapper- si obtienes un error sobre que ya existe /dev/mapper, asegúrate de que es un directorio y sigue adelante.
Ejecuta
# mknod /dev/mapper/control c 10 $numberdonde $number es el número que conseguimos en el paso 2.
Si estás usando la versión estable y parcheada del mapeador de dispositivos del tarball lvm2, todas las funcionalidades que tenías usango lvm1 están soportadas por las utilidades de lvm2 (necesitarías eliminar las instantáneas antes de actualizar de lvm1 a lvm2)
Si estás usando la versión del mapeador de dispositivos del kernel 2.6 de la serie de kernel.org los siguientes comandos y tipos de LV no están soportados:
pvmove
snapshots
4.1.5. Utiliza LVM 2 un formato diferente al de LVM 1 para la representación en disco de los Grupos de Volúmenes y Volúmenes Lógicos?
Sí. LVM 2 usa el formato metadata de lvm 2. Este formato es mucho más flexible que el formato metadata de LVM 1, eliminando y reduciendo muchas de las limitaciones que tiene LVM 1.
Sí. LVM 2 activará y trabajará con los VG y LVs creados con LVM 1. La excepción a ésto son las instantáneas creadas con LVM 1 - éstas deberían ser eliminadas antes de la actualización. Las instantáneas que se mantengas deberán ser borradas antes de que sus originales sean activados por LVM 2.
Sí. Usa vgconvert para convertir tus VG y todos los LVs contenidos en él al nuevo formato metadata lvm 2. Cuidado porque no siempre es posible volver a convertirlo en el formato metadata de lvm 1.
4.1.8. He actualizado a LVM 2, pero las utilidades siguen fallando con errores de memoria. ¿Por qué?
Una posible causa de estos es que alguna versión de LVM 1 (El usuario que informó de este error originalmente estaba usando Mandrake 9.2, pero no necesariamente ocurre sólo en esta distribución) no puso un UUID dentro de la estrucura de PV y VG. Las actuales versiones de las utilidades de LVM 2 automaticamente rellenan los UUIDs en las estructuras si ven que no están, por lo que deberías utilizar la versión más actual y tu problema se solucionará. Si no, envía un mensaje a la linux-lvm mailing list
4.1.9. Tengo mi partición raiz en un LV en LVM 1. ¿Cómo lo actualizo a LVM 2? ¿Y qué pasa con lvmcreate_initrd?
Actualizando a LVM 2 es un poco más complicado con particiones raiz en LVM, pero no es imposible. Necesitas tener un kernel con soporte para el mapeador de dispositivos e instalar las utilidades de lvm2 (deberías hacer un backup de las utilidades de lvm 2, o buscar un disco de rescate con las utilidades, en caso de que las necesites antes de que termines de hacerlo). Después busca un script mkinitrd que tenga soporte para tu distribución y lvm 2.
Actualmente, esta es la lista de scripts mkinitrd que conozco con soporte de lvm2, ordenadas por distribución:
scripts mkinitrd con soporte lvm 2
El último fedora core 2mkinitrd maneja lvm2, pero depende de un binario de lvm compilado desde el último tarball de lvm 2.
Usuarios de Redhat 9 deberían poder usarlo sin más
Hay una versión no oficialhere
Hay una versión en el árbol fuente de lvm2 bajo el nombre scripts/lvm2_createinitrd/. Observa la documentación en ese directorio para más detalles.
4.1.10. ¿Cómo de resistente es LVM en cuanto a enumeraciones repentinas de reenumeraciones de discos duros físicos?
Está bien - LVM identifica PVs por UUID, no por nombre de dispositivo.
Cada disco (PV) está etiquetado con un UUID, que es identificador único en el sistema. 'vgscan' lo identifica después de que un nuevo disco es añadido y cambie la reenumeración. La mayoría de las distribuciones ejecutan vgsan en el arranque de lvm para poder arreglárselas después de añadir un nuevo dispositivo. Si estás agregándolo en caliente, deberás ejecutarlo a mano. Por otro lado, si tu VG está activado y está siendo usado, la reenumeración no afectará para nada. Es sólo en la activación cuando es necesaria la identificación, y el peor de los casos es cuando la activación falla sin que vgscan de un error de un PV perdido.
![]() | Si quitas una unidad que LVM está utilidando causará problemas en ese momento y en futuras activaciones del VG que lo esté usando. |
4.1.11. Estoy intentando llenar mi vg, y vgdisplay/vgs dice que tengo 1.87 MB libres, pero cuando hago un lvcreate vg -L1.87G dice "ampliaciones libres insuficientes". ¿Qué pasa?
El número de 1.87 GB está redondeado a 2 decimales, por lo que es probable que sea 1.8666 GB o algo así. Ésta es una salida entendible por el ser humano para darnos una idea general de cuan grandes es el VG. Si quieres especificar el tamaño exacto, deberías usar extensiones en vez de múltiplos de bytes.
En el caso de vgdisplay, usa el número de PE libres en vez de la capacidad entendible por el ser humano.
PE libres / Size 478 / 1.87 GB
^^^
Entonces, deberías ejecutar
# lvcreate vg -l478Fíjate que en vez de en mayúsculas 'L', usaremos la minúscula 'l' para indicarle a lvm que use extensiones en vez de bytes.
En el caso de vgs, necesitas indicarle una instrucción para que te diga las extensiones disponibles:
# vgs -o +vg_free_count,vg_extent_count
Ésto a vgs que añada las extensiones libres y el número total
de extensiones al final del listado de vgs. Usa el número de
extensiones libres de la misma manera que lo harías en
el caso de vgdisplay.
En LVM2 las instantáneas son de lectura/escritura por defecto, mientras que en LVM1, las instantáneas eran sólo de lectura. Mira Section 3.8 para más detalles.
La primera cosa que necesitas hacer es obtener una copia de LVM.
Descarga vía FTP un tarball de LVM.
Descarga el código fuente que está en desarrollo a través de CVS
Asegúrate de que tienes el código fuente del mapeador de dispositivos
![]() | El parche de LVM 1 para el kernel debe ser generado usando el código fuente de LVM 1. Más información respecto a esto puede ser encontrada en Section 6.2 |
Atento: el estado del código en el repositorio CVS fluctúa peligrosamente. Tendrán fallos. Posiblemente alguno que rompa el LVM o el kernel. Algunas veces no compilará. Considera el código con calidad-alfa. Podrías perder datos. Has sido avisado.
Para seguir el progreso de desarrollo de LVM, subscríbete a las listas de correo de LVM, linux-lvm y listas apropiadas. (ve a Section C.1).
Para compilar LVM desde las fuentes del CVS, tú necesitas tener varias utilidades GNU:
la version de cliente CVS 1.9 o superior
GCC 2.95.2
GNU make 3.79
autoconf, versión 2.13 o mejor
Para hacer la vida más fácil en el futuro actualizando el árbol del CVS crea el archivo $HOME/.cvsrc e inserta las siguientes líneas. Son configuraciones por defecto muy útiles para los 3 comandos más comunes. Hazlo ahora antes de seguir.
diff -u -b -B
checkout -P
update -d -P
Además, si estás conectado a una línea lenta (como una conexión telefónica), querrás añadir una linea que ponga cvs -z5 en ese archivo. Esto activa un nivel de compresión útil para todos los comandos de CVS.
Biblioteca del Mapeador de Dispositivos y utilidades
La biblioteca del mapeador de dispositivos es necesaria para compilar LVM 2.
La primera vez que descargas desde el cvs, debes autentificarte
# cvs -d :pserver:cvs@sources.redhat.com:/cvs/dm login cvs
La clave es `cvs'. El comando no responderá nada si ha ido bien un mensaje de error si ha fallado. Sólo es necesario una autenfificación inicial. Todos los siguientes comandos de CVS leerán la clave almacenada en el archivo $HOME/.cvspass para autentificarse.
Utiliza lo siguiente para descargar una copia del código
# cvs -d :pserver:cvs@sources.redhat.com:/cvs/dm checkout device-mapper
Esto creará un nuevo directorio device-mapper en tu directorio actual que contendrá el último código del mapeador de dispositivos actualizado al minuto.
LVM 2
La primera vez que descargas desde el cvs, debes autentificarte
# cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 login cvs
La clave es `cvs'. El comando no responderá nada si ha ido bien y un mensaje de error si ha fallado. Sólo es necesario una autenficación inicial. Todos los siguientes comandos de CVS leerán la clave almacenada en el archivo $HOME/.cvspass para autentificarse.
Utiliza lo siguiente para descargar una copia del código
# cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 checkout LVM2
Esto creará un nuevo directorio LVM 2 en tu directorio actual que contendrá el último código de LVM 2 actualizado al minuto.
LVM 1
La primera vez que descargas desde el cvs, debes autentificarte
# cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm login cvs
La clave es `cvs'. El comando no responderá nada si ha ido bien un mensaje de error si ha fallado. Sólo es necesario una autenfificación inicial. Todos los siguientes comandos de CVS leerán la clave almacenada en el archivo $HOME/.cvspass para autentificarse.
Utiliza lo siguiente para descargar una copia del código
# cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm checkout LVM
Esto creará un nuevo directorio LVM 1 en tu directorio actual que contendrá el último código de LVM 1 actualizado al minuto.
Los comandos de CVS funcionan desde cualquier sitio dentro del árbol del código fuente, y es recursivo. Por eso si sucede que quieres actualizar desde dentro del directorio `tools' funcionará bien, pero sólo actualizará el directorio de utilidades y sus subdirectorios. En los siguientes ejemplos de comandos se asume que estás arriba del todo en el árbol del código fuente.
Los cambios en el código son muy frecuentes en el respositorio CVS. Esos cambios se anuncian automaticamente en la lista lvm-commit.
Puedes actualizar tu copia del código fuente para que coincida con el repositorio principal con un comando de actualización. No es necesario descargarte una nueva copia. El uso de actualizaciones es más rápido y más simple, como si sólo te bajaras parches en vez de los archivos enteros y actualiza sólo aquellos archivos que han sido cambiados desde la última actualización. Automaticamente se realizará cualquier cambio desde el CVS con los que hayas hecho en local. Sólo entra en el directorio que quieras actualizar y luego escribe lo siguiente.
# cvs update
Si no especificas nada cuando te descargas el código fuente, actualizará el código con la última versión de la rama principal. Si especificas una rama, se actualizará a la última versión de esa rama. Si especificas una versión, no hará nada.
Discute tus ideas en las listas de desarrolladores antes de comenzar. Alguno puede estar trabajando en lo mismo que lo que tú tienes en mente o puede darte algunas ideas sobre cómo abordarlo.
Entonces, ¿has encontrado un fallo que quieres arreglar? ¿Quieres implementar una característica en la lista TODO? ¿Conseguiste una nueva característica para implementar? Hackear el código no podría ser más fácil. Sólo edita tu copia del código fuente. No necesitas copiar los archivos a .orig ni nada. el CVS hace copias del original.
Cuando tienes el código en un estado de trabajo y lo has probado lo mejor que puedes con el hardware que tienes, genera un parche sobre el actual código fuente en el repositorio CVS.
# cvs update
# cvs diff > patchfile
Envía por correo el parche a la lista linux-lvm o dm-devel (Section C.1) con una descripción sobre los cambios o lo que has implementado.
Si alguno ha estado trabajando con los mismos archivos que tú, puedes encontrar con que hay modificaciones en conflicto. Puedes comprobarlo cuando intentes actualizar el código fuente.
# cvs update
RCS file: LVM/tools/pvcreate.c,v
retrieving revision 1.5
retrieving revision 1.6
Merging differences between 1.5 and 1.6 into pvcreate.c
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in tools/pvcreate.c
C tools/pvcreate.c
¡Que no cunda el pánico! Tu archivo de trabajo, como ya existía antes de la actualización, se grabará bajo el nombre .#pvcreate.c.1.5. Puedes recuperarlo. El archivo llamado `pvcreate.c' ahora contiene ambas la antigua (i.e. la tuya) versión y la nueva version de las línes que entran en confilcto. Simplemente edita el archivo y resuelve cada conflicto borrando la versión que no quieras de las líneas involucradas.
<<<<<<< pvcreate.c
j++;
=======
j--;
>>>>>>> 1.6
No olvides borrar las líneas con los símbolos ``<'', ``='', y ``>''.
El mapeador de dispositivo está en la versión 2.6.9 o superior, por lo que necesitas asegurarte de que está activado como módulo o incluído en el kernel. Observa en /sys/class/misc/device-mapper o en /proc/devices y comprueba que hay una entrada para el mapeador de dispositivos para comprobar si está activado. Si no está, prueba con modprobe dm_mod, y comprueba otra vez. Para las versiones anteriores a la 2.6.9, tú o tu distribución debería parchear el kernel para poder soportarlo. Comprueba la página del mapeador de dispositivos para más información.
Para usar LVM 1 necesitas compilar el módulo del kernel (recomendado), o si prefieres recompilar el kernel con el código estaticamente compilado dentro de él.
Tu sistema Linux estará probablemente basado en uno de las distribuciones populares (ej., Red Hat, SuSE, Debian) en cuyo caso es posible que ya tengas el módulo de LVM 1. Comprueba la versión de las utilidades que tienes en tu sistema. Puedes hacer esto ejecutando cualquiera de los comandos de LVM con el modificador '-h'. Usa pvscan -h si no conoces ningún comando. Si la versión que aparece al principio de la ayuda es LVM 1.0.8, usa tu actual configuración y olvida el resto de esta sección.
Para poder parchear el kernel de linux para soportar LVM 1.0.8, debes hacer lo siguiente:
Descomprime LVM 1.0.8
# tar zxf lvm_1.0.8.tar.gz
Indica el directorio principal de esa versión.
# cd LVM/1.0.8
Ejecuta configure
# ./configure
Necesitarás indicarle la opción
--with-kernel_dir para configurarlo si el código fuente de no está en
/usr/src/linux.
(Ejecuta ./configure --help para ver todas las
opciones disponibles)
Entra en el directorio PATCHES
# cd PATCHES
Ejecuta 'make'
# make
Deberías tener ahora un parche llamado lvm-1.0.8-$KERNELVERSION.patchen el directorio de parches. Este es el parche del kernel referenciado en la última sección de el cómo.
Parchea el kernel
# cd /usr/src/linux ; patch -pX < /directory/lvm-1.0.8-$KERNELVERSION.patch
La serie 2.2 del kernel necesita ser parcheada antes de que empieces a compilar, comprueba en otro lugar sobre cómo parchear el kernel.
Parches:
parche rawio
El parche raw_io de Stephen Tweedie puede ser encontrado en http://www.kernel.org/pub/linux/kernel/people/sct/raw-io
parche lvm
El parche para LVM 1 debería ser compilado fuera de el subdirectorio PATCHES de la distribución de LVM. Puedes encontrar más información en Section 6.2.1, Compilando un parche para tu kernel.
Una vez que los parches han sido correctamente aplicados, necesitas asegurarte de que el módulo está compilado, de que LVM 1 está bajo la sección de dispositivos de bloque de la configuración del kernel, y deberías comprobar que la información de LVM en /proc está compilada también.
Compila los módulos del kernel como habitualmente.
Los kernel 2.4 vienen con LVM 1 incluído aunque deberías comprobar en la web de Sistina por actualizaciones, (eg. en el kernel v2.4.9 y anteriores deben tener el último parche de LVM 1 aplicado). Cuando configures tu kernel busca LVM 1 bajo el soporte de dispositivos-múltiples (RAID and LVM) . LVM 1 puede ser compilado dentro del kernel o como módulo. Compila tu kernel y módulos e instálalos como se hace habitualmente. Si eliges compilar LVM coom módulo se llamará lvm-mod.o
Si quieres usar instantáneas con ReiserFS, asegúrate de aplicar el parche linux-2.4.x-VFS-lock (hay copias de él en el directorio LVM/1.0.8/PATCHES).
Si tu kernel ha sido compilado con el sistema de archivos /proc (la mayoría) puedes comprobar que LVM está buscando el directorio /proc/lvm. Si no existe entonces tienes que cargar el módulo con el comando
# modprobe lvm-mod
Si /proc/lvm todavía no existe entonces comprueba la configuración del kernel minuciosamente.
Cuando LVM está activado verás las entradas en /proc/lvm para todos los volúmenes físicos, grupos de volúmenes y volúmenes lógicos. Además hay un "archivo" llamado /proc/lvm/global que contiene un resumen del estado de LVM y nos muestra qué versión de LVM estás usando.
Los scripts de arranque no vienen incluídos en la distribución de LVM, sin embargo son muy sencillos de hacer por uno mismo.
El arranque de LVM requiere sólo los siguientes dos comandos:
# vgscan
# vgchange -ay
Y para pararlo sólo uno:
# vgchange -an
Sigue las instrucciones abajo dependiendo de la distribución de Linux que uses.
Es necesario editar el archivo /etc/rc.d/rc.boot. Busca la línea que dice "Mounting local filesystems" e inserta los comandos vgscan y vgchange justo antes.
También necesitaras ediar el archivo /etc/rc.d/init.d/halt para desactivar los grupos de volúmenes al apagar. Inserta el comando
vgchange -an
cerca del final del archivo justo antes de que los sistemas de archivos
sean desmontados o montados como sólo-lectura, antes del comentario que
dice
"Now halt or reboot".
Si descargas el paquete de utilidades de lvm para Debian, un script de arranque debería ser instalado automaticamente.
Si estás instalando LVM desde el código, necesitarás crear tu propio script de arranque:
Crea un script de arranque en /etc/init.d/lvm que contenga lo siguiente:
#!/bin/sh
case "$1" in
start)
/sbin/vgscan
/sbin/vgchange -ay
;;
stop)
/sbin/vgchange -an
;;
restart|force-reload)
;;
esac
exit 0
Ejecuta los comandos
# chmod 0755 /etc/init.d/lvm
# update-rc.d lvm start 26 S . stop 82 1 .
Ojo con los puntos al final del comando.
No son necesarias modificaciones en los script de inicio en las actuales versiones de Mandrake.
Para Redhat 7.0 y superiores, deberías necesitar modificar cualquier script de inicio que active LVM en tiempo de arranque si LVM está compilado dentro del kernel. Si LVM está compilado como un módulo, debería ser necesario modificar /etc/rc.d/rc.sysinit para cargar el módulo de LVM añadiendo "modprobe lvm-mod" antes de la sección que pone:
# LVM initialization, take 2 (it could be on top of RAID)
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action $"Setting up Logical Volume Management:" /sbin/vgscan &&
/sbin/vgchange -a y
fi
![]() | Este fragmento de script de inicio es de Red Hat 7.3 - para otras versiones de Redhat podría ser ligeramente distinto. |
Para versiones de Redhat anteriores a la 7.0, es necesrio editar el archivo /etc/rc.d/rc.sysinit. Busca la línea que dice "Mount all other filesystems" e inserta los comandos vgscan y vgchange justo antes. Deberías asegurarte de que el sistema de archivos raiz está montado de lectura/escritura antes de que ejecutes los comandos de LVM.
Además puede que necesites editar el archivo /etc/rc.d/init.d/halt para desactivar el grupo de volúmenes al apagar. Inserta el comando
vgchange -an
cerca del final del archivo justo después de que los sistemas de archivos
sean montados como sólo lectura, antes del comentario que dice "Now halt or
reboot".
Slackware 8.1 no necesita actualizar ningún script de inicio para tener funcionando LVM.
Para anteriores versiones a Slackware 8.1, deberías aplicar el siguiente parche al archivo /etc/rc.d/rc.S
cd /etc/rc.d
cp -a rc.S rc.S.old
patch -p0 < rc.S.diff
(la parte de cp es para hacer una copia).
----- snip snip file: rc.S.diff---------------
--- rc.S.or Tue Jul 17 18:11:20 2001
+++ rc.S Tue Jul 17 17:57:36 2001
@@ -4,6 +4,7 @@
#
# Mostly written by: Patrick J. Volkerding, <volkerdi@slackware.com>
#
+# Added LVM support <tgs@iafrica.com>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
@@ -28,19 +29,21 @@
READWRITE=yes
fi
+
# Check the integrity of all filesystems
if [ ! READWRITE = yes ]; then
- /sbin/fsck -A -a
+ /sbin/fsck -a /
+ # Check only the root fs first, but no others
# If there was a failure, drop into single-user mode.
if [ ? -gt 1 ] ; then
echo
echo
- echo "*******************************************************"
- echo "*** An error occurred during the file system check. ***"
- echo "*** You will now be given a chance to log into the ***"
- echo "*** system in single-user mode to fix the problem. ***"
- echo "*** Running 'e2fsck -v -y <partition>' might help. ***"
- echo "*******************************************************"
+ echo "************************************************************"
+ echo "*** An error occurred during the root file system check. ***"
+ echo "*** You will now be given a chance to log into the ***"
+ echo "*** system in single-user mode to fix the problem. ***"
+ echo "*** Running 'e2fsck -v -y <partition>' might help. ***"
+ echo "************************************************************"
echo
echo "Once you exit the single-user shell, the system will reboot."
echo
@@ -82,6 +85,44 @@
echo -n "get into your machine and start looking for the problem. "
read junk;
fi
+ # okay / fs is clean, and mounted as rw
+ # This was an addition, limits vgscan to /proc thus
+ # speeding up the scan immensely.
+ /sbin/mount /proc
+
+ # Initialize Logical Volume Manager
+ /sbin/vgscan
+ /sbin/vgchange -ay
+
+ /sbin/fsck -A -a -R
+ #Check all the other filesystem, including the LVM's, excluding /
+
+ # If there was a failure, drop into single-user mode.
+ if [ ? -gt 1 ] ; then
+ echo
+ echo
+ echo "*******************************************************"
+ echo "*** An error occurred during the file system check. ***"
+ echo "*** You will now be given a chance to log into the ***"
+ echo "*** system in single-user mode to fix the problem. ***"
+ echo "*** Running 'e2fsck -v -y <partition>' might help. ***"
+ echo "*** The root filesystem is ok and mounted readwrite ***"
+ echo "*******************************************************"
+ echo
+ echo "Once you exit the single-user shell, the system will reboot."
+ echo
+
+ PS1="(Repair filesystem) #"; export PS1
+ sulogin
+
+ echo "Unmounting file systems."
+ umount -a -r
+ mount -n -o remount,ro /
+ echo "Rebooting system."
+ sleep 2
+ reboot
+ fi
+
else
echo "Testing filesystem status: read-write filesystem"
if cat /etc/fstab | grep ' / ' | grep umsdos 1> /dev/null 2> /dev/null ;
then
@@ -111,14 +152,16 @@
echo -n "Press ENTER to continue. "
read junk;
fi
+
fi
+
# remove /etc/mtab* so that mount will create it with a root entry
/bin/rm -f /etc/mtab* /etc/nologin /etc/shutdownpid
# mount file systems in fstab (and create an entry for /)
# but not NFS or SMB because TCP/IP is not yet configured
-/sbin/mount -a -v -t nonfs,nosmbfs
+/sbin/mount -a -v -t nonfs,nosmbfs,proc
# Clean up temporary files on the /var volume:
/bin/rm -f /var/run/utmp /var/run/*.pid /var/log/setup/tmp/*
--snip snip snip end of file---------------
Cambia al directorio de LVM y ejecuta ./configure seguido de make. Ésto compilará todas las bibliotecas y programas.
Si es necesario puedes cambiar algunas opciones con el script de configuración. Ejecuta ./configure --help para determinar qué opciones están disponibles. La mayoría de las veces ésto no será necesario.
No debería habr ningún error en el proceso de compilado. Si lo hubiese, ve a Informando de errores y fallos para ver cómo informar de ello.
Eres bienvenido de arreglarlos y enviarnos los parches. Los parches son generalmente enviados a la lista linux-lvm.
Después de que el código de LVM se haya compilado adecuadamente, simplemente ejecuta make installpara instalar las bibliotecas y utilidades de LVM en tu sistema.
Para borrar las librerías y utilidades que has instalado, ejecuta make remove. Debes tener el código fuente que usaste para instalar LVM para poder hacerlo.
La transición desde la versión anterior de LVM a LVM 1.0.8 debería realizarse sin dificultad. Hemos encontrado un método para leer en la versión del metadata de los PV 1 (LVM 0.9.1 Beta7 y anteriores) tan bien como en el metadata de los PV versión 2 (LVM 0.9.1 Beta8 y LVM 1.0).
Atención:Los nuevos PVs inicializados con LVM 1.0.8 son creados con la estructura en-disco de la versión 1 de PV. Ésto significa que LVM 0.9.1 Beta8 y LVM 1.0 no puede leer o usar PVs creados con 1.0.8.
Hay unos pasos simples para configurarlo, pero es recomendado que hagas una copia de seguridad antes de intentarlo. Estás avisado.
Compilar el LVM del kernel y módulos
Sigue los pasos indicados en Chapter 5 - Section 6.2 para las instrucciones sobre cómo obtener y compilar los componentes de LVM del kernel.
Compilar las utilidades de usuario de LVM
Sigue los pasos en Chapter 9 para compilar e instalar las utilidades de usuario de LVM.
Configurar los scripts de inicio
Asegúrate de tener la configuración de scripts de inicio necesaria Chapter 7.
Arrancar con el nuevo kernel
Asegúrate de que el cargador de arranque está configurado para cargar el nuevo kernel con LVM y, si estás usuando módulos, poner un insmod lvm-mod dentro del script de arranque O añade /etc/modules.conf (antiguamente /etc/conf.modules) añadiendo
alias block-major-58 lvm-mod
alias char-major-109 lvm-mod
para permitir a modprobe cargar el módulo LVM (no olvides activar
kmod).
Reinicia y disfruta.
Es relativamente fácil si sigues los pasos cuidadosamente. Es recomendado tener una buena copia de seguridad y un disco de rescate apropiado a mano por si acaso.
La manera "normal" de ejecutar LVM en el sistema de archivos raiz es tener una partición simple no-LVM llamada /boot que contiene los kernel y discos de inicio RAM necesarios para arrancar el sistema. El sistema que yo actualicé era así:
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/rootvg/root 253871 93384 147380 39% /
/dev/hda1 17534 12944 3685 78% /boot
/dev/rootvg/home 4128448 4568 3914168 0% /home
/dev/rootvg/usr 1032088 332716 646944 34% /usr
/dev/rootvg/var 253871 31760 209004 13% /var
/boot
contiene el antiguo kernel y un disco RAM de inicio así como los archivos
de arranque de LILO y lo siguiente en
/etc/lilo.conf
# ls /boot
System.map lost+found vmlinux-2.2.16lvm
map module-info boot.0300
boot.b os2_d.b chain.b
initrd.gz
# tail /etc/lilo.conf
image=/boot/vmlinux-2.2.16lvm
label=lvm08
read-only
root=/dev/rootvg/root
initrd=/boot/initrd.gz
append="ramdisk_size=8192"
Compilar el kernel LVM y módulos
Sigue los pasos especificados en Chapter 5 - Section 6.2 para instrucciones sobre obtener y compilar los componentes necesarios de LVM en el kernel.
Compila las utilidades de usuario de LVM
Sigue los pasos en Section 6.2para compilar e instalar las utilidades de usuario de LVM.
Instala las nuevas utilidades. Una vez que has hecho ésto no podrás hacer ninguna manipulación de LVM ya que no son compatibles con el kernel que estás actualmente ejecutando.
Renombra el existente initrd.gz
Esto es para que no sea sobreescrito por el nuevo
# mv /boot/initrd.gz /boot/initrd08.gz
Edit /etc/lilo.conf
Crea una entrada para el arranque con el archivo que acabas de renombrar. Necesitarás reiniciar usando éste si algo va mal en el siguiente reinicio. La entrada cambiada se verá algo así como esto:
image=/boot/vmlinux-2.2.16lvm
label=lvm08
read-only
root=/dev/rootvg/root
initrd=/boot/initrd08.gz
append="ramdisk_size=8192"
Ejecuta lvmcreate_initrd para crear un nuevo disco RAM de inicio
# lvmcreate_initrd 2.4.9
No olvides poner la nueva versión de kernel ahí para
que pueda coger los módulos correctos.
Añade una nueva entrada dentro de /etc/lilo.conf
Esta entrada es para arrancar el nuevo kernel con su nuevo initrd.
image=/boot/vmlinux-2.4.9lvm
label=lvm10
read-only
root=/dev/rootvg/root
initrd=/boot/initrd.gz
append="ramdisk_size=8192"
Re-ejecuta lilo
Esto instalará el nuevo bloque de arranque.
# /sbin/lilo
Reinicia
Cuando obtienes el prompt del LILO selecciona la nueva entrada (en el ejemplo lvm10) y tu sistema debería arrancar dentro de Linux usando la nueva versión de LVM.
Si el nuevo kernel no arranca, entonces simplemente arranca el antiguo e intenta arreglar el problema. Puede ser que el nuevo kernel no tiene todos los controladores de dispositivos compilados dentro de él, o que no están disponibles en el initrd. Recuerda que todos los controladores de dispositivos (aparte de LVM) necesarios para acceder al dispositivo raiz deberían ser compilados dentro del kernel y no como módulos.
Si necesitas hacer alguna manipulación LVM cuando reiniciaste a la versión anterior, entonces simplemente recompila las antiguas utilidades e instálalas.
# make install
Si haces esto, no olvides instalar las nuevas utilidades cuando
reinicies con la nueva versión de LVM.
Las siguientes secciones resumen algunas tareas administrativas comunes para el sistema LVM. Ésto no es un sustituto para leer las páginas del manual.
Antes de que puedas usar un disco o una partición como un volúmen físico tienes que inicializarlo:
Para discos enteros:
Ejecuta pvcreate sobre el disco:
# pvcreate /dev/hdb
Esto crea un descriptor de grupo de volumen al comienzo del disco.
Si da un error de que LVM no puede inicializar un disco con una tabla de particiones, primero asegúrate de que el disco que estás utilizando es el correcto. Si estás seguro de esto, ejecuta lo siguiente:
![]() | PELIGROSO |
|---|---|
Los siguientes comandos destruirán la tabla de partición en el disco que se indique. Asegúrate de que es el disco correcto. |
# dd if=/dev/zero of=/dev/diskname bs=1k count=1 # blockdev --rereadpt /dev/diskname
Cuando usemos LVM 1 en PCs con particiones DOS, indica el tipo de partición a 0x8e usando fdisk o algún otro programa similar. Este paso es innecesario en sistemas PPC o cuando usemos LVM 2.
Ejecuta pvcreate sobre la partición:
# pvcreate /dev/hdb1
Esto creará un descriptor de grupo de volumen al principio de
la partición /dev/hdb1.
Usa el programa 'vgcreate':
# vgcreate my_volume_group /dev/hda1 /dev/hdb1
NOTA: Si estás utilizando LVM 1 con
devfs es esencial que uses el nombre completo de devfs del
dispositivo en vez del nombre del enlace simbólico en /dev. Debería ser así:
# vgcreate my_volume_group /dev/ide/host0/bus0/target0/lun0/part1 \
/dev/ide/host0/bus0/target1/lun0/part1
LVM 2 no tiene esta restricción.
También puedes especificar el tamaño de extensión con este comando si el tamaño por defecto de 32MB no te es aceptable con el modificador '-s'. Además puedes poner algunos límites en el número de volúmenes físicos o lógicos que puede tener.
Después de arrancar el sistema o ejecutando vgchange -an, no podrás acceder a tus VGs y LVs. Para reactivar el grupo de volumen, ejecuta:
# vgchange -a y my_volume_group
Asegúrate de que no hay volúmenes lógicos en el grupo de volumen, comprueba al final de la sección cómo hacer ésto.
Desactiva el grupo de volumen:
# vgchange -a n my_volume_group
Ahora borra el grupo de volumen:
# vgremove my_volume_group
Usa 'vgextend' para añadir un volumen físico inicializado a un grupo de volumen existente.
# vgextend my_volume_group /dev/hdc1
^^^^^^^^^ nuevo volumen físico
Asegúrate de que el volumen físico no está siendo usado por ningún volumen lógico usando el comando 'pvdisplay':
# pvdisplay /dev/hda1
--- Physical volume ---
PV Name /dev/hda1
VG Name myvg
PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB]
PV# 1
PV Status available
Allocatable yes (but full)
Cur LV 1
PE Size (KByte) 4096
Total PE 499
Free PE 0
Allocated PE 499
PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
Si el volumen físico está todavía en uso tendrás que migrar los datos a otro volumen físico usando pvmove.
Entonces usa 'vgreduce' para borrar el volumen físico:
# vgreduce my_volume_group /dev/hda1
Para crear una LV lineal de 1500MB llamada 'testlv' y su dispositivo de bloque especial '/dev/testvg/testlv':
# lvcreate -L1500 -ntestlv testvg
Para crar un volumen lógico de tamaño 100 LE con 2 rayas y un tamaño de raya de 4 KB.
# lvcreate -i2 -I4 -l100 -nanothertestlv testvg
Si quieres crear un LV que use el VG entero, usa vgdisplay para buscar el tamaño "Total de PE", entonces úsalo cuando ejecutes lvcreate.
# vgdisplay testvg | grep "Total PE"
Total PE 10230
# lvcreate -l 10230 testvg -n mylv
Esto creará un LV llamado
mylv llenando el VG
testvg.
Si quieres que el volumen lógico esté alocado desde un volumen físico específico en el grupo de volumen, especifica los PV o PVs al final de el comando lvcreate.
# lvcreate -L 1500 -ntestlv testvg /dev/sdg
Un volumen lógico debe ser cerrado antes de que pueda ser borrado:
# umount /dev/myvg/homevol
# lvremove /dev/myvg/homevol
lvremove -- do you really want to remove "/dev/myvg/homevol"? [y/n]: y
lvremove -- doing automatic backup of volume group "myvg"
lvremove -- logical volume "/dev/myvg/homevol" successfully removed
Para extender un volumen lógico simplemente dile al comando lvextend cuánto quieres incrementar el tamaño. Puedes especificar cómo crecer el volumen, o cómo expandirlo
# lvextend -L12G /dev/myvg/homevol
lvextend -- extending logical volume "/dev/myvg/homevol" to 12 GB
lvextend -- doing automatic backup of volume group "myvg"
lvextend -- logical volume "/dev/myvg/homevol" successfully extended
extenderá /dev/myvg/homevol a 12 Gigabytes.
# lvextend -L+1G /dev/myvg/homevol
lvextend -- extending logical volume "/dev/myvg/homevol" to 13 GB
lvextend -- doing automatic backup of volume group "myvg"
lvextend -- logical volume "/dev/myvg/homevol" successfully extended
añadirá otro gigabyte a /dev/myvg/homevol.
Después de que hayas extendido el volumen lógico es necesario incrementar el tamaño del sistema de archivos para que coincida. Cómo hacerlo dependerá del tipo de sistema de archivos que estés usando.
Por defecto, la mayoría de las utilidades de redimensionado de sistemas de archivos incrementan el tamaño del sistema de archivos para ser el tamaño del volumen lógico subyacente por lo que no necesitas preocuparte por especificarle el mismo tamaño para cada uno de los dos comandos.
ext2/ext3
A no ser que hayas parcheado tu kernel con el parche de ext2online es necesario desmontar el sistema de archivos antes de redimensionarlo. (Parece que el parche de redimensionado online es todavía peligroso, por lo que úsalo bajo tu propio riesgo)
# umount /dev/myvg/homevol/dev/myvg/homevol
# resize2fs /dev/myvg/homevol
# mount /dev/myvg/homevol /home
Si no tienes e2fsprogs 1.19 o posterior, puedes descargar el comando ext2resize de ext2resize.sourceforge.net y usarlo:
# umount /dev/myvg/homevol/dev/myvg/homevol
# ext2resize /dev/myvg/homevol
# mount /dev/myvg/homevol /home
Para ext2 hay una manera fácil. LVM 1 viene con una utilidad llamada e2fsadm que hace el lvextend y resize2fs por ti (además hace el recortado del sistema de archivo, velo en la sección siguiente).
![]() | LVM 2 Caveat |
|---|---|
Actualmente no hay un equivalente a e2fsadm para LVM 2 y el e2fsadm que viene con LVM 1 no funciona con LVM 2. |
# e2fsadm -L+1G /dev/myvg/homevol
es equivalente a los dos comandos:
# lvextend -L+1G /dev/myvg/homevol
# resize2fs /dev/myvg/homevol
![]() | Note |
|---|---|
Necesitas desmontar el sistema de archivos antes de ejecutar e2fsadm. |
reiserfs
El sistema de archivos Reiserfs puede ser redimensionado cuando está montado o desmontado, como tú prefieras:
Conectado:
# resize_reiserfs -f /dev/myvg/homevol
Desconectado:
# umount /dev/myvg/homevol
# resize_reiserfs /dev/myvg/homevol
# mount -treiserfs /dev/myvg/homevol /home
xfs
El sistema de archivos XFS debe ser montado para ser redimensionado y el punto de montaje es especificado en vez del nombre del dispositivo.
# xfs_growfs /home
jfs
Como el XFS, el sistema de archivos JFS debe ser montado para ser redimensionado y el punto de montaje es especificado en vez de el nombre del dispositivo. Necesitas por lo menos la versión 1.0.21 de jfs-utils para hacerlo.
# mount -o remount,resize /home
![]() | Fallos conocidos del Kernel |
|---|---|
Algunas versiones del kernel tienen problemas con esta sintaxis (se sabe que 2.6.0 tiene este problema). En este caso tienes que especificar exactamente el nuevo tamaño del sistema de archivos en bloques. Es extremadamente una equivocación que tú debas saber el tamaño de bloque de tu sistema de archivo y calcular el nuevo tamaño basado en esas unidades. Ejemplo: Si tuvieses que redimensionar un sistema de archivos JFS a 4 gigabytes que tienen bloques de 4k, deberías poner:
# mount -o remount,resize=1048576 /home
|
El tamaño de un volumen logico puede ser reducido igual que incrementado. De todas formas, es very importante acordarse de reducir el tamaño del sistema de archivos o todo aquello que resida en el volumen antes de encoger el volumen, de lo contrario puedes perder datos.
ext2
Si estás usando LVM 1 con ext2 como sistema de archivos entonces puedes usar el comando e2fsadm mencionado antes para redimensionar tanto el volumen como el sistema de archivos del siguiente modo:
# umount /home
# e2fsadm -L-1G /dev/myvg/homevol
# mount /home
![]() | LVM 2 Caveat |
|---|---|
Actualmente no hay un equivalente para LVM 2 y el e2fsadm que viene con LVM 1 no funciona con LVM 2. |
Si prefieres hacer esto manualmente debes saber el nuevo tamaño del volumen en bloques y usar los siguientes comandos:
# umount /home
# resize2fs /dev/myvg/homevol 524288
# lvreduce -L-1G /dev/myvg/homevol
# mount /home
reiserfs
Reiserfs parece que prefiere ser desmontado cuando lo encogemos
# umount /home
# resize_reiserfs -s-1G /dev/myvg/homevol
# lvreduce -L-1G /dev/myvg/homevol
# mount -treiserfs /dev/myvg/homevol /home
xfs
No hay manera de enconger los sistemas de archivos XFS.
jfs
No hay manera de enconger los sistemas de archivos JFS.
Para dejar un disco fuera de servicio debemos primero dejar todas sus extensiones físicas desplazadas a uno o más discos en el grupo de volumen. Debe haber suficientes extensiones físicas en los restantes PVs para mantener las extensiones que serán copiadas del disco antiguo. Para más detalles ve a Section 13.5.
LVM permite crear PVs (volúmenes físicos) fuera de cualquier dispositivo de bloques, por ejemplo, los siguientes son comandos válidos y funcionarán perfectamente en un entorno LVM:
# pvcreate /dev/sda1
# pvcreate /dev/sdf
# pvcreate /dev/hda8
# pvcreate /dev/hda6
# pvcreate /dev/md1
En un sistema de producción "normal" es recomendado que sólo exista un PV en un disco real, por las siguientes razones:
Comodidad administrativa
Es más fácil conservar el hardware en un sistema si cada disco realmente aparenta uno. Esto es especialmente verdad particularmente si un disco falla.
Para evitar problemas de ejecución en sistemas rayados (striped)
LVM no puede decir que dos PVs están en el mismo disco físico, por lo que si creas un LV rayado entonces las rayas deberían estar diferentes particiones del mismo disco resultando en un detrimento del rendimiento en vez de incrementarlo.
Migración de sistemas existentes a LVM
En un sistema con pocos discos debería ser necesario mover todos los datos de las particiones para hacer la conversión (ver Section 13.8)
Partiendo un disco grande en Grupos de Volúmenes
Si tienes un disco muy grande y quieres tener más de un grupo de volumen por propósitos administrativos, entonces es necesario particionar la unidad en más de un área.
Si tienes un disco con más de una partición y esas particiones están en el mismo grupo de volumen, ten cuidado al especificar qué particiones tienen que ser incluídas en el volumen lógico cuando crees volúmenes rayados.
El método recomendado para particionar un disco es crear una partición única que cubra el disco entero. Ésto evita cualquier accidente con los nodos del dispositivo y previene los avisos del kernel sobre particiones desconocidas en tiempo de arranque.
Debes tener cuidado con systemas SPARC donde los discos tienen etiquetas de disco Sun.
El diseño normal para una etiqueta de disco Sun es que la primera partición empieza en el bloque cero del disco, de esta manera la primera partición también cubre el área que contiene la etiqueta de disco. Esto trabaja bien en sistemas de archivo ext2 (y es esencial para arrancar usando SILO) pero esas particiones no deberían ser usadas por LVM. Esto es porque LVM empieza a escribir al comienzo del dispositivo y sobreescribirá la etiqueta de disco.
Si quieres usar un disco con etiqueta de disco Sun con LVM, asegúrate que la partición que estás usando comience en el cilindro 1 o mayor.
Esta sección detalla varias "recetas" para configurar lvm. La esperanza es que el lector adapte estas recetas a su propio sistema y necesidades.
Para esta receta, la configuración tiene tres discos SCSI que serán puestos en un volumen lógico usando LVM. Los discos están en /dev/sda, /dev/sdb, y /dev/sdc.
Antes de que puedas usar un disco en un grupo de volumen debes prepararlo:
![]() | Atención! |
|---|---|
Lo siguiente destruirá cualquier dato en /dev/sda, /dev/sdb, y /dev/sdc. |
Ejecua pvcreate en los discos
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
Esto crea un área de descriptor de grupo de volumen (VGDA) al
principio de los discos.
Crear un grupo de volumen
# vgcreate my_volume_group /dev/sda /dev/sdb /dev/sdc/
Ejecuta vgdisplay para comprobar el grupo de volumen
# vgdisplay
# vgdisplay
--- Volume Group ---
VG Name my_volume_group
VG Access read/write
VG Status available/resizable
VG # 1
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 3
Act PV 3
VG Size 1.45 GB
PE Size 4 MB
Total PE 372
Alloc PE / Size 0 / 0
Free PE / Size 372/ 1.45 GB
VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y
Las cosas más importantes a comprobar son que los tres
primeros puntos sean correctos y que el punto del Tamaño de VG
sea el tamaño apropiado para la suma del espacio en todos los
discos.
Si el grupo de volumen parece correcto, es hora de crear un grupo de volumen en lo alto del grupo de volumen.
Puedes el volumen lógico con el tamaño que quieras. (Es similar a una partición en una configuración no LVM.) Para este ejemplo crearemos un sólo volumen lógico de tamaño 1 GB en el grupo de volumen. No usaremos sistema rayado (striping) porque actualmente no es posible añadir un disco a un conjunto rayado después de que el volumen lógico es creado.
# lvcreate -L1G -nmy_logical_volume my_volume_group
lvcreate -- doing automatic backup of "my_volume_group"
lvcreate -- logical volume "/dev/my_volume_group/my_logical_volume" successfully created
Crear un sistema de archivos ext2 en el volumen lógico
# mke2fs /dev/my_volume_group/my_logical_volume
mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
9 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
Monta el volumen lógico y prueba que todo parezca correcto
# mount /dev/my_volume_group/my_logical_volume /mnt
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 1311552 628824 616104 51% /
/dev/my_volume_group/my_logical_volume
1040132 20 987276 0% /mnt
Si todo funcionó correctamente, deberías tener un volumen lógico con un sistema de archivos ext2 montado en /mnt.
Para esta receta, tendremos tres discos SCSI que pondremos en un volumen lógico usando LVM. Los discos son /dev/sda, /dev/sdb, y /dev/sdc.
![]() | Nota |
|---|---|
Actualmente no es posible añadir un disco a un volumen lógico en un sistema rayado en LVM 1. Usa LVM 2 con el formato de metadato lvm 2 si quieres ser capaz de poder hacerlo. |
Antes de que puedas usar un disco en un grupo de volumen debes prepararlo:
![]() | Atención! |
|---|---|
Lo siguiente destruirá cualquier dato en /dev/sda, /dev/sdb, y /dev/sdc |
Ejecuta pvcreate en los discos:
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
Esto crea un área de descriptor de grupo de volumen (VGDA) al comienzo
de los discos.
Crear un grupo de volumen
# vgcreate my_volume_group /dev/sda /dev/sdb /dev/sdc
Ejecuta vgdisplay para comprobar el grupo de volumen
# vgdisplay
--- Volume Group ---
VG Name my_volume_group
VG Access read/write
VG Status available/resizable
VG # 1
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 3
Act PV 3
VG Size 1.45 GB
PE Size 4 MB
Total PE 372
Alloc PE / Size 0 / 0
Free PE / Size 372/ 1.45 GB
VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y
Las cosas más importantes a comprobar son que los tres
primeros puntos sean correctos y que el punto del Tamaño de VG
sea el tamaño apropiado para la suma del espacio en todos los
discos.
Si el grupo de volumen parece correcto, es hora de crear un volumen lógico al principio del grupo de volumen.
Puedes hacer el volumen lógico del tamaño que tú quieras (hasta el tamaño del VG que has creado; es similar a una partición en una configuración no LVM). Para este ejemplo crearemos sólo un volumen lógico de un tamaño de 1GB en el grupo de volumen. El volumen lógico será un grupo rayado utilizando el tamaño de raya de 4k. Esto incrementará el rendimiento del volumen lógico.
# lvcreate -i3 -I4 -L1G -nmy_logical_volume my_volume_group
lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE
lvcreate -- doing automatic backup of "my_volume_group"
lvcreate -- logical volume "/dev/my_volume_group/my_logical_volume" successfully created
![]() | Nota |
|---|---|
Si creas el volumen lógico con '-i2' estarás usando sólo dos de los discos en el grupo de volumen. Esto es útil si quieres crear dos volúmenes lógicos en el mismo volumen físico, pero no tocaremos este tema en |