Esta es una guía completa para principiantes sobre LVM (Administración de volúmenes lógicos) en Linux.
En este tutorial, aprenderá el concepto de LVM, sus componentes y por qué debería usarlo.
No me limitaré solo a la explicación teórica. También mostraré ejemplos prácticos para crear y administrar LVM en Linux.
En resumen, le daré toda la información necesaria para comenzar a trabajar con LVM en el mundo real.
LVM significa Gestión de volumen lógico. Este es un método alternativo para administrar los sistemas de almacenamiento que el tradicional basado en particiones. En LVM, en lugar de crear particiones, crea volúmenes lógicos y luego puede montar esos volúmenes en su sistema de archivos con la misma facilidad que lo haría con una partición de disco.
Una excepción a la declaración anterior es que no puede usar volúmenes lógicos para
. Esto se debe a que GRUB (el cargador de arranque más común para Linux) no puede leer volúmenes lógicos. La conocida alternativa a GRUB, systemd-boot, por otro lado, solo lee sistemas de archivos vfat, por lo que tampoco funcionará.
Aunque la lista consta de tres componentes, solo dos de ellos son contrapartes directas del sistema de partición. La siguiente tabla registra eso.
Sistema de partición de discos | LVM |
Particiones | Volúmenes lógicos |
Discos | Grupos de volumen |
Los volúmenes físicos no tienen ninguna contrapartida directa, pero hablaré de eso pronto.
¿Por qué usar LVM?
La principal ventaja de LVM es lo fácil que es cambiar el tamaño de un volumen o grupo de volúmenes. Abstrae todas las partes desagradables (particiones, discos en bruto) y nos deja con un grupo de almacenamiento central para trabajar.
Si alguna vez experimentó el horror de cambiar el tamaño de la partición, querrá usar LVM.
Preparación de laboratorio para prácticas
Este artículo no es solo teoría. Mostraré ejemplos de comandos reales a lo largo del camino y la mejor manera de aprender algo es trabajar con él, de forma práctica. Para eso, te recomiendo que uses una máquina virtual.
Para ayudarlo con eso, ya he preparado un Vagrantfile simple que puede usar para hacer girar una máquina virtual muy liviana con VirtualBox. Esta máquina virtual tiene tres discos adicionales que usted y yo podemos usar para los ejemplos de comandos a continuación.
Cree un directorio en algún lugar de su sistema de archivos y guarde lo siguiente en un archivo llamado Vagrantfile
.
Vagrant.configure "2" do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "lvm"
3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"}
config.vm.provider :virtualbox do |machine|
machine.memory = 1024
machine.cpus = 1
machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
# vi: set ft=ruby
O si lo desea, puede usar wget
o curl
para descargar el archivo de mi esencia.
wget https://gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile
Asegúrate de tener Vagrant y VirtualBox instalados.
Una vez que el Vagrantfile esté en su lugar, configure la variable de entorno VAGRANT_EXPERIMENTAL
a disks
.
export VAGRANT_EXPERIMENTAL=disks
Finalmente, inicie la máquina virtual usando el siguiente comando (asegúrese de estar en el mismo directorio que el Vagrantfile):
vagrant up
Una vez que la máquina se está ejecutando, puede usar vagrant ssh
a SSH y ejecute los comandos de ejemplo de este artículo.
Recuerda ejecutar vagrant destroy
desde el mismo directorio que el Vagrantfile una vez que haya terminado.
Instalando LVM
Antes de que pueda usar cualquiera de los comandos, debe instalar lvm2
paquete. Esto debería estar preinstalado en la mayoría de las distribuciones modernas, especialmente las basadas en Ubuntu. Pero aún así, tenía que mencionar esto antes de seguir adelante. Para instalar lvm2
, consulte la documentación de su distribución.
Práctica con LVM
Para este recorrido práctico, construí una máquina virtual con almacenamiento raíz de 40 G (sin importancia) y tres discos externos de tamaño 5 G. El tamaño de estos discos es arbitrario.
[email protected]:~$ lsblk -o name,size,fstype
NAME SIZE FSTYPE
loop0 55.5M squashfs
loop1 32.3M squashfs
loop2 70.4M squashfs
sda 40G
└─sda1 40G ext4
sdb 10M iso9660
sdc 5G
sdd 5G
sde 5G
Como pueden ver los dispositivos que voy a usar son sdc
, sdd
y sde
.
¿Recuerdas que te dije que LVM tiene tres componentes principales?
- Volúmenes físicos
- Grupos de volumen
- Volúmenes lógicos
Es hora de verlos uno por uno.
1. Volúmenes físicos
Lo primero que debe saber sobre LVM son los volúmenes físicos. Los volúmenes físicos son las materias primas o los bloques de construcción que se utilizan para lograr la abstracción que son los volúmenes lógicos. En palabras más simples, los volúmenes físicos son la unidad lógica de un sistema LVM.
Un volumen físico puede ser cualquier cosa, un disco sin formato o una partición de disco. Crear e inicializar un volumen físico es lo mismo. Ambos significan que solo está preparando los componentes básicos (es decir, particiones, discos) para operaciones posteriores. Esto quedará más claro en un momento.
Utilidades: Todas las utilidades que gestionan volúmenes físicos comienzan con las letras pvs
para P V física olumen P.ej. pvcreate
, pvchange
, pvs
, pvdisplay
etc.
Todo lo que se menciona después de este cuadro es destructivo, a menos que esté utilizando un entorno virtual o un servidor en la nube donde no se almacenan datos importantes o se puede acceder por accidente, le aconsejo que se detenga ahora mismo. Creando volúmenes físicos
Puede crear un volumen físico utilizando un disco sin particionar sin procesar o las propias particiones.
Como mencioné anteriormente, tengo tres unidades externas conectadas a mi máquina virtual, comencemos con /dev/sdc
.
Usamos el pvcreate
comando para crear un volumen físico. Simplemente pásele el nombre del dispositivo y nada más.
sudo pvcreate /dev/sdc
Deberías ver algo como esto:-
[email protected]:~$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
A continuación, particionaré /dev/sdd
en partes iguales. Usa cualquier herramienta, cfdisk
, parted
, fdisk
etc, hay muchas herramientas para lograr este trabajo.
[email protected]:~$ lsblk -o name,size,fstype | grep sdd
sdd 5G
├─sdd1 2.5G
└─sdd2 2.5G
Ahora puede crear rápidamente dos volúmenes físicos más a partir de estas dos particiones en un solo paso, pase ambos dispositivos a pvcreate
inmediatamente.
sudo pvcreate /dev/sdd1 /dev/sdd2
Echa un vistazo:-
[email protected]:~$ sudo pvcreate /dev/sdd1 /dev/sdd2
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Listar los volúmenes físicos disponibles
Hay tres comandos que puede usar para obtener la lista de los volúmenes físicos disponibles, pvscan
, pvs
y pvdisplay
. Por lo general, no necesita pasar nada a estos comandos.
pvscan
:-
[email protected]:~$ sudo pvscan
PV /dev/sdc lvm2 [5.00 GiB]
PV /dev/sdd1 lvm2 [2.50 GiB]
PV /dev/sdd2 lvm2 [<2.50 GiB]
Total: 3 [<10.00 GiB] / in use: 0 [0 ] / in no VG: 3 [<10.00 GiB]
pvs
:-
[email protected]:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 lvm2 --- <2.50g <2.50g
pvdisplay
:-
[email protected]:~$ sudo pvdisplay
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ
"/dev/sdd1" is a new physical volume of "2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS
"/dev/sdd2" is a new physical volume of "<2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd2
VG Name
PV Size <2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB
Como puede ver, además de enumerar los volúmenes físicos, estos comandos también le brindan mucha más información sobre estos volúmenes.
Eliminar un volumen físico
Puede eliminar un volumen físico con pvremove
dominio. Al igual que pvcreate
, simplemente pase los dispositivos (que se inicializan como volúmenes físicos) a pvremove
comando.
Como demostración, eliminaré /dev/sdd2
de la lista.
sudo pvremove /dev/sdd2
La salida debería ser idéntica a esta:-
[email protected]:~$ sudo pvremove /dev/sdd2
Labels on physical volume "/dev/sdd2" successfully wiped.
Ahora liste los volúmenes físicos con sudo pvs
[email protected]:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2
ya no está aquí.
2. Grupos de volumen
Los grupos de volúmenes son colecciones de volúmenes físicos. Es el siguiente nivel de abstracción en LVM. Los grupos de volúmenes son el conjunto de almacenamiento que combina la capacidad de almacenamiento de varios dispositivos de almacenamiento sin formato.
Utilidades: Todos los nombres de utilidades de grupos de volúmenes comienzan con vg
, significa V volumen G grupo, p. vgcreate
, vgs
, vgrename
etc.
Creación de grupos de volúmenes
Los grupos de volúmenes se crean utilizando vgcreate
dominio. El primer argumento de vgcreate
es el nombre que desea dar a este grupo de volúmenes, y el resto son la lista de los volúmenes físicos que van a respaldar el grupo de almacenamiento.
sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Ejemplo:-
[email protected]:~$ sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Volume group "lvm_tutorial" successfully created
Listar los grupos de volumen
La lista de grupos de volúmenes es similar a la lista de volúmenes físicos, puede usar diferentes comandos con diferentes niveles de detalle, vgdisplay
, vgscan
y vgs
.
Personalmente prefiero las vgs
comando, sudo vgs
[email protected]:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
lvm_tutorial 2 0 0 wz--n- 7.49g 7.49g
vgscan
:-
[email protected]:~$ sudo vgscan
Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay
:-
[email protected]:~$ sudo vgdisplay
--- Volume group ---
VG Name lvm_tutorial
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 7.49 GiB
PE Size 4.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / 7.49 GiB
VG UUID LYVE9P-vY0G-OAW6-an8q-yfBx-rrB1-YU61m1
Lista de los volúmenes físicos adjuntos a un grupo de volúmenes
Puede enumerar todos los volúmenes físicos que están conectados a un grupo de volúmenes específico utilizando el siguiente comando:-
sudo pvdisplay -S vgname=<volume_group_name> -C -o pv_name
Ejemplo:-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
También puede obtener el recuento de volúmenes físicos.
sudo vgdisplay -S vgname=<volume_group_name> -C -o pv_count
Ejemplo:-
[email protected]:~$ sudo vgdisplay -S vgname=lvm_tutorial -C -o pv_count
#PV
3
Ampliar un grupo de volúmenes
Ampliar un grupo de volúmenes significa agregar volúmenes físicos adicionales a un grupo de volúmenes. Para hacerlo, el vgextend
se utiliza el comando. La sintaxis es simple:-
vgextend <volume_group> <physical_volume1> <physical_volume2> ....
Ampliemos nuestro lvm_tutorial
volumen por /dev/sdd2
.
sudo vgextend lvm_tutorial /dev/sdd2
Concéntrese en la salida:-
[email protected]:~$ sudo vgextend lvm_tutorial /dev/sdd2
Physical volume "/dev/sdd2" successfully created.
Volume group "lvm_tutorial" successfully extended
En la sección de volumen físico terminamos eliminando /dev/sdd2
como un volumen físico, pero una partición o disco sin procesar debe inicializarse como un volumen físico; de lo contrario, LVM no podrá administrarlo como parte de un grupo de volúmenes. Entonces vgextend
prepara /dev/sdd2
antes de agregarlo al grupo de volumen.
Ahora enumere los volúmenes físicos adjuntos a este grupo de volúmenes, solo para estar seguro.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
Salida:-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
/dev/sdd2
/dev/sdd2
ahora está en la lista como se esperaba.
Reduciendo un grupo de volumen
Al igual que ampliar un grupo de volúmenes significa agregar otro volumen físico, reducirlo significa eliminar uno o más volúmenes físicos.
Usamos el vgreduce
comando para hacer esto. La sintaxis general es la siguiente:-
vgreduce <vgname> <physical_volume1> <physical_volume2> ....
Eliminemos los volúmenes físicos /dev/sdc
y /dev/sdd1
.
sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Ejemplo:-
[email protected]:~$ sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Removed "/dev/sdc" from volume group "lvm_tutorial"
Removed "/dev/sdd1" from volume group "lvm_tutorial"
Si un grupo de volúmenes tiene volúmenes lógicos activos, no podrá reducirlo de esta manera.
Vuelva a enumerar los volúmenes físicos.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
Salida:-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdd2
Esos dos volúmenes físicos ya no están.
Ahora, por el bien del resto de este artículo, vuelva a agregar esos dos volúmenes físicos.
sudo vgextend lvm_tutorial /dev/sdc /dev/sdd1
Eliminación de un grupo de volúmenes
Puede eliminar un volumen lógico con vgremove
comando.
sudo vgremove lvm_tutorial
No ejecute este comando en este momento, de lo contrario tendría que volver a crear el grupo de volúmenes. Si desea probarlo, ejecútelo al final de este artículo.
3. Volúmenes lógicos
Esto es con lo que vas a trabajar principalmente. Un volumen lógico es como una partición, pero en lugar de ubicarse sobre un disco sin formato, se ubica sobre un grupo de volúmenes. Puedes,
- Formatee un volumen lógico con el sistema de archivos que desee.
- Móntelo en cualquier parte del sistema de archivos que desee.
En esta sección aprenderás,
- Cómo crear volúmenes lógicos.
- Operaciones comunes en un volumen lógico.
- Cambiar el tamaño de un volumen lógico.
- Eliminar un volumen lógico.
Utilidades: Todos los nombres de utilidades de grupos de volúmenes comienzan con lv
, significa L V lógica olumen p.ej. lvcreate
, lvs
, lvreduce
etc.vgcreate
, vgs
, vgrename
etc.
Creación de volúmenes lógicos
Los volúmenes lógicos se crean usando el lvcreate
dominio. La sintaxis comúnmente utilizada es la siguiente,
sudo lvcreate -L <size> -n <lvname> <vgname>
Déjame desglosarlo por ti:-
- El
-L
La opción es para el tamaño del nuevo volumen lógico, puede usar cualquier número entero con "GB", "MB" o "KB" al final. P.ej. "1 GB".
- El
-n
La opción es para nombrar este volumen lógico.
- Finalmente, debe pasarle el nombre del grupo de volúmenes del que formará parte este volumen lógico. Entonces, mientras proporciona el volumen lógico con un tamaño, asegúrese de que el grupo de volúmenes tenga el espacio disponible.
Ejecute el siguiente comando en la máquina virtual:-
sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Salida de ejemplo:-
[email protected]:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Logical volume "lv1" created.
Operaciones comunes en un volumen lógico
Como dije anteriormente, puede colocar un sistema de archivos en un volumen lógico y montarlo en cualquier parte del sistema de archivos.
Una vez creado, puede encontrar el volumen lógico en /dev/<vgname>/<lvname>
sendero. Por ejemplo, en nuestro caso, el volumen estará en /dev/lvm_tutorial/lv1
.
[email protected]:~$ ls -l /dev/lvm_tutorial/lv1
lrwxrwxrwx 1 root root 7 May 17 02:09 /dev/lvm_tutorial/lv1 -> ../dm-0
Ahora puedes usarlo como cualquier partición. Formatéalo con ext4,
sudo mkfs.ext4 /dev/lvm_tutorial/lv1
Móntelo en algún lugar de su estructura de directorios actual como /mnt
,
sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt
Redimensionar un volumen lógico
Puede extender un volumen lógico usando lvextend
comando y reducir su tamaño usando lvreduce
dominio. O puede usar el comando único lvresize
para realizar ambas tareas.
Primero, veamos si al grupo de volúmenes le queda espacio o no.
sudo vgs -S vgname=lvm_tutorial -o vg_free
Salida:-
[email protected]:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
VFree
<4.99g
De acuerdo con la salida, me queda algo de espacio, así que aumentemos el tamaño del volumen en 2 GB.
Recuerde que el volumen lógico todavía está montado en /mnt
.
[email protected]:~$ mount | grep '/mnt'
/dev/mapper/lvm_tutorial-lv1 on /mnt type ext4 (rw,relatime)
Use el siguiente comando para cambiar el tamaño del volumen:-
sudo lvresize -L +2GB lvm_tutorial/lv1
La sintaxis general es algo como esto:-
lvresize -L [+|-][Size] <vgname>/<lvname>
El símbolo + o - después de -L
depende de si está intentando aumentar el tamaño del volumen o disminuirlo respectivamente.
Una vez que el tamaño del volumen ha aumentado, también se debe cambiar el tamaño del sistema de archivos. Para ext4, el comando a usar es resize2fs
.
sudo resize2fs /dev/lvm_tutorial/lv1
Salida:-
[email protected]:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long.
No todos los sistemas de archivos admiten el cambio de tamaño en caliente, Ext4 y XFS son algunos de los admitidos. Te recomiendo que te quedes con estos.
Reducir un volumen lógico es una tarea un poco más complicada y no voy a hablar de eso aquí en este artículo. Estoy reduciendo el tamaño de este volumen en 1 GB.
Eliminar un volumen lógico
Eliminas un volumen lógico con lvremove
dominio. La sintaxis del comando es la siguiente:-
lvremove <vgname>/<lvname>
Ejecute este comando en la máquina virtual:-
sudo lvremove lvm_tutorial/lv1
Salida:-
[email protected]:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
Logical volume "lv1" successfully removed
Hay una multitud de otras operaciones que se pueden realizar en volúmenes lógicos, volúmenes físicos y grupos de volúmenes, pero no es posible escribir todo eso en un solo artículo.
Te he dejado un disco más /dev/sde
en la máquina virtual. Úselo, practique algunos de los comandos de este artículo, cree un nuevo grupo de volúmenes, amplíe uno existente, simplemente practique.
Espero que este artículo te haya resultado útil. Si deseas ver más sobre esto en el futuro, házmelo saber en la sección de comentarios a continuación.