Instalando Gentoo con LVM2
Puesto que desde este verano tenía un disco duro SATA de 250G lleno de mierda debido al paso por la Campus Party y toda esa mierda lleva mucho tiempo almacenada en DVDs, hace tiempo que tenía pensado usar dicho HD para mi sistema y dejar el actual ( disco IDE de 80G ) para cualquier otra necesidad que surja. Así pues, hoy me he puesto a instalar Gentoo GNU/Linux en éste, y pensando qué particionamiento hacer he decidido no calentarme la cabeza, usar una partición para /boot, otra para / y otra para /home pero usando LVM2. Como no lo había hecho nunca, y pese a que hay documentación por ahí al respecto, dejo esto aquí como apunte para quien le interese y para que no se me olvide ;-).
- ¿Qué es LVM2?
LVM significa Logical Volume Manager, y el 2 como ya habréis adivinado es por ser la versión 2. Se trata de un gestor de volúmenes virtuales para Linux, que permite tener una abstracción de los dispositivos físicos del sistema y crear dispositivos lógicos por encima. Esto nos permite tanto unir varios dispositivos físicos en dispositivos lógicos, como tener varios lógicos sobre un único dispositivo físico. Se puede además cambiar el tamaño de los volúmenes cuando haga falta, con lo que te puedes olvidar de tener particiones en las que no quepan los datos.
- Mi esquema de particionado
En el disco de 250G he creado las siguientes particiones:
Partición para boot: 30M. (sda1)
Partición para windows: 20G. (sda2)
Partición por si algún día instalo FreeBSD: 20G. (sda3)
Partición para swap: 1G. (sda5)
Partición para Gentoo: resto. (sda6)En esta última partición es en la que he creado los volúmenes virtuales para la raiz del sistema y para /home como veremos ahora.
- ¿Qué necesitamos?
Para poder usar LVM2 necesitamos en primer lugar soporte en el kernel. La opción que hay que activar es la llamada Device Mapper Support dentro de Device Drivers > Multi-device support (RAID and LVM) en el kernel 2.6.19. En otras versiones es posible que cambie un poco el nombre o la ubicación, aunque será fácilmente identificable.
También es importante dar soporte para initrd (Initial RAM Disk) y darle un tamaño mayor de 4096 que es el que lleva por defecto, ya que si no no cabe la imagen que necesitamos. Yo lo que he hecho ha sido después de crear la imagen (del modo que veremos después) descomprimirla y ver su tamaño para poner uno un poco mayor en el kernel.
Además, necesitamos instalar las aplicaciones device-mapper, lvm2 y mkinitrd. En gentoo los paquetes se llaman con estos mismos nombres.
- Creación de volúmenes virtuales
En primer lugar, debemos crear un volúmen físico sobre la partición o particiones que deseamos usar con LVM:
zeus linux # modprobe dm-mod
zeus linux # vgscan
No volume groups found
zeus linux # vgchange -ay
No volume groups found
zeus linux # pvcreate /dev/sda6
Physical volume "/dev/sda6" successfully created
Con modprobe cargamos el módulo del device-mapper si nos hace falta, luego con vgscan leemos el disco en busca de grupos de volúmenes, y con vgchange activamos los volúmenes virtuales. Con pvcreate generamos un volúmen físico en /dev/sda6. Una vez hemos hecho esto, debemos crear un grupo de volúmenes :
zeus linux # vgcreate system /dev/sda6
Volume group "system" successfully created
En este paso podríamos haber creado un grupo sobre varios volúmenes físicos distintos, añadiéndolos a la línea tras /dev/sda6. Ahora únicamente nos queda añadir los volúmenes lógicos al grupo de volúmenes que acabamos de crear. En mi caso he añadido los volúmenes llamados root y home de 20 y 170 gigas respectivamente al grupo system:
zeus linux # lvcreate -L20G -nroot system
Logical volume "root" created
zeus linux # lvcreate -L170G -nhome system
Logical volume "home" created
Y ahora sí, el ultimísimo paso es formatear los volúmenes como haríamos con una partición normal, en mi caso con reiserfs:
zeus linux # mkfs.reiserfs /dev/system/root
zeus linux # mkfs.reiserfs /dev/system/home
- Configurando el arranque: initrd, grub y fstab
El script nos creará la imagen directamente en /boot, y faltará únicamente configurar el arranque de la forma que el propio script nos indica. En grub, lo que haremos será añadir una configuración similar a esta:
title Gentoo with LVM
root (hd1,0)
kernel /vmlinuz-2.6.19-gentoo-r5 root=/dev/ram0 lvm2root=/dev/system/root
initrd /initrd-lvm2-2.6.19-gentoo-r5
Por su parte, el /etc/fstab será exactamente igual que siempre salvo el nombre de la unidad. En este caso, se llamará /dev/vg/lv, por ejemplo /dev/system/home en el caso de mi volúmen para home.
Por último, es importante crear el directorio /initrd puesto que la imagen initrd hace un chroot a dicho directorio y si no lo creais os dará un error con un mensaje que dice algo similar a pivot_root: File not found.
Ahora solo queda reiniciar y esperar tener suerte 😉
- Redimensionando volúmenes
Una vez tenemos el sistema funcionando, es posible que por lo que sea nos quedemos sin espacio en una de las particiones (en mi caso sería más probable en la raiz que tiene 20G que en la home que tiene 170 :-P) y queramos redimensionarlas. Para ello tenemos los comandos lvreduce y lvextend, que nos permiten reducir y extender volúmenes lógicos respectivamente.
La forma de uso es sencilla, simplemente se le debe especificar con el parámetro -L el nuevo tamaño y seguidamente el volúmen a redimensionar. Por ejemplo para quitarle 1G a home y darselo a root haríamos lo siguiente:
lvreduce -L-1G /dev/system/home
lvextend -L+1G /dev/system/root
Espero que os haya gustado y os sea útil... a mí al menos me servirá para no olvidarme en el futuro 😉
PD: Sirva este post para decir que me cago en el editor de wordpress... que hace lo que le da la gana y me había indentado todo el post en lugar de solo los comandos como yo había puesto y llevo un buen rato peleándome con él.
March 26th, 2007 - 22:33
Interesante 😀 sabía como iba pero nunca lo he usado así que es una buena introducción, thanks!!
April 8th, 2007 - 20:52
oye, esto no lo entiende ni $DEITY XDD Bueno, supongo que sí. Soy yo la que no me he enterado de nada 🙂
October 21st, 2009 - 22:30
Interesante lectura para decidirme si montar un lvm o no en un servidor. Aunque dudo que lo vaya a tocar en el futuro cercano, nunca está de más lo del lvextend para meter más leña al mySQL en /var si la DB tiene mucha hambre 🙂