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:
- Haga clic con el botón derecho en la máquina virtual.
- Elija Editar configuración.
- Elija Agregar nuevo dispositivo.
- Elija Disco duro.
- Agregue un disco de 10 GB como se muestra ( Figura A) .
Figura A
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.