Cuando instalamos nuestro sistema operativo GNU/Linux generalmente creamos las particiones con un tamaño aproximado, pero ¿qué hacemos cuando una de éstas particiones se queda sin espacio libre? Suele ocurrir que el espacio asignado a una partición se termina cuando en otras particiones tenemos espacio libre desperdiciándose. Podríamos solucionar éste problema creando una nueva partición en otro disco y crear un enlace simbólico hacia ella pero a la larga ésto se convierte en un sistema complicado para administrar, sería mucho más simple si se pudiera extender una partición aprovechando el espacio de otra o inclusive extender una partición aprovechando el espacio libre de un nuevo disco conectado al sistema.
Es aquí donde LVM se convierte en un sistema de administración de almacenamiento útil y necesario.
LVM es el acrónimo de “Logical Volume Management” que en español significa “Administración de Volúmenes Lógicos” para entender éste concepto es necesario definir algunos términos básicos y luego de ésto podremos ya aventurarnos a hacer uso de ésta tecnología en nuestros sistemas. I.Teoría PreviaVolume Group (VG) “Grupo de Volúmenes” Es el punto de abstracción más alto en LVM, es como un disco duro gigante que suma el espacio de los discos duros existentes en el sistema. Contiene una colección de volúmenes físicos y lógicos formando en una sola unidad administrativa.
Physical Volume (PV) “Volumen Físico” Generalmente es un disco duro o algo que se le asemeje, como un arreglo RAID por ejemplo.
Logical Volume (LV) “Volumen Lógico” Es equivalente a lo que conocemos comúnmente como una partición. Puede contener a un sistema de archivos.
Physical Extent (PE) “Extensión Física” Cada volúmen físico esta divido en pequeños pedazos de datos llamados physical extents. Cada physical extent es del mismo tamaño que una logical extent.
Logical Extent (LE) “Extensión Lógica” Cada volúmen físico esta divido en pequeños pedazos de datos llamados logical extents.
Ahora veamos todos éstos conceptos unidos:
Supongamos que tenemos 2 particiones /dev/hda1 y /dev/hda2 de diferentes tamaños, creamos un Grupo de Volúmenes llamado vg1 e introducimos en él las 2 particiones, ahora éstas particiones se convierten en los Volúmenes Físicos pv1 y pv2. Si el Grupo de Volúmenes vg1 tiene una Extensión Física de 4Mb entonces los Volúmenes Físicos estarán dividos en pedazos 4Mb de datos. Ahora ya estamos listos para crear nuestros Volúmenes Lógicos. Supongamos que el pv1 tiene 50 Extensiones Físicas y el pv2 tiene 80 Extensiones Físicas, entonces podremos crear Volúmenes Lógicos de cualquier tamaño entre 1 y 130 extensiones (50+80=130). Cuando se crea un Volumen Lógico se genera un mapeo entre las Extensiones Lógicas y las Extensiones Físicas, por ejemplo si la Extensión Lógica 1 está mapeada a la Extensión Física 20, entonces los datos escritos en la Extensión Lógica 1 serán realmente escritos en la Extensión Física 20. Cada Volumen Lógico puede contener un determinado sistema de archivos y éstos a su vez albergar a un punto de montaje como /home, /usr, /var y sus archivos y directorio.
Grafiquemos el ejemplo para aclarar las cosas:
Conceptos extraídos del capítulo 3 del artículo "LVM HOWTO" ubicado en http://tldp.org/ Observemos que no necesariamente las Extensiones Lógicas de un Volumen Lógico pertenecen a un mismo Volumen Físico.
Otro gráfico que nos puede aclarar las cosas mostrando las capas de un sistema de almacenamiento antes de LVM y después de LVM: Antes de LVM:  Después de LVM:
II.Instalación El proceso será realizado en la distribución Debian Etch, así que será similar en cualquier derivada de Debian como Ubuntu, Kubuntu, Xubuntu.
Para los kernel Debian y para la mayoría de distribuciones el soporte para LVM ya viene instalado así que procedemos a instalar el paquete lvm en su versión 2 que contiene las herramientas necesarias para trabajar con LVM:
#apt-get install lvm2
III.Configuración Antes, cabe resaltar que la partición que contenga a /boot no debe estar dentro de algún VG, porque los gestores de arranque (LILO y GRUB) suelen soportar LVM. Como lo que vamos a hacer es una live migration!, tenemos que tomar nuestras precauciones. Tenemos 2 alternativas:
1° Hacer un backup de casi todo nuestro sistema, redimensionar la raíz , luego en el espacio libre crear nuestros volúmenes lógicos, copiar los datos del backup a los volúmenes lógicos, montarlos y finalmente actualizar nuestro archivo /etc/fstab. 2° Si tenemos espacio para crear nuestros volúmenes lógicos crear una partición en el espacio vacío y hacerlo allí o conectar un nuevo disco duro, crear nuestros volúmenes lógicos y hacer el mismo proceso que la anterior alternativa. Me centraré en el siguiente caso por comodidad: Tengo una PC con el Sistema Operativo GNU/Linux con 2 particiones, la raíz y la swap, mis disco es de 40G y tengo 30G libres y quiero migrar /home y /usr a LVM, entonces crearé mis volúmenes lógicos en esos 30G disponibles y migraré las particiones /home y /usr a LVM, en el caso que no tenga espacio y haga backup para liberar espacio el proceso es muy parecido. Manos a la obra! 1.Mostremos la información de nuestro disco antes de cualquier cambio: debian:~# fdisk -l
Disk /dev/hda: 40.0 GB, 40016019456 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System /dev/hda1 * 1 4741 38082051 83 Linux /dev/hda2 4742 4865 996030 82 Linux swap / Solaris 2.Ahora veamos cuánto espacio libre tenemos: debian:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda1 36G 4.5G 30G 14% / tmpfs 126M 0 126M 0% /lib/init/rw udev 10M 52K 10M 1% /dev tmpfs 126M 0 126M 0% /dev/shm
Observamos que tenemos 30G libres, antes tenemos que redimensionar la raíz (/) y crear una nueva partición, para esto usamos una herramienta muy buena llamada gparted., antes con lvm1 era necesario crear particiones de tipo 8e para ser utilizadas por LVM pero ahora con lvm2 ya no tenemos esa restricción. Nuestro disco antes de ser redimensionado:
Nuestro disco luego de ser redimensionado: 3.Mostramos la información de nuestro disco nuevamente para verificar los cambios: debian:~# fdisk -l
Disk /dev/hda: 40.0 GB, 40016019456 bytes 255 heads, 63 sectors/track, 4865 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System /dev/hda1 * 1 768 6168928+ 83 Linux /dev/hda2 4742 4865 996030 82 Linux swap / Solaris /dev/hda3 769 4741 31913122+ 83 Linux Observamos que además de /dev/hda1 y /dev/hda2 existe una nueva partición /dev/hda3 de 30G aproximadamente, es allí donde haremos nuestros volúmenes lógicos. 4.Crear Volúmenes Físicos (PV) Para poder usar un dispositivo de almacenamiento con LVM debemos inicializarlo con el comando: pvcreate [DispositivosDeAlmacenamiento...] debian:~# pvcreate /dev/hda3 Physical volume "/dev/hda3" successfully created Observamos el resultado con pvdisplay: debian:~# pvdisplay --- NEW Physical volume --- PV Name /dev/hda3 VG Name PV Size 30.43 GB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID N2C1pd-MCyg-6A0t-VIMI-sV0r-stH1-fhmbwh 5.Crear Grupos de Volúmenes (VG) Una vez creados los volúmenes físicos debemos agregarlos todos a un grupo de volúmenes de tal forma que se sume su tamaño y se forme un área de almacenamiento general. Creamos el grupo de volúmenes con el comando: vgcreate NombreGrupoVolumenes [VolumenesFisicos...] debian:~# vgcreate vg1 /dev/hda3 Volume group "vg1" successfully created Observamos el resultado con vgdisplay: debian:~# vgdisplay --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 30.43 GB PE Size 4.00 MB Total PE 7791 Alloc PE / Size 0 / 0 Free PE / Size 7791 / 30.43 GB VG UUID 8HsNLC-2Ab2-z1JB-Vak5-2gN6-LOEN-uZPSU9 6.Crear Volúmenes Lógicos (LV) Ahora dividiremos el espacio del grupo de Volúmenes en volúmenes lógicos sobre los cuales se crearán los sistemas de archivos, podemos crear los volúmenes lógicos de un tamaño máximo al del grupo de volúmenes que pertenece, pero lo ideal es darle un tamaño aproximado y luego irlo redimensionando por demanda, ésa es la gran ventaja de LVM, podemos realizar éstas operaciones en caliente. Para crear un volumen lógico utilizamos el comando: lvcreate -L tamaño -n NombreVolumenLogico NombreGrupoVolumenes debian:~# lvcreate -L 10G -n lvhome vg1 Logical volume "lvhome" created debian:~# lvcreate -L 5G -n lvusr vg1 Logical volume "lvusr" created
Observemos el resultado con lvdisplay: debian:~# lvdisplay --- Logical volume --- LV Name /dev/vg1/lvhome VG Name vg1 LV UUID uhcasH-anem-DoUa-QPWW-M2Ip-JqiL-0AePVp LV Write Access read/write LV Status available # open 0 LV Size 10.00 GB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors 0 Block device 254:0
--- Logical volume --- LV Name /dev/vg1/lvusr VG Name vg1 LV UUID nE9pMq-CVRF-IqO3-3fJK-Yjic-d2LX-Oz9S7O LV Write Access read/write LV Status available # open 0 LV Size 5.00 GB Current LE 1280 Segments 1 Allocation inherit Read ahead sectors 0 Block device 254:1
Cuando creemos un Volumen Lógico, se creará un dispositivo dentro de /dev/mapper/, su nombre seguirá este formato: NombreGrupoVolúmenes-NombreVolúmenLógico, por ejemplo, vg1-lvhome. Lo verificamos: debian:~# ls /dev/mapper/ control vg1-lvhome vg1-lvusr 7.Crear Sistemas de Archivos en Volúmenes Lógicos Una vez creados los volúmenes lógicos, éstos pueden contener sistemas de archivos para ser utilizamos como dispositivos de almacenamiento, por ejemplo podemos crear un sistema de archivos ext3, xfs, ext2, fat32, etc. dentro de un volumen lógico. Para crear un sistema de archivos utilizamos el comando mkfs: debian:~# mkfs.ext3 /dev/mapper/vg1-lvhome debian:~# mkfs.ext3 /dev/mapper/vg1-lvusr Con éstos comandos estamos creando el sistema de archivos ext3 dentro de los volúmenes lógicos lvhome y lvusr. 8.Ahora viene la parte emocionante: la migración en vivo, realmente es un proceso sencillo, las particiones a montar en LVM serán /home y /usr, pero nosotros tenemos archivos allí, haré el proceso para /usr, para /home el proceso es análogo: - Primero debemos asegurarnos de que nadie esté accediendo a /usr, sería suficiente si nos vamos al nivel de ejecución 1: debian:~# telinit 1 - Montamos el volumen lógico en /mnt y copiamos los archivos de /usr allí, para que sean idénticos: debian:~#mount /dev/vg1/lvusr /mnt debian:~#cp -a /usr/* /mnt debian:~#umount /mnt
-Movemos los archivos de /usr a un directorio temporal y luego montamos en /usr el volúmen logico lvusr: debian:~#mkdir /usrold debian:~#mv /usr/* /usrold/ debian:~#mount /dev/vg1*lvusr /usr
-El paso final es actualizar el archivo /etc/fstab para que se monte automáticamente cada vez que iniciemos el sistema, le agregamos la siguiente línea al final del archivo /etc/fstab:
/dev/vg1/lvusr /usr ext3 defaults 0 2
-Ahora regresamos al nivel de ejecución 2: debian:~# telinit 2 Ahora ya tenemos configurado nuestro sistema de almacenamiento LVM! IV.Redimensionando volúmenes lógicosPasado el tiempo tendremos la necesidad de extender o reducir el tamaño de nuestros volúmenes lógicos. Supongamos que nos quedamos sin espacio en /home y queremos extender su tamaño: 1° Lo primero es verificar si tenemos espacio disponible en el grupo de volúmenes:
#vgdisplay vg1
debian:~# vgdisplay vg1 --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 30.43 GB PE Size 4.00 MB Total PE 7791 Alloc PE / Size 3840 / 15.00 GB Free PE / Size 3951 / 15.43 GB VG UUID 8HsNLC-2Ab2-z1JB-Vak5-2gN6-LOEN-uZPSU9
Y observamos que tenemos 15.43G disponibles.
2° Expandiendo el volumen lógico:
debian:~# lvresize -L +5G /dev/vg1/lvhome Extending logical volume lvhome to 15.00 GB Logical volume lvhome successfully resized
Estamos añadiendo 5G al volumen lógico lvhome.
2° Expandiendo el sistema de archivos para que coincida con el tamaño del volumen lógico:
Para redimensionar el sistema de archivos es necesario que nadie esté accediendo a él, lo ideal es irse al nivel de ejecución 1 para poder desmontarlo:
debian:~# telinit 1 debian:~# umount /home debian:~# resize2fs /dev/vg1/lvhome debian:~# mount /home El comando para redimensionar el volumen lógico es diferente para cada sistema de archivos, para ext2/ext3 usamos resize2fs, para reiserfs resize_reiserfs, para xfs xfs_growfs.
Finalizado ésto, observemos los cambios:
debian:~# lvdisplay /dev/vg1/lvhome --- Logical volume --- LV Name /dev/vg1/lvhome VG Name vg1 LV UUID uhcasH-anem-DoUa-QPWW-M2Ip-JqiL-0AePVp LV Write Access read/write LV Status available # open 0 LV Size 15.00 GB Current LE 3840 Segments 2 Allocation inherit Read ahead sectors 0 Block device 254:0
Ahora /home tiene 15G de espacio total.
debian:~# vgdisplay vg1 --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 30.43 GB PE Size 4.00 MB Total PE 7791 Alloc PE / Size 5120 / 20.00 GB Free PE / Size 2671 / 10.43 GB VG UUID 8HsNLC-2Ab2-z1JB-Vak5-2gN6-LOEN-uZPSU9
Y nos quedan sólo 10.43G disponibles en el grupo de volúmenes.
El segundo caso es cuando queremos reducir el tamaño de un volumen lógico, supongamos que por alguna razón deseamos reducir el tamaño de /usr:
1° Veamos su información:
debian:~# lvdisplay /dev/vg1/lvusr --- Logical volume --- LV Name /dev/vg1/lvusr VG Name vg1 LV UUID nE9pMq-CVRF-IqO3-3fJK-Yjic-d2LX-Oz9S7O LV Write Access read/write LV Status available # open 1 LV Size 5.00 GB Current LE 1280 Segments 1 Allocation inherit Read ahead sectors 0 Block device 254:1
Vamos a reducir /usr de 5G a 4G, de ésta forma liberaremos 1G que se agregará al espacio total del grupo de volúmenes vg1.
2° Nos vamos al nivel de ejecución 1 para poder desmontar /usr:
debian:~# telinit 1 debian:~# umount /usr 3° Reduciendo el sistema de archivos: debian:~# resize2fs /dev/vg1/lvusr 4G Como /usr es de tipo ext3 usamos resize2fs, si quisiéramos reducir a un sistema de archivos reiserfs usamos resize_reiserfs, para xfs y jfs no es posible realizar ésta operación porque éstos sistemas de archivos no se pueden reducir. 4° Reduciendo el volumen lógico: debian:~# lvreduce -L -1G /dev/vg1/lvusr 5° Montamos /usr: debian:~# mount /usr Finalmente observemos los cambios tanto en el volumen lógico como en el grupo de volúmenes:
debian:~# lvdisplay /dev/vg1/lvusr --- Logical volume --- LV Name /dev/vg1/lvusr VG Name vg1 LV UUID nE9pMq-CVRF-IqO3-3fJK-Yjic-d2LX-Oz9S7O LV Write Access read/write LV Status available # open 1 LV Size 4.00 GB Current LE 1024 Segments 1 Allocation inherit Read ahead sectors 0 Block device 254:1
debian:~# vgdisplay /dev/vg1 --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 30.43 GB PE Size 4.00 MB Total PE 7791 Alloc PE / Size 4864 / 19.00 GB Free PE / Size 2927 / 11.43 GB VG UUID 8HsNLC-2Ab2-z1JB-Vak5-2gN6-LOEN-uZPSU9 V.Agregando un nuevo disco al sistemaCuando agreguemos un disco duro al sistema debemos hacer utilizable su espacio por LVM, es decir sumarlo a un grupo de volúmenes: 1° Creamos el volumen físico, supongamos que la partición a agregar es /dev/hdb1: debian:~# pvcreate /dev/hdb1 Physical volume "/dev/hdb1" successfully created
2° Extendemos el grupo de volúmenes: debian:~# vgextend vg1 /dev/hdb1 Volume group "vg1" successfully extended Ahora ya contaremos con mas espacio en el grupo de volúmenes vt1 y podemos apreciarlo listando su información con vgdisplay.
Recomendaciones finales: Este manual está hecho para usuarioa algo familiarizados al Sistema Operativo GNU/Linux y algunos conocimientos básicos de informática y sistemas de archivos, si tienen dudas una buena manera de informarse es revisando el manual de cada comando: man <comando>, y leer un poco sobre sistemas de archivos, particiones, discos, etc. VI.Bibliografíahttp://www.gentoo.org/doc/es/articles/lvm-p1.xml http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)
|