Hola a todos,ubuntu

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.

Eloy MierComo 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 -&gt; ampliamos el volumen lógico sistema en 100Gb
    lvextend --size +100G /dev/mapper/vg1-lv_home -&gt; 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 -&gt;

      check del primer volumen

      2efsck -f /dev/mapper/vg1-lv_sistema -&gt;

      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.
  • Aquí en este caso calcule un poco a ojimetro. Puesto que sabia que inicialmente había ampliado 100G cada uno de los volumenes, mi idea era dejarlos un poco mas pequeños para después ajustarlos con resize2fs. Me explico, la utilidad resize2fs recibe como parámetro un valor absoluto de tamaño de disco final. No se le puede indicar -100G como hicimos al crear los volúmenes. Tampoco se le puede indicar (o yo no se como) valores decimales, por ejemplo, no le puedo decir que el tamaño final del sistema de ficheros va a ser de 180,02Gb por lo tanto, lo que hago es dejarlo un poco por debajo de donde va a quedar apuntando el dimensionado de LVM y despues mediante la misma utilidad, dejo que el sistema ajuste lo que tenga que ajustar. Me pareció mas sencillo.
  • Puesto que el volumen de sistema ocupaba 190,02Gb y sabia que habia ampliado 100G inicialmente, debia dejarlo sobre 90G finales para poder recuperar la parte correspondiente del disco externo. Por lo tanto la orden usada fue:
    resize2fs /dev/mapper/vg1-lv_sistema 90G 

    y lo mismo para el home

    resize2fs /dev/mapper/vg1-lv_home 100G
  • Después de estas operaciones que se ejecutaron sin complicaciones, lancé los comandos de LVM de reducción:
    lvreduce --size -100G /dev/mapper/vg1-lv_home
    lvreduce --size -100G /dev/mapper/vg1-lv_sistema
  • Y por ultimo para ajustar el sistema de ficheros al tamaño real de las particiones volví a ejecutar
    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.