Porque NO usar particiones para Luns o discos virtuales exclusivos para datos en RHEL/CentOS/SL
El problema al momento de querer extender un disco virtual o lun de datos es que por mas que el sistema operativo reconozca el tamaño nuevo del disco, al momento de querer utilizar ese espacio nuevo es necesario extender la particion, o de utlima crear una particion nueva. Esto requiere reinicios en caso de que el disco se este utilizando, el reinicio es para que el S.O. vuelva a leer la tabla de particiones.
La forma de evitar tener que reiniciar cada vez que querramos extender nuestra LUN o disco virtual es implementando LVM sobre el disco directo sin particion
Primero crearemos el Volume Group de forma directa sobre la LUN o disco virtual
En este ejemplo lo haremos con un disco virtual exclusivo para datos de 10GB que es el /dev/sdb
Lo primero que tenemos que hacer es verificar que el S.O. vea el disco
# fdisk -l /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Verificamos que el disco este vacio
# dd if=/dev/sdb bs=512 count=2 |strings
2+0 registros leídos
2+0 registros escritos
1024 bytes (1,0 kB) copiados, 0,00250696 s, 408 kB/s
No nos muestra nada por lo tanto esta vacio
Formateamos el disco completo como Physical Volume
# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
Creamos un Volume Group
# vgcreate testvg /dev/sdb
Volume group "testvg" successfully created
Luego creamos un Logical Volume
de pruebas con 8G
# lvcreate -n testlv -L8G testvg
Logical volume "testlv" created.
Creamos un FS XFS sobre el volumen y lo montamos en el /mnt
# mkfs.xfs /dev/testvg/testlv
# mount /dev/testvg/testlv /mnt
# df -h /mnt/
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/testvg-testlv 8,0G 33M 8,0G 1% /mnt
Ahora ampliamos el disco desde la consola de administracion de VMWARE o el virtualizador que usemos (esto no lo voy a mostrar aca)
Es necesario re-escanear el disco desde el S.O. para que este vea el nuevo tamaño
Esto lo hacemos con el siguiente comando:
echo 1 > /sys/class/block/#dispositivo/device/rescan
Donde #dispositivo es el nombre de nuestro disco en cuestion, en este caso lo haremos sobre la sda.
echo 1 > /sys/class/block/sdb/device/rescan
Hecho esto el S.O. ya deberia reconocer el nuevo tamaño, por ende podemos ampliar nuestra particion
# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Luego debemos extender el Physical Volume
# pvresize /dev/sdb
Physical volume "/dev/sdb" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
# vgs testvg
VG #PV #LV #SN Attr VSize VFree
testvg 1 1 0 wz--n- 20,00g 12,00g
Con el comando vgs
verificamos que el Volume Group
reconocio el nuevo espacio. Luego podemos extender nuestro Logical Volume
para que llegue a los 18G
# lvresize -L18G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 8,00 GiB (2048 extents) to 18,00 GiB (4608 extents).
Logical volume testlv successfully resized.
Con esto ya podemos extender nuestro FileSystem
# xfs_growfs /dev/testvg/testlv
meta-data=/dev/mapper/testvg-testlv isize=256 agcount=4, agsize=524288 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=2097152, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2097152 to 4718592
# df -h /dev/testvg/testlv
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/mapper/testvg-testlv 18G 33M 18G 1% /mnt
Con esto evitamos la necesidad de reiniciar nuestros equipos para extender nuestros discos virtuales o LUNs
Uno de los puntos mas importantes es detectar si los discos contienen datos antes de formatearlos.
Detectar si un disco esta siendo utilizado
Para detectar si un disco esta siendo utilizado podemos utilizar el comando dd
de la siguiente forma:
dd if=/dev/sdb bs=512 count=2 |strings
Si el disco esta vacio deberia mostrar algo parecido a lo siguiente
# dd if=/dev/sdb bs=512 count=2 |strings
2+0 registros leídos
2+0 registros escritos
1024 bytes (1,0 kB) copiados, 0,00250696 s, 408 kB/s
En caso que tenga LVM deberia de mostrar algo parecido a lo siguiente:
# dd if=/dev/sdb bs=512 count=2 | strings
2+0 records in
2+0 records out
LABELONE
LVM2 0016hxjXHBW8Bm1xLnQZoEBDoKzWi0x8IRG
1024 bytes (1.0 kB) copied, 7.9217e-05 s, 12.9 MB/s