Cómo expandir y reducir los volúmenes LVM

0
3118

Los comandos del Administrador de volúmenes lógicos en Linux son una de las herramientas más prácticas que he usado para agregar nuevos discos o expandir volúmenes existentes. Es fácil hacer esto sobre la marcha sin necesidad de tiempo de inactividad o reinicio, aunque siempre recomiendo hacer primero una copia de seguridad completa de todos los datos en cualquier volumen existente, así como tomar una instantánea de las máquinas virtuales involucradas.

En este tutorial, le mostraré cómo expandir y reducir un volumen usando LVM. Lea para aprender más.

Expandir un volumen usando LVM

Voy a recorrer una serie de pasos que realicé recientemente para expandir el volumen /home en un servidor que se configuró con 1 GB de espacio. Esto fue en un servidor de prueba, pero decidí expandir el volumen para agregar otros 10 GB solo para estar seguro.

Dado que usamos VMWare exclusivamente para nuestros servidores, este escenario tiene lugar en un entorno de vSphere, pero los pasos a seguir serían los mismos si agregara un disco a un servidor físico.

Primero, inicié sesión en el servidor, me convertí en root y luego examiné los discos presentes ejecutando:

lsblk

NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda                      8:0    0  200G  0 disk

├─sda1                   8:1    0    1G  0 part /boot

├─sda2                   8:2    0   49G  0 part

│ ├─rhel-root          253:0    0   20G  0 lvm  /

│ ├─rhel-swap          253:1    0    4G  0 lvm  [SWAP]

│ ├─rhel-home          253:3    0    1G  0 lvm  /home

│ ├─rhel-var           253:4    0   10G  0 lvm  /var

│ ├─rhel-var_log       253:5    0   20G  0 lvm  /var/log

│ ├─rhel-var_opt       253:6    0    3G  0 lvm  /var/opt

│ ├─rhel-var_tmp       253:7    0    3G  0 lvm  /var/tmp

│ ├─rhel-usr_local     253:8    0   10G  0 lvm  /usr/local

│ ├─rhel-var_log_audit 253:9    0 1012M  0 lvm  /var/log/audit

│ ├─rhel-opt           253:10   0   65G  0 lvm  /opt

│ ├─rhel-opt_fireeye   253:11   0    2G  0 lvm  /opt/fireeye

│ ├─rhel-besclient     253:12   0    8G  0 lvm  /var/opt/BESClient

│ ├─rhel-opt_encase    253:13   0    2G  0 lvm  /opt/encase

│ └─rhel-tmp           253:14   0   15G  0 lvm  /tmp

sdb                      8:16   0  850G  0 disk

└─appvg-vaplv          253:2    0  850G  0 lvm  /opt/vap

Revisé /etc/fstab y establecí que /dev/mapper/rhel-home es el punto de montaje de /home. Está en la partición sda2 en el disco físico sda y es un sistema de archivos XFS en lugar de EXT2/3/4.

Luego ejecuté vgs para mostrar los grupos de volumen:

VG    #PV #LV #SN Attr   VSize    VFree

appvg   1   1   0 wz--n- <850.00g     0

rhel    2  14   0 wz--n-  198.99g 35.00g

Esto estableció que el grupo de volumen con el que trabajar era rhel.

Luego inicié sesión en la consola de vSphere para agregar un nuevo disco siguiendo estos pasos:

  1. Haga clic con el botón derecho en la máquina virtual.
  2. Elija Editar configuración.
  3. Elija Agregar nuevo dispositivo.
  4. Elija Disco duro.
  5. Agregue un disco de 10 GB como se muestra ( Figura A) .

Figura A

Agregue un disco de 10 GB como se muestra.
Imagen: Imagen 1.

Tenga en cuenta que es posible expandir un volumen existente en ciertos casos, como si no hay instantáneas, luego agregue el espacio expandido a un grupo de volúmenes y asígnelo a un volumen lógico. Sin embargo, considero que esto es más arriesgado que agregar un nuevo disco directamente, ya que existe la posibilidad de que un error humano pueda afectar negativamente a los datos existentes. Es mucho más limpio trabajar con un disco nuevo y una partición asociada vacía. Al sistema operativo no le importa qué discos está usando para los volúmenes lógicos; esa es la belleza de LVM.

Luego ejecuté lsblk nuevamente:

NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda                      8:0    0  200G  0 disk

├─sda1                   8:1    0    1G  0 part /boot

├─sda2                   8:2    0   49G  0 part

│ ├─rhel-root          253:0    0   20G  0 lvm  /

│ ├─rhel-swap          253:1    0    4G  0 lvm  [SWAP]

│ ├─rhel-home          253:3    0    1G  0 lvm  /home

│ ├─rhel-var           253:4    0   10G  0 lvm  /var

│ ├─rhel-var_log       253:5    0   20G  0 lvm  /var/log

│ ├─rhel-var_opt       253:6    0    3G  0 lvm  /var/opt

│ ├─rhel-var_tmp       253:7    0    3G  0 lvm  /var/tmp

│ ├─rhel-usr_local     253:8    0   10G  0 lvm  /usr/local

│ ├─rhel-var_log_audit 253:9    0 1012M  0 lvm  /var/log/audit

│ ├─rhel-opt           253:10   0   65G  0 lvm  /opt

│ ├─rhel-opt_fireeye   253:11   0    2G  0 lvm  /opt/fireeye

│ ├─rhel-besclient     253:12   0    8G  0 lvm  /var/opt/BESClient

│ ├─rhel-opt_encase    253:13   0    2G  0 lvm  /opt/encase

│ └─rhel-tmp           253:14   0   15G  0 lvm  /tmp

sdb                      8:16   0  850G  0 disk

└─appvg-vaplv          253:2    0  850G  0 lvm  /opt/vap

sdc                      8:32   0   10G  0 disk

Aquí vemos el nuevo disco de 10 GB agregado como sdc.

Luego ejecuté fdisk para agregar una partición primaria al disco para que el sistema de archivos lo reconociera:

fdisk -u -c /dev/sdc

Presioné n para nueva partición, p para primaria, presioné enter dos veces para confirmar los valores predeterminados y luego presioné w para escribir los cambios, de la siguiente manera:

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

Device does not contain a recognized partition table

Building a new DOS disklabel with disk identifier 0xf9417ab7.

Command (m for help): 

Presioné n para crear una nueva partición.

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): 

Presioné p para crear una partición primaria.

Partition number 

(1-4, default 1):

Presioné enter para aceptar el valor predeterminado de 1.

First sector (2048-20971519, default 2048):

Presioné enter para aceptar el valor predeterminado de 2048.

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):

Presioné enter para aceptar el valor predeterminado de 20971519.

Using default value 20971519

Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): 

Presioné w para escribir los cambios.

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

El siguiente paso fue crear el volumen físico a partir de la nueva partición ejecutando:

pvcreate /dev/sdc1

Physical volume "/dev/sdc1" successfully created.

Luego amplié el grupo de volúmenes rhel para incluir la nueva partición:

vgextend rhel /dev/sdc1

Volume group "rhel" successfully extended 

Ejecutar vgs nuevamente confirmó la adición de 10 GB:

VG    #PV #LV #SN Attr   VSize    VFree

appvg   1   1   0 wz--n- <850.00g     0

rhel    3  14   0 wz--n- <208.99g 45.00g

La extensión del volumen lógico vino después:

lvextend -l 100%GRATIS /dev/mapper/rhel-home

También puede usar lvextend -r -L +10G /dev/mapper/rootvg-rhel_home para simplemente agregar los 10 GB de espacio si no desea otorgar la cantidad total a un volumen lógico determinado.

En mi ejemplo, se devolvió lo siguiente:
Size of logical volume rhel/home changed from 1.00 GiB (256 extents) to 11.00 GiB (2816 extents).

Logical volume rhel/home successfully resized.
El último paso fue hacer crecer el sistema de archivos usando este comando:

xfs_growfs /dev/mapper/rhel-inicio

meta-data=/dev/mapper/rhel-home  isize=512    agcount=4, agsize=65536 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0 spinodes=0

data     =                       bsize=4096   blocks=262144, 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 262144 to 2883584

Ejecutar lsblk nuevamente confirmó que el volumen de /home ahora es de 11 GB:

NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda                      8:0    0  200G  0 disk

├─sda1                   8:1    0    1G  0 part /boot

├─sda2                   8:2    0   49G  0 part

│ ├─rhel-root          253:0    0   20G  0 lvm  /

│ ├─rhel-swap          253:1    0    4G  0 lvm  [SWAP]

│ ├─rhel-home          253:3    0   11G  0 lvm  /home

│ ├─rhel-var           253:4    0   10G  0 lvm  /var

│ ├─rhel-var_log       253:5    0   20G  0 lvm  /var/log

│ ├─rhel-var_opt       253:6    0    3G  0 lvm  /var/opt

│ ├─rhel-var_tmp       253:7    0    3G  0 lvm  /var/tmp

│ ├─rhel-usr_local     253:8    0   10G  0 lvm  /usr/local

│ ├─rhel-var_log_audit 253:9    0 1012M  0 lvm  /var/log/audit

│ ├─rhel-opt           253:10   0   65G  0 lvm  /opt

│ ├─rhel-opt_fireeye   253:11   0    2G  0 lvm  /opt/fireeye

│ ├─rhel-besclient     253:12   0    8G  0 lvm  /var/opt/BESClient

│ ├─rhel-opt_encase    253:13   0    2G  0 lvm  /opt/encase

│ └─rhel-tmp           253:14   0   15G  0 lvm  /tmp

sdb                      8:16   0  850G  0 disk

└─appvg-vaplv          253:2    0  850G  0 lvm  /opt/vap

sdc                      8:32   0   10G  0 disk

└─sdc1                   8:33   0   10G  0 part

  └─rhel-home          253:3    0   10G  0 lvm  /home

Reducir un volumen usando LVM

La reducción de un volumen es completamente diferente en comparación con la expansión de un volumen. Hay algunas consideraciones en juego.

Los sistemas de archivos XFS no se pueden reducir; la única solución es hacer una copia de seguridad de los datos, eliminar el volumen, crear y configurar un volumen más pequeño y restaurar los datos en él.

Los sistemas de archivos EXT2/EXT3/EXT4 se pueden reducir, por el contrario, pero también hay enredos de VMWare cuando se trata de reducir los discos. Las instantáneas pueden interferir con el proceso, lo que requiere que se eliminen, y los discos con aprovisionamiento grueso pueden ser difíciles de reducir . VMWare proporciona un buen artículo de KB aquí que implica Vmware Converter y/o el comando vmkfstools.

A los fines de este artículo de LVM, me centraré en cómo se puede reducir un volumen EXT2/3/4, suponiendo que el tamaño del disco VMWare se haya reducido con éxito, o suponiendo que desea mantener el tamaño del disco VMWare tal como está y asignar el espacio a otro volumen lógico.

Reducir un volumen raíz va a ser la operación más complicada. Ese es el volumen lógico montado en /, y dado que este proceso requiere desmontar un volumen para reducirlo, eso no es posible. Debe iniciar desde un Live CD desde el cual el sistema operativo no se está ejecutando. Es posible que deba ejecutar vgchange -ay para que el Live CD reconozca los volúmenes lógicos y pueda continuar.

Reducir un volumen sin raíz es mucho más limpio; en este caso, para que coincida con los ejemplos que se muestran arriba, ejecutaría umount /home para continuar.

Los siguientes pasos ahora deberían aplicarse a un volumen raíz o no raíz.

Ejecute una verificación del sistema de archivos en el volumen LVM para reducir el riesgo de corrupción de datos:

e2fsck -fy /dev/mapper/rhel-inicio

El indicador -f obliga a que la verificación continúe incluso si el sistema de archivos parece estar libre de problemas, y la opción -y responde afirmativamente a todas las preguntas.

El siguiente comando reducirá el volumen lógico /home de 11 GB a 5 GB de tamaño. Tenga en cuenta que debe tener suficiente espacio libre para realizar esto:

resize2fs /dev/mapper/rhel-home 5G

Ahora puede reducir el tamaño del volumen lógico con el comando lvreduce.

Para reducir un volumen lógico al tamaño deseado, use el indicador -L y luego especifique el tamaño deseado:

lvreduce -L 5G /dev/mapper/rhel-home

Para reducir un volumen lógico en un tamaño determinado, use el indicador -L y un guión delante del tamaño deseado:

lvreduce -L -5G /dev/mapper/rhel-home

Una vez que ejecute este comando, se le pedirá que confirme respondiendo ‘y’ y presionando enter. Ahora necesita ejecutar resize2fs en el volumen como se muestra:

resize2fs /dev/mapper/rhel-inicio

A continuación, debe montar el volumen. Si esto implicó un volumen raíz, simplemente reinicie el sistema para cargar el sistema operativo Linux principal. Si es un volumen no raíz, ejecute mount -a, asumiendo que tiene la configuración configurada en /etc/fstab; de lo contrario, especifique el volumen lógico y dónde montarlo como se muestra:

montar /dev/mapper/rhel-home /home

Finalmente, verifique el espacio del volumen con el comando df para confirmar que se ha reducido como se esperaba. También recomiendo ejecutar otra verificación de salud del sistema de archivos con este comando:

e2fsck -fy /dev/mapper/rhel-inicio

Un framework útil para configurar discos

Trabajar con LVM para realizar operaciones de disco y volumen es rápido, fácil y confiable. Realicé acciones de administración de discos sobre la marcha y nunca experimenté un problema técnico y mucho menos un bloqueo del sistema operativo o pérdida de datos.

Para obtener más información sobre LVM, consulte la Guía completa para principiantes de LVM de linuxhandbook.com.