Estos días he estado liadete peleando un poco con LVM. Voy a poneros en antecedentes para que sepáis de que problema hablo y como surge.
Inicialmente la empresa donde trabajaba, no es que se distinguiese de la mayoría por el amplio material puesto a disposición de los técnicos. Es por ello que por aquel entonces me decido a comprar un disco duro externo para poder hacer las copias de seguridad de mi portátil. El disco duro en cuestión es un WD My Book PRO con dos discos de 500Gb/u que puede configurarse con Windows en dos modos RAID 0 y 1.
Bien, en aquellos días, el disco lo tenia configurado como RAID o, por que realmente tenia varias copias de la información, así que su integridad era «solo» relativamente importante.
Como muchos ya sabéis hace 1 mes fui despedido de mi empresa (Ness Pro) )y por lo tanto el disco se quedo sin asignación.
Da la casualidad que una semana antes del despido, había pedido una ReadyNas Pro de Netgear por Internet. Si hubiese sabido lo de mi despido, a lo mejor no la hubiese comprado, pues costo una pasta. En casa con la nueva NAS quedo solucionado el problema del almacenamiento de red. Por otro lado, la NAS, también tiene la posibilidad de ejecutar ciertos añadidos de software base, como por ejemplo, apache, mysql, torrentflux….en fin, parte de los servicios que ya proporcionaba el server de casa.
Por lo tanto y dado el panorama, se me ocurrió que el servidor de casa podría dejar de prestar los servicios que ya daba la Nas y podía comenzar a mantener el VM Ware Server que da servicio a la Lan. De esta forma podría eliminarlo de mi máquina, que hasta el momento, me obligaba a tenerla encendida para poder tener las máquinas virtuales corriendo. Puesto que no quiero problemas con las máquinas virtuales, me decidí a configurar el famoso disco WD con RAID 1 y añadirlo al server a medida que fuese necesitando sitio.
La configuración inicial con la que partía en el servidor es la siguiente:
- Tengo un grupo de volúmenes llamado vg1
- El grupo de volúmenes vg1 esta formado por 1 disco
- Tengo definidos 2 volúmenes lógicos en el grupo de volúmenes vg1
- El disco del servidor es de 250Gb de capacidad
- El servidor es un Acer EEE Box b202
A continuación tenéis el detalle técnico de partida:
Salida de particionado del disco:
eloy@ubuntuEEEBox:~$ sudo fdisk -l Disco /dev/sda: 250.0 GB, 250059350016 bytes 255 cabezas, 63 sectores/pista, 30401 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Identificador de disco: 0x00056ed8 Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/sda1 1 243 1951866 82 Linux swap / Solaris /dev/sda2 * 244 30401 242244135 8e Linux LVM
Salida de comandos de LVM de estado inicial:
Listado de volúmenes físicos disponibles:
lvm> pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg1 lvm2 a- 231,02G 0
Listado de grupo de volúmenes definidos:
lvm> vgdisplay --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 19 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 231,02 GB PE Size 4,00 MB Total PE 59141 Alloc PE / Size 59141 / 231,02 GB Free PE / Size 0 / 0 VG UUID XlTz3m-7VVk-z8dT-GkYx-IyrT-Ksaq-AQIvsN
Listado de volúmenes lógicos definidos:
lvm> lvdisplay --- Logical volume --- LV Name /dev/vg1/lv_sistema VG Name vg1 LV UUID ruLsne-30D2-x055-dbcH-AgCC-fKNc-IT9QcV LV Write Access read/write LV Status available # open 1 LV Size 100,00 GB Current LE 25600 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:0 --- Logical volume --- LV Name /dev/vg1/lv_home VG Name vg1 LV UUID RAc0HJ-5QQD-WUTf-kqAK-s3Ce-TROn-rN2b4f LV Write Access read/write LV Status available # open 1 LV Size 131,02 GB Current LE 33541 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1
Bien, pues con esta configuración en aquel momento tenia el siguiente problema. Si VMWare Server usa /var/lib/vmware/Virtual Machines como directorio por defecto para las máquinas virtuales, no tenia demasiado sitio en la máquina para tener ficheros tan grandes como los requeridos. Así que pensé lo siguiente. Conecto el WD a windows y lo configuro con RAID 1, después lo engancho a mi server con Ubuntu 8.10 para darle formato ext 3 y posteriormente amplio la asignación de espacio siguiendo el esquema siguiente:
- Conecto el disco WD al server usando un puerto USB
- Le doy formato ext3 usando mkfs.ext3 <dispositivo>
- Añado al grupo de volúmenes vg1 el nuevo disco
- Amplio la capacidad de las unidades lógicas a medida que las necesite.
Bien, el esquema propuesto funciono a las mil maravillas. Después de todo ese trabajo logre ampliar mis volúmenes lógicos cada uno en 100Mg sin ningún problema y sin ninguna perdida de información. Parece que ext3 es de los pocos sistemas de ficheros que permiten crecer el espacio en disco en caliente. Los pasos que seguí en su momento para ampliar cada uno de los volúmenes lógicos fueron:
- Definición de extensión en LVM mediante los comandos
lvextend --size +100G /dev/mapper/vg1-lv_sistema -> ampliamos el volumen lógico sistema en 100Gb
lvextend --size +100G /dev/mapper/vg1-lv_home -> ampliamos el volumen lógico home en 100Gb
- Ojo por que hasta este punto lo único que hemos hecho ha sido definir un mayor tamaño lógico en los volúmenes indicados, pero el sistema de ficheros realmente todavía no se da por enterado.
- Ahora hay que ampliar realmente el sistema de ficheros, y lo hice mediante las siguientes ordenes, una por cada volumen lógico:
resize2fs /dev/mapper/vg1-lv_home
resize2fs /dev/mapper/vg1-lv_sistema
- Nota: En estas instrucciones no hace falta indicar el tamaño final, por experiencia propia amplían la capacidad hasta al limite definido de 100Mb mas.
Impresionante ver cómo la máquina agrandó los sistemas de ficheros en caliente. Una pena no disponer de las capturas de pantalla con la configuración.
Ahora continuamos con la historia. Después de todo esto, entra en juego mi hermano Rafa. Necesita un sistema de discos que le proporcione cierta fiabilidad, pues la información que quiere almacenar en él es algo crítica. Después de estar mirando un poco el mercado, puesto que tampoco quiere gastarse mucha pasta, llegamos a la conclusión que le puedo dar mi WD, así que nada, manos a la obra.
Ahora, después de un par de semanas con el recién estrenado sistema, tengo que desmontarlo para pasarle el disco a mi hermano. El asunto es cómo, pues el disco USB es parte del sistema, jajajaja, me parto.
Bien pues aquí llega la solución. En el caso de la aplicación como hemos visto antes, no es necesario desmontar absolutamente nada para lograr la misma, pero el caso de recortar el sistema de ficheros es completamente distinto.
Bien, después de darme de leches unas horas con el asunto he llegado a la solución del problema. Para ello es requisito necesario obtener el disco alternativo de la distribución instalada en la maquina donde quieras hacer la operación y además, el sistema de ficheros que queremos reducir debe tener como máximo la misma cantidad de espacio ocupada que el tamaño final del sistema al que queremos llegar, en otro caso perderemos información si o si.
Ejemplo, si tengo una unidad lógica de 250Gb y quiero reducirla en 100G, la información que tengo almacenada en esa unidad no puede superar los 150Gb pues es el tamaño final de la unidad ¿no es lógico?
Bien, pues los pasos que he realizado para cada una de los volúmenes lógicos para lograr reducir su tamaño son:
- Vaciar de información no necesaria los volúmenes dejando espacio mas que de sobra para la reducción.
- Arranque del servidor con el CD de Ubuntu 8.10 alternativo y selección del modo de rescate en el menú de inicio.
- Cuando pide la partición que debe montar como /, nunca le deis alguna de las unidades lógicas que queréis modificar. Esto es debido a que como ya hemos comentado con anterioridad, los volúmenes no pueden estar montados para efectuar la operación de disminuir el tamaño.
- El primero de los pasos es realizar un check de los discos, es un paso obligatorio y si nos lo saltamos el sistema nos avisa (que maravilla de SO!!)
e2fsck -f /dev/mapper/vg1-lv_home ->
check del primer volumen
2efsck -f /dev/mapper/vg1-lv_sistema ->
check del segundo volumen
- Una vez tengamos el ok, pasamos a un punto que me llamo la atención. En esta operación primero se realiza el resize2fs y después las operaciones lvm, justo al contrario que en la ampliación.
resize2fs /dev/mapper/vg1-lv_sistema 90G
y lo mismo para el home
resize2fs /dev/mapper/vg1-lv_home 100G
lvreduce --size -100G /dev/mapper/vg1-lv_home
lvreduce --size -100G /dev/mapper/vg1-lv_sistema
resize2fs /dev/mapper/vg1-lv_sistema
resize2fs /dev/mapper/vg1-lv_home
Después de toda esta parafernalia, conseguí dejar el sistema en su estado inicial. Verifique que el segundo disco estaba usando en 0% y lo elimine del grupo de volúmenes con el comando
vgreduce vg1 /dev/sda1
Pues hasta aquí la historia de hoy. Saludos a todos los lectores, a ver si alguno se anima y se pone en contacto para aportar también alguna vivencia.
Hasta otro día.
You must be logged in to post a comment.