jueves, marzo 10, 2011

LVM (Logical Volume Manager)

Actualizado el 12-03-2011 y el 15-03-2011.

En origen el término viene de gestor de volúmenes Veritas. Por ello es el que utiliza HP-UX pero también es la que adoptó el Kernel de Linux.

Estos son los pasos a realizar en HP-UX cuando le ofreces un disco:

1.-Hacer que que el nucleo del S.O. vea el disco:
ioscan -fnC disk

Mejora en HP-UX 11.31:

En esta versión tenemos la opción de hacer ioscan -m dsf
Esto nos facilita mucho las cosas porque nos agrupa lo diferentes PATH a un mismo disco de forma que no tenemos que andar eligiendo un prefered path y los alternates.


aizkorri:/# ioscan -m dsf

Persistent DSF Legacy DSF(s)
========================================
.........
/dev/rdisk/disk128

/dev/rdsk/c30t0d7
/dev/rdsk/c28t0d7
/dev/rdsk/c36t0d7
/dev/rdsk/c38t0d7
/dev/rdsk/c40t0d7
/dev/rdsk/c42t0d7
/dev/rdsk/c32t0d7
/dev/rdsk/c34t0d7

A partir de ahora nos referiremos a ese disco como /dev/rdisk/disk128
o /dev/disk/disk128
según corresponda.

2.-Crear los ficheros de dispositivo:
insf

Otras opciones para utilizar (con cuidado):
insf -e
insf -C disk


3.-Mirar la descripción de los nuevos discos que haya encontrado:
ioscan -fnC disk

Un disco que se vea como /dev/dsk/c36t0d1
tiene como instancia de controladora: 36
el target 0
y lun 1

En caso de duda podemos consultar información del disco. Para ello hay que hacer referencia a RDSK en lugar de DSK:

diskinfo /dev/rdsk/c36t0d1

4.-Crear el disco físico (physical volume):
pvcreate /dev/rdsk/c36t0d1

Se puede utilizar la opción -f para forzar, pero cuidado, no pide confirmación.

Si no se hace el pvcreate y luego se intenta utilizar el disco en un LVM volume group, devolverá el error: "Physical volume contains no LVM information".

5.-Creación del Volume Group (VG):

Creamos un directorio con el nombre del vg:

mkdir /dev/vgprueba

Ahora hay que comprobar una numeración. Hacemos esto:

ll /dev/vg*/group

Que nos mostrará algo así:

0x000000 /dev/vg00/group
0x010000 /dev/vgXXXX/group
0x020000 /dev/vgYYYY/group
0x030000 /dev/vgZZZZ/group

Bueno, en este ejemplo está claro que nuestro nuevo vg llevará la numeración 0x040000

Creamos el fichero group:

mknod /dev/vgprueba/group c 64 0x040000

Y ya podemos crear el nuevo VG:

Supongamos que el nuevo disco se ve por dos caminos de fibra diferentes. Uno se ve como c36t0d1 y el otro c28t0d1.

vgcreate /dev/vgprueva /dev/dsk/c36t0d1 /dev/dsk/c28t0d1

En discos muy grandes puede ocurrir que con el tamaño de extensión por defecto (demasiado pequeño) se llegue al máximo de extensiones posible:

El máximo número de extensiones es 1.016 y el tamaño por defecto de la extensión 4 Mb.

"Volume group could not be created:
VGRA for the disk is too big for the specified parameters. Increase the extent size or decrease max_PVs/max_LVs and try again".

Podemos aumentar el tamaño de la extensión a 32 Mb:

vgcreate -s 32 /dev/vgprueba /dev/dsk/c36t0d1 /dev/dsk/c28t0d1

Para ver como está el VG:

vgdisplay -v /dev/vgprueba

6.-Creación del Volumen Lógico: Logical Volume (LV):

Sobre el VG vgprueba, creamos un LV llamado lvprueba de 1.000 extensiones de 32 Mb (32.000 Mb):
lvcreate -l 1000 -n lvprueba vgprueba

También se puede crear un LV sin asignarle ninguna extensión y extenderlo más adelante:

lvcreate -n lvprueba vgprueba
lvextend -L 500 /vgprueba/lvprueba /dev/dsk/c28t0d1

7.-Creación del filesystem de tipo vxfs:

Con la opción -o podemos indicar que queremos que pueda albergar ficheros grandes (de más de 2 Gb).

newfs -F vxfs -o largefiles /dev/vgprueba/rlvprueba

8.-Montaje:

mkdir /directorio
mount /dev/vgprueba/lvprueba /directorio


Más cosas sueltas:

Para añadir un disco (PV) a un VG que ya existe:

# vgextend vgprueba /dev/dsk/c0t5d0
# vgdisplay -v vgprueba

Para crear un LV con un tamaño determinado:

# lvcreate -n lvprueba -L 500 vgprueba

Modificaciones del PV:

En cuanto a los PV (physical volume) se pueden modificar algunas características:

El IO timeout suele ser de 30 segundos (lo que tiene que esperar el S.O. antes de considerar que el disco está offline), pero en el caso de algunos arrays de discos hace falta subirlo:

pvchange -t 120 /dev/dsk/c28t0d1

Para restaurar el valor por defecto:

pvchange -t 0 /dev/dsk/c28t0d1

Modificaciones del LV:

En algún momento tendremos que ampliar un LV (Logical Volume):

Para ampliar de 100 Mb a 200Mb por ejemplo:

lvextend -L 200 /dev/vgprueba/lvprueba

Opcionalmente le podemos indicar el dispositivo:

lvextend -L 200 /dev/vgprueba/lvprueba /dev/dsk/c28t0d1

Después de extender el LV, podemos extender el FS (FileSystem):

umount /dev/vgprueba/lvprueba
extendfs /dev/vgprueba/rlvprueba
mount /dev/vgprueba/lvprueba /dir-prueba

Si tenemos licencia de Online JFS hay muchas cosas que podemos hacer sin desmontar filesystems. Esta de extender el filesystem es una de ellas:

fsadm -v 200000 /dir-prueba
Nota: el tamaño está dado en Kb.

Para reducir el tamaño tendríamos que reducirlo con el fsadm del OnlineJFS y luego un lvreduce:

lvreduce -L 100 /dev/vgprueba/lvprueba

Sin OnlineJFS tenemos una pequeña complicación, ya que no podemos reducir el filesystem. Tendremos que hacer un backup, crear un nuevo LV y FileSystem y recuperar los datos.

Cambiar el nombre de un LV es más sencillo de lo que parece. Símplemente movemos los devices:

umount /dev/vgprueba/lvprueba
mv /dev/vgprueba/lvprueba /dev/vgprueba/lvnuevo
mv /dev/vgprueba/rlvprueba /dev/vgprueba/rlvnuevo
mount /dev/vgprueba/lvnuevo /dir-prueba


Modificaciones del VG:

Hay parámetros que no podremos modificar (por ejemplo el max_pe). En estos casos hay que recrear el VG.

Lo que sí podremos hacer es renombrar el VG:

Para ello, además de desmontar los LV tendremos que deshabilitar el VG con el comando vgchange:

# umount /dev/vgprueba/lvprueba1
# umount /dev/vgprueba/lvprueba2

# vgchange -a n vgprueba

La opción a es availability y la "n" indica NO. (el comando contrario es vgchange -a y vgprueba).


Ahora exportamos a un fichero la configuración del VG:
# vgexport -m /tmp/mapfile vgprueba

Ahora vemos las numeraciones asignadas a los vg-s para ver cual sería el siguiente correlativo
# ll /dev/vg*/group

Creamos el nuevo directorio y el fichero group con el número correlativo siguiente (he puesto como ejemplo el 0x080000):
# mkdir /dev/vgnuevo
# mknod /dev/vgnuevo/group c 64 0x080000

Importamos la configuración en el nuevo VG al que le asociamos los devices:
# vgimport -m /tmp/mapfile vgnuevo /dev/dsk/c40t3d0 /dev/dsk/c5t2d1 ...

Eliminar un LV:

#umount /datos
#lvremove /dev/vgoracle/lvoradata

Quitar un PV de un VG:


#vgreduce vgoradata /dev/dsk/c10t4d8

Eliminar un VG:

Desmontar todos los LV que tenga:
#umount /dev/vgoradata/lvredolog1
#umount /dev/vgoradata/lvredolog2
Desactivarlo:
#vgchange -a n vgoradata

Nota importante: Para eliminar el VG habría que hacer vgreduce, pero hazlo sólo si sabes lo que haces. Si hacemos vgexport de la siguiente forma, la configuración permanecerá almacenada en el disco por si hay que montarlo otra vez.

#vgexport vgoradata

Otros comandos de interés:

# vgcfgbackup vgnew



No hay comentarios: