gestión de discos SAN en caliente con lvm y ext2online

Posted on Thu 31 March 2011 in Hardware • 4 min read

El uso de grandes cabinas de discos SAN Storage Area Network o vulgarmente llamados discos por fibra, tienen el inconveniente de que si no se asigna correctamente el tamaño del disco, malgastamos mucho espacio al no poder reasignar el espacio no usado para otros usos.

En linux no disponemos de un gestor de volúmenes con un interfaz de usuario atractivo, pero disponemos del potente lvm ( logical volume manager ) que en su versión 2 esta totalmente integrado con el kernel.

En este tutorial no voy a mostrar como se configura la tarjeta de fibra, si no como configurar los discos que veremos en nuestra máquina al asignar una lo que se llama en palabras técnicas una LUN.

Un vez asignada la lun a la máquina, mediante la utilidad que nos haya facilitado el fabricante de la cabina de discos, tenemos que hacer un reescaneo de la fibra, con las EVA de HP se hace con hp_rescan o en EMC de IBM con powermt

Despues de hacer esto en el dmesg nos aparecera algo como esto:

SCSI device sdd: 8388608 512-byte hdwr sectors (4295 MB)
 SCSI device sdd: drive cache: write through
 sdd: unknown partition table

Esto nos indica que el nuevo disco lo tenemos en /dev/sdd y es de 4G. Para tener mas eficiencia a la hora de repartir el disco, lo mejor es partir el disco en trozos para luego repartirlo como mejor creamos.

Usaremos fdisk /dev/sdd para hacer 4 particiones de 1G lo cual nos dara lo siguiente:

_/dev/sdd1 , /dev/sdd2 , /dev/sdd3 y /dev/sdd4_

En LVM tenemos que tener claro los conceptos de volumen fisico (physical volume), grupo de volúmenes (volume group) y volumen lógico (logical volume). Lo siguiente sera hacer que lvm cataloge estas particiones para poder usarlas y lo hacemos diciendole donde estan los volúmenes fisicos en este caso /dev/sdd[1-4]

pvcreate /dev/sdd1 /dev/sdd2 /dev/sdd3 /dev/sdd

Ahora que lvm ya tiene los discos catalogados e inicializados, podemos comprobarlo y ver la informacion de los discos:

pvdisplay

Despues tenemos que crear uno varios grupos de volúmenes y asignar los discos a estos grupos. Posteriormente podremos mover los PV entre los diferentes VG

vgcreate grupo_bbdd /dev/sdd1 /dev/sdd2 /dev/sdd3 /dev/sdd4

o bien crear varios volúmenes

vgcreate grupo_bbdd /dev/sdd1 /dev/sdd2
vgcreate grupo_datos /dev/sdd3 /dev/sdd4

Con vgdisplay podemos ver la información de grupo:

[root@lnxserver ~]# vgdisplay
 --- Volume group ---
 VG Name               grupo_bbdd
 System ID
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  12
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                1
 Open LV               1
 Max PV                0
 Cur PV                1
 Act PV                1
 VG Size               4.00 GB
 PE Size               4.00 MB
 Total PE              1023
 Alloc PE / Size       999 / 3.90 GB
 Free  PE / Size       24 / 96.00 MB
 VG UUID               GsJO5U-DbX0-6H8d-JYUk-rH7I-m8VK-BEqTHx

Ahora ya podemos crear tantos volúmenes logicos como espacio tengamos en el grupo.

[root@lnxserver ~]# lvcreate --size 1500M --name disco1 grupo_bbdd
[root@lnxserver ~]# lvdisplay
 --- Logical volume ---
 LV Name                /dev/grupo_bbdd/disco1
 VG Name                grupo_bbdd
 LV UUID                4cJ2UN-wvh0-YWat-WUCl-iPtO-XWuP-QirzQm
 LV Write Access        read/write
 LV Status              available
 # open                 1
 LV Size                1.500 MB
 Current LE             999
 Segments               1
 Allocation             inherit
 Read ahead sectors     0
 Block device           253:2

El siguiente paso sera crear un sistema de archivos en este disco logico. Para poder tener la posibilidad de usar la ampliación del disco en caliente sin desmontarlo, lo mejor es usar ext3 o jfs. Nosotros lo haremos con ext3

```auto[root@lnxserver ~]# mkfs.ext3 /dev/grupo_bbdd/disco1 [root@lnxserver ~]# mount /dev/grupo_bbdd/disco1 /mnt/DISCO1 [root@lnxserver ~]#df -h | grep DISCO1 1.500M 36M 1.500M 1% /mnt/DISCO1

Ahora supongamos que se nos ha llenado el disco y queremos ampliarlo, pero tenemos que hacerlo en caliente sin desmontar el disco. Si todavia tenemos espacio libre en el VG, lo usaremos y si no tendremos que presentar otro disco e incluso ampliar el disco en la SAN y despues con hp\_rescan, pvscan vgscan veremos el nuevo tamaño. En esto caso vamos a añadir espacio que tenemos en el VG grupo\_bbdd.

[root@lnxserver ~]# lvresize --size +1G /dev/grupo_bbdd/disco1 [root@lnxserver ~]# lvdisplay --- Logical volume --- LV Name /dev/grupo_bbdd/disco1 VG Name grupo_bbdd LV UUID 4cJ2UN-wvh0-YWat-WUCl-iPtO-XWuP-QirzQm LV Write Access read/write LV Status available # open 1 LV Size 2.524 MB Current LE 999 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:2

Ahora ya vemos el nuevo tamaño del disco lógico, pero el disco montado sigue teniendo lo mismo, para ello usaremos ext2online

[root@lnxserver ~]# ext2online /dev/grupo_bbdd/disco1 ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b ext2online: new size is (1022976) ```

De esta manera podemos hacer lo mismo para quitar espacio a un disco mal dismensionado y que le sobra, por lo que lo podremos usar para otras cosas, sin tener que parar ni desmontar ningun disco.