Como extender volumenes logicos y sistema de archivos de forma facil

Este objetivo lo podemos vilcular al tema principal Configurar el almacenamiento local. Ya que aqui aprenderemos como redimencionar un systema de archivos sin interrupcion y lo mas importante sin perder datos. Es valido y muy importante aclarar que el sistema de archivos “xfs” no puede ser reducido de ninguna manera. Para mas referencia puede consultar el siguiente articulo en donde explican este detalle:

Enlace en EN: How to reduce XFS file system

Si no tienen acceso a este documento, aqui les dejo un resumen del mismo:

Environment
1. Red Hat Enterprise Linux 5, 6, 7
2. LVM
3. XFS (Add-on as per RHEL5 and 6 / part of RHEL7)

Issue
1. How to reduce the size a partition formatted with xfs filesystem?
2. How can I reduce the size a LVM partition formatted with xfs filesystem?

Resolution
1. It is currently not possible to reduce the size of a partition or logical volume with the xfs filesystem. If you are interested in this functionality please contact Red Hat support and reference Red Hat bugzilla 1062667, and provide your use-case for needing XFS reduction / shrinking.
2. As a possible workaround in some environments, thin provisioned LVM volumes can be considered as an additional layer below the XFS filesystem.

Root Cause
While the XFS file systems can be grown while mounted, their size cannot be reduced at all.

En los siguientes ejemplos vamos a agregar un nuevo disco “sdb” al volumen de grupo “rhel”, en donde realizaremos todaos los ejercicios.

Para comenzar vamos a realizar los cambios pertinentes para tener nuestro entorno listo para comenzar:

[root@class2 ~]# vgextend rhel /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "rhel" successfully extended
[root@class2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 2 2 0 wz--n- 7.19g 1.20g
[root@class2 ~]#

Aqui lo que realizamos fue agregar el diso “sdb” al grupo, y como ven esto utilizando todo el espacio disponible. Usted puede solo agregar una particion del disco, pero para esto debe de crearla. Y como pueden ver tenemos 1.2G para realizar nuestra practica.

Pirmero vamos a extender el volumen logico root “/” el cual tiene un sistema de archivos “xfs” . Este cambio lo realizaremos de las dos formas. Y usted solo decide cual es mas facil para usted.

Procedimiento 1:
Primero vamos a verificar el espacio actual del volumen logico root, y entonces procederemos a extenderlo.

[root@class2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 5.29g
swap rhel -wi-ao---- 716.00m
[root@class2 ~]# lvextend /dev/rhel/root -L +200M -r -t
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Size of logical volume rhel/root changed from 5.29 GiB (1355 extents) to 5.49 GiB (1405 extents).
Logical volume rhel/root successfully resized.
[root@class2 ~]#

Aqui pueden ver el valor actual, y despues ejecute el comando que hace el trabajo sucio por nosotros. Si se percatan, agregue “-t” , lo que quiere decir “TEST MODE” y no realiza ningun cambio. Esto es para verificar si tenemos algun error en el comando. Tambien pueden ver que estoy extendiendo el volumen logico y sistema de archivos al mismo tiempo cuando utilizo la opcion “-r”. Noten tambien “+200M” , aqui estoy agregando solo 200M, si usted no especifica “+” entonces tendria un error, porque el sistema entenderia que quiere establecer como vamor absoluto 200M, lo cual no puede ser posible. Pero si especifica “-L 5.5G” entonces si, porque este seria el valor absoluto.

Despues de ejecutar el comando con “-t” y ver que no tenemos errores, pues ya podemos proceder con el cambio:

[root@class2 ~]# lvextend /dev/rhel/root -L +200M -r
Size of logical volume rhel/root changed from 5.29 GiB (1355 extents) to 5.49 GiB (1405 extents).
Logical volume rhel/root successfully resized.
meta-data=/dev/mapper/rhel-root isize=512 agcount=4, agsize=346880 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1387520, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
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 1387520 to 1438720
[root@class2 ~]#

Simple verdad, y sin interrupcion. Ahora como siempre, vamos a verificar:

[root@class2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 5.49g
swap rhel -wi-ao---- 716.00m
[root@class2 ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 5.5G 3.1G 2.5G 56% /
[root@class2 ~]#

De esta forma hemos extendido un volumen logico y sistema de archivos en solo un comando. Esto aplica tambien para sistema de archivos “ext3”, “ext4”.

Procedimiento 2:
Ahora vamos a hacer esto mismo pero en dos partes; primero extenderemos el volumen logico y despues el sistema de archivos utilizando el comando apropiado para el sistema de archivos “xfs”.

Para el ejemplo, agregaremos otros 200M.

[root@class2 ~]# lvextend /dev/rhel/root -L +200M -t
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Size of logical volume rhel/root changed from 5.49 GiB (1405 extents) to 5.68 GiB (1455 extents).
Logical volume rhel/root successfully resized.
[root@class2 ~]#

Como ven, no utilice la opcion “-r” porque solo estoy extendiendo el volumen logico. Ahora vamos a ejecutar el mismo comando pero sin “TEST MODE”

[root@class2 ~]# lvextend /dev/rhel/root -L +200M
Size of logical volume rhel/root changed from 5.49 GiB (1405 extents) to 5.68 GiB (1455 extents).
Logical volume rhel/root successfully resized.
[root@class2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 5.68g
swap rhel -wi-ao---- 716.00m
[root@class2 ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 5.5G 3.1G 2.5G 56% /
[root@class2 ~]#

Como pueden ver el volumen logico fue extendido como muestra la salida de “lvs”, pero el sistema de archivos aun no. Ahora vamos a extender el sistema de archivos utilizando una de las herramientas del sistema de archivos “xfs”

[root@class2 ~]# xfs_growfs /dev/rhel/root
meta-data=/dev/mapper/rhel-root isize=512 agcount=5, agsize=346880 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1438720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
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 1438720 to 1489920
[root@class2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- 5.68g
swap rhel -wi-ao---- 716.00m
[root@class2 ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 5.7G 3.1G 2.7G 54% /
[root@class2 ~]#

Con “xfs_growfs” logramos nuestro objetivo. Y ya pueden ver que el cambio quedo aplicado en nuestra verificacion.

Ahora queda de su parte decidir que procedimiento prefiere para extender sistemas de archivos “xfs”.

Ya aprendido como realizar cambios en “xfs”, vamos a realizar unos ejemplos con “ext4”. Aclaro que usted purde hacerlos con “ext3” si prefiere.

Para comenzar vamos a crea un nuevo volumen logico de 400M con el espacio remanente en el grupo, y vamos a crear el sistema de archivos y montarlo en /mnt/datos , y crearemos unos archivos y directorios.

[root@class2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 2 2 0 wz--n- 7.19g 828.00m
[root@class2 ~]# lvcreate -n datos1 rhel -L 400M
Logical volume "datos1" created.
[root@class2 ~]# mkfs.ext4 /dev/rhel/datos1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
102400 inodes, 409600 blocks
20480 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=34078720
50 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

[root@class2 ~]# mkdir /mnt/datos
[root@class2 ~]# blkid | grep datos
/dev/mapper/rhel-datos1: UUID="41007782-035f-4732-9272-b7c0b5a85fab" TYPE="ext4"
[root@class2 ~]# echo "UUID="41007782-035f-4732-9272-b7c0b5a85fab" /mnt/datos ext4 defaults 0 0" >> /etc/fstab
[root@class2 ~]# mount -a
[root@class2 ~]# df -h /mnt/datos
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-datos1 380M 2.3M 354M 1% /mnt/datos
[root@class2 ~]#
[root@class2 ~]# touch /mnt/datos/archivo{1..5} ; mkdir /mnt/datos/directorio{1..5}
[root@class2 ~]# ls -ls /mnt/datos/
total 27
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo1
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo2
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo3
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo4
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo5
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio1
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio2
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio3
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio4
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio5
12 drwx------. 2 root root 12288 Apr 25 08:54 lost+found
[root@class2 ~]#

Estos procedimientos no son nuevos para ustedes. Ahora bien vamos a extender el volumen logico y el sistema de archivos 200M.

[root@class2 ~]# lvextend /dev/rhel/datos1 -L +200M -r
Size of logical volume rhel/datos1 changed from 400.00 MiB (100 extents) to 600.00 MiB (150 extents).
Logical volume rhel/datos1 successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/rhel-datos1 is mounted on /mnt/datos; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 5
The filesystem on /dev/mapper/rhel-datos1 is now 614400 blocks long.

[root@class2 ~]# df -h /mnt/datos
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-datos1 574M 2.3M 539M 1% /mnt/datos
[root@class2 ~]#

Simple verdad. Ahora vamos areducir el volumen logico y el sistema de archivos. Este es el proceso critico ya que existen varias documentaciones de como lograrlo; algunas comentan sobre desmontar el sistema de archivos para poder realizar este procedimiento. Claro esta que como este sistema de archivos no es critico y no esta montado en /var por ejemplo, no tenemos que realizar tareas antes de realizar el cambio.

Otro punto importante es que quien en estos dias reduce un sistema de archivos. Es una tarea poco vista y poco profesional, ya que el espacio o como dicen “storage” tiene un costo bajo en el mercado. Pero vamos a ver como realizaiamos este cambio.

Vamos a reducir de 600M a 300M. Ojo los valores puede variar un poco dependiendo del sistema de archivos:

[root@class2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
datos1 rhel -wi-ao---- 600.00m
root rhel -wi-ao---- 5.68g
swap rhel -wi-ao---- 716.00m
[root@class2 ~]# df -h /mnt/datos
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-datos1 574M 2.3M 539M 1% /mnt/datos
[root@class2 ~]#

Aqui pueden realizar el comando en “TEST MODE” si prefieren.

[root@class2 ~]# lvreduce /dev/rhel/datos1 -L 300 -r -t
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Do you want to unmount "/mnt/datos"? [Y|n] y
Size of logical volume rhel/datos1 changed from 600.00 MiB (150 extents) to 300.00 MiB (75 extents).
Logical volume rhel/datos1 successfully resized.
[root@class2 ~]#

Tambien si prefieren, pueden especificar el valor “-L” con “-300M”, pero como sabemos cual valor queremos como absoluto no es necesario. Ahora es tiempo de comprobar si este procedimiento funciona de verdad.

[root@class2 ~]# lvreduce /dev/rhel/datos1 -L 300 -r
Do you want to unmount "/mnt/datos"? [Y|n] y
fsck from util-linux 2.23.2
/dev/mapper/rhel-datos1: 21/153600 files (0.0% non-contiguous), 29912/614400 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/rhel-datos1 to 307200 (1k) blocks.
The filesystem on /dev/mapper/rhel-datos1 is now 307200 blocks long.

Size of logical volume rhel/datos1 changed from 600.00 MiB (150 extents) to 300.00 MiB (75 extents).
Logical volume rhel/datos1 successfully resized.
[root@class2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
datos1 rhel -wi-ao---- 300.00m
root rhel -wi-ao---- 5.68g
swap rhel -wi-ao---- 716.00m
[root@class2 ~]# df -h /mnt/datos
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-datos1 283M 2.1M 263M 1% /mnt/datos
[root@class2 ~]# ls -ls /mnt/datos/
total 27
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo1
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo2
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo3
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo4
1 -rw-r--r--. 1 root root 0 Apr 25 08:57 archivo5
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio1
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio2
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio3
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio4
2 drwxr-xr-x. 2 root root 1024 Apr 25 08:57 directorio5
12 drwx------. 2 root root 12288 Apr 25 08:54 lost+found
[root@class2 ~]#

Sin complicaciones como pueden ver. Un procedimiento simple y rapido.

Ahora es tiempo que aplique estos conocimientos, pero muy importante que si no se siente seguro, que realice estos cambios en una maquina virtual.

Leave a Reply

Your email address will not be published. Required fields are marked *