lunes, 15 de abril de 2019

Manejo de LVM en Linux


LVM

A un nivel macro LVM se basa en las siguientes estructuras

Volume Group (VG)
Es la estructura que agrupa uno o mas discos (PVs). El espacio disponible se usa para crear los logical volumes

Physical Volume (PV)
Es un disco, LUN o particion inicializada con una cabecera de datos de LVM

Logical Volume (LV)
Se conforman con el espacio disponible de los VGs, luego los LVs contendrán FSs o serán usados como RAW devices.

De forma sencilla el concepto es el siguiente, se agrupan los discos en un VG, el espacio utilizable del VG es la suma del espacio de cada uno de los discos, de esta forma se elimina la limitante del disco físico. Luego apartir del espacio libre del VG se generan los LVs

Inicializacion de un PV

Para poder controlar un disco mediante LVM primero se le deben crear una cabecera con estructuras de control mediante el comando pvcreate <caracter device special file>

#pvcreate /dev/rdisk/disk5
Physical volume "/dev/rdisk/disk5" has been successfully created.

Si el disco ya estuvo bajo control de LVM y tiene una cabecera LVM, el comando fallara, para poder reescribir la cabecera para poder reutilizar el disco se debe utilizar el flag -f

Creación de un VG

Cuando creamos un VG, el LVM divide a los discos que lo integran en porciones de igual tamaño llamadas physical extents, estas porciones conforman la mínima unidad de asignación de espacio en disco. Por default el tamaño de los PE es de 4MB. Ahora procedemos con la creación del VG, en este caso vamos a armar un vg con Layout 1.0, para ver como se realiza con layout 2.x hacer click aqui de todas formas aconsejo primero leer los conceptos de esta nota primero.

#mkdir /dev/vg01
#mknod /dev/vg01/group c 64 0x010000
#vgcreate /dev/vg01 /dev/disk/disk5
Volume group "/dev/vg01" has been successfully created.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf

De esta forma tenemos creado nuestro nuevo vg. Antes de verificar

Para ver el estado del VG y sus características usamos el comando vgdisplay

#vgdisplay vg01
--- Volume groups ---
VG Name                     /dev/vg01
VG Write Access             read/write
VG Status                   available
Max LV                      255
Cur LV                      0
Open LV                     0
Max PV                      16
Cur PV                      1
Act PV                      1
Max PE per PV               1016
VGDA                        2
PE Size (Mbytes)            4
Total PE                    499
Alloc PE                    0
Free PE                     499
Total PVG                   0
Total Spare PVs             0
Total Spare PVs in use      0
VG Version                  1.0
VG Max Size                 65024m
VG Max Extents              16256

Parámetros de un VG

PE Size, es el tamaño del PE, por default de 4MB, se puede especificar con la opción -s del vgcreate.
Max PE per PV, que define la cantidad máxima de PE por disco, si en este caso solo puedo direccionar 4GBs por disco,si quisiera colocar un disco de mayor tamaño debería recrear el VG y especificar un tamaño adecuado de Max PE per PV se especifica con la opción -e del vgcreate.
Max LV, la cantidad máxima de LVs que puede alojar el VG, se especifica con la opción -l del vgcreate.
Max PV, la cantidad máxima de discos que puedo agregar al VG, se especifica con la opción -p del vgcreate.


Para ver el espacio libre que tengo en el VG multiplico el Tamaño del PE por la cantidad de PE libres, en este caso
4*499=1996MB

Creación de un LV

Así como los PV están compuestos de PE, los LV están compuestos de Logical extents (LE). Los LE están asociados a los PE, si el disco no tiene mirror un LE esta asociado a un PE, si tenemos mirroreado el LV un LE esta asociado a 2 PE uno de cada disco.

Para crear un LV corremos el comando lvcreate

#lvcreate -L 100 -n mylv vg01
Logical volume "/dev/vg01/mylv" has been successfully created with
character device "/dev/vg01/rmylv".
Logical volume "/dev/vg01/mylv" has been successfully extended.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf

Donde -L es el tamaño en MB -n es el nombre del LV, si no se especifica se le asigna automaticamente un nombre y por ultimo se indica cual es el vg en donde se creara el LV

En este caso el tamaño de mi PE es de 16MB y quiero crear un LV de 100MB

#lvcreate -L 100 -n mylv vg01
Warning: rounding up logical volume size to extent boundary at size "112" MB.
Logical volume "/dev/vg01/mylv" has been successfully created with
character device "/dev/vg00/rmylv".
Logical volume "/dev/vg01/mylv" has been successfully extended.
Volume Group configuration for /dev/vg00 has been saved in /etc/lvmconf/vg01.conf

Como 100 no es multiplo de 16, el sistema redondea hacia arriba el tamaño especificado al multiplo de 16 mas cercano

Tambien se puede especificar el tamaño del lv en extents con la opción -l

Para ver el estado del LV y su configuración corremos el comando lvdisplay

#lvdisplay /dev/vg01/mylv
--- Logical volumes ---
LV Name                     /dev/vg01/mylv
VG Name                     /dev/vg01
LV Permission               read/write
LV Status                   available/syncd
Mirror copies               0
Consistency Recovery        MWC
Schedule                    parallel
LV Size (Mbytes)            100
Current LE                  25
Allocated PE                25
Stripes                     0
Stripe Size (Kbytes)        0
Bad block                   on
Allocation                  strict
IO Timeout (Seconds)        default

Creacion de un FS

#newfs -F vxfs -b 8192 /dev/vg01/rmylv
    version 7 layout
    102400 sectors, 12800 blocks of size 8192, log size 128 blocks
    largefiles supported

Una vez que se le dio formato al logical volume se puede montar el FS.

#mkdir /fs1
#mount /dev/vg01/mylv /fs1

Para verificar puedo correr el comando bdf

#bdf
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg00/lvol3     671744  396864  272848   59% /
/dev/vg00/lvol1    1081344  347656  728032   32% /stand
/dev/vg00/lvol8    4042752 1740360 2288608   43% /var
/dev/vg00/lvol5    4927488 2107168 2798360   43% /usr
/dev/vg00/lvol4     131072   30592   99824   23% /tmp
/dev/vg00/lvol7    5484544 3427176 2041376   63% /opt
/dev/vg00/lvol6     102400    5464   96184    5% /home
/dev/vg01/mylv      102400    2288   99344    2% /fs1

Para hacer persistente este cambio debo editar el archivo /etc/fstab

/dev/vg01/mylv /fs1 vxfs delaylog 0 2

donde el indico el LV que contiene el FS, el tipo de FS, opciones de montaje, campo reservado y el nro de secuencia en el que se hacer el chequeo de consistencia al inicio del equipo.

Con la incorporacion de OnlineJFS se puede redimensionar un FS en linea

Ampliación de un FS

Si es que hay espacio disponible en VG extendemos el tamaño del LV,

Verifico que haya espacio en el VG

#vgdisplay vg01 |egrep -e "PE Size" -e "Free PE"
PE Size (Mbytes)            4
Free PE                     474

Vemos que tenemos 1896MB disponibles en el VG. Ahora voy a extender mi LV de 100MBs a 250MBs

#lvextend -L 256 /dev/vg01/mylv
Logical volume "/dev/vg01/mylv" has been successfully extended.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf
#lvdisplay  /dev/vg01/mylv
--- Logical volumes ---
LV Name                     /dev/vg01/mylv
VG Name                     /dev/vg01
LV Permission               read/write
LV Status                   available/syncd
Mirror copies               0
Consistency Recovery        MWC
Schedule                    parallel
LV Size (Mbytes)            256
Current LE                  64
Allocated PE                64
Stripes                     0
Stripe Size (Kbytes)        0
Bad block                   on
Allocation                  strict
IO Timeout (Seconds)        default

La salida del lvdisplay nos muestra reflejado el cambio en el LV, que pasa si corro un bdf ahora

#bdf /fs1
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg01/mylv      102400    2288   99344    2% /fs1

Vemos que el tamaño del FS no se incremento, para ello debo correr un fsadm

#fsadm -F vxfs -b 262144 /fs1
UX:vxfs fsadm: INFO: V-3-25942: /dev/vg01/rmylv size increased from 102400 sectors to 262144 sectors

El parámetro -F indica el tipo de FS, -b indica en bloques de 1K el nuevo tamaño al cual quiero extender el FS. Para verificar corro nuevamente bdf

#bdf /fs1
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg01/mylv      262144    2288  257840    1% /fs1

Reducir el tamaño de un FS en linea

El procedimiento es similar pero de manera inversa, primero se achica el FS y luego se reduce el LV. Siempre se recomienda tener un backup de los datos del FS antes de reducirlo.

Como ejemplo vamos a reducir el /fs1 a 128MBs

#fsadm -F vxfs -b 131072  /fs1
UX:vxfs fsadm: INFO: V-3-23586: /dev/vg01/rmylv is currently 262144 sectors - size will be reduced

Verificamos el FS con un bdf

#bdf /fs1
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg01/mylv      131072    2288  127792    2% /fs1

Reducimos el LV para recuperar el espacio al VG

#lvreduce -L 128 /dev/vg01/mylv
When a logical volume is reduced useful data might get lost;
do you really want the command to proceed (y/n) : y
Logical volume "/dev/vg01/mylv" has been successfully reduced.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf

Se puede verificar el estado del lv como se hizo cuando se extendió con un lvdisplay

#lvdisplay /dev/vg01/mylv
--- Logical volumes ---
LV Name                     /dev/vg01/mylv
VG Name                     /dev/vg01
LV Permission               read/write
LV Status                   available/syncd
Mirror copies               0
Consistency Recovery        MWC
Schedule                    parallel
LV Size (Mbytes)            128
Current LE                  32
Allocated PE                32
Stripes                     0
Stripe Size (Kbytes)        0
Bad block                   on
Allocation                  strict
IO Timeout (Seconds)        default

Ampliacion sin OnlineJFS

Si no se posee OnlineJFS se puede extender un FS pero para ello necesitamos desmontarlo. En principio se extiende el LV como vimos antes, luego desmontamos el FS y por ultimo ejecutamos extendfs.

Ejemplo, extenderemos el /fs1 a 512MB

#lvextend -L 512 /dev/vg01/mylv
Logical volume "/dev/vg01/mylv" has been successfully extended.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf
#umount /fs1
#extendfs /dev/vg01/rmylv
#mount /fs1
#bdf /fs1
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg01/mylv      524288    2304  517920    0% /fs1

Borrado de un LV

Si no necesitamos mas un LV y queremos recuperar su espacio, podemos removerlo. Primero es una buena norma tomarun backup de los datos que contiene, desmontarlo y luego removerlo.

#mount /fs1
#lvremove /dev/vg01/mylv
The logical volume "/dev/vg01/mylv" is not empty;
do you really want to delete the logical volume (y/n) : y
Logical volume "/dev/vg01/mylv" has been successfully removed.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf

Borrado de un VG

Cuando no necesitemos mas un VG podemos borrarlo, existen dos maneras:
  • vgremove
  •  vgexport
Con vgremove, debemos primero remover todos los LV que existan en el VG

Con vgexport no es necesario borrar ningún LV del VG y corremos con la ventaja que si nos equivocamos y necesitamos recuperar el VG, solo debemos importarlo nuevamente. Específicamente cuando exportamos un VG preservamos la estructura de LVM de los discos este procedimiento quita la vinculacion de OS con el VG.

Para borrar el VG

Una vez borrados los LV corremos el vgremove

#vgremove vg01
Volume group "vg01" has been successfully removed.

Para exportar el VG

#vgchange -a n vg01
Volume group "vg01" has been successfully changed.
#vgexport vg01
vgexport: Volume group "vg01" has been successfully removed.

Si necesito volver a importar el vg corro lo siguiente

#vgimport vg01 /dev/disk/disk5
vgimport: Volume group "/dev/vg01" has been successfully created.
Warning: A backup of this volume group may not exist on this machine.
Please remember to take a backup using the vgcfgbackup command after activating the volume group.
#vgchange -a y vg01
Activated volume group.
Volume group "vg01" has been successfully changed.

Si el VG tuviera FSs ya se podrían montar y usar.

Extender un VG

Cuando nos estamos quedando sin espacio en un VG podemos extenderlo agregándole otro PV, el comando a utilizar se llama vgextend, los pasos son identificar el nuevo disco, inicializarlo y agregarlo al VG

ioscan -fnNC disk
Class     I  H/W Path  Driver S/W State   H/W Type     Description
===================================================================
disk      2  64000/0xfa00/0x0  esdisk   CLAIMED     DEVICE       HP      Virtual NullDVD
                      /dev/disk/disk2   /dev/rdisk/disk2
disk      3  64000/0xfa00/0x1  esdisk   CLAIMED     DEVICE       HP      Virtual LvDisk
                      /dev/disk/disk3      /dev/disk/disk3_p2   /dev/rdisk/disk3     /dev/rdisk/disk3_p2
                      /dev/disk/disk3_p1   /dev/disk/disk3_p3   /dev/rdisk/disk3_p1  /dev/rdisk/disk3_p3
disk      5  64000/0xfa00/0x5  esdisk   CLAIMED     DEVICE       HP      Virtual LvDisk
                      /dev/disk/disk5   /dev/rdisk/disk5
disk      7  64000/0xfa00/0x6  esdisk   CLAIMED     DEVICE       HP      Virtual LvDisk
                      /dev/disk/disk7   /dev/rdisk/disk7

En este caso el disco nuevo es el disk7

#pvcreate /dev/rdisk/disk7
Physical volume "/dev/rdisk/disk7" has been successfully created.
#vgextend vg01 /dev/disk/disk7
Volume group "vg01" has been successfully extended.
Volume Group configuration for /dev/vg01 has been saved in /etc/lvmconf/vg01.conf

Para verificar y chequear el estado del VG corremos un vgdisplay

<root@test2:/dev>vgdisplay vg01
--- Volume groups ---
VG Name                     /dev/vg01
VG Write Access             read/write
VG Status                   available
Max LV                      255
Cur LV                      0
Open LV                     0
Max PV                      16
Cur PV                      2
Act PV                      2
Max PE per PV               1016
VGDA                        4
PE Size (Mbytes)            4
Total PE                    998
Alloc PE                    0
Free PE                     998
Total PVG                   0
Total Spare PVs             0
Total Spare PVs in use      0
VG Version                  1.0
VG Max Size                 65024m
VG Max Extents              16256

Aqui vemos que la tanto la cantidad de discos como el espacio libre ha aumentado.

Algunas cajas de disco pueden extender el tamaño de la LUN,  HP-UX 11v3 tiene la capacidad de notar ese cambio y reflejarlo en las estructuras de LVM.

Extension dinamica de una LUN (Dynamic LUN Expansion DLE)

Para esto primero necesitamos que nos agranden la LUN que estamos usando. Luego que nos hayan extendido la LUN corremos un vgmodify de la siguiente forma

 vgmodify -a -E /dev/vg01

No hay comentarios:

Publicar un comentario