GNU/Linux >> Tutoriales Linux >  >> Linux

La guía completa para principiantes de LVM en Linux

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.

¿Qué es LVM en Linux?

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 /boot . 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á.

Componentes de LVM

Hay tres componentes principales para LVM:

  1. Volúmenes físicos
  2. Grupos de volumen
  3. Volúmenes lógicos

Aunque la lista consta de tres componentes, solo dos de ellos son contrapartes directas del sistema de partición. La siguiente tabla registra eso.

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?

  1. Volúmenes físicos
  2. Grupos de volumen
  3. 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.


Linux
  1. Una guía de la terminal de Linux para principiantes

  2. Presentamos la guía para la comunicación entre procesos en Linux

  3. Una guía para principiantes sobre los permisos de Linux

  4. Una guía para principiantes de firewalld en Linux

  5. Instalar Linux Mint 19 en VirtualBox:la guía completa

Guía completa para principiantes sobre la implementación de clústeres de Kubernetes en CentOS (y otros Linux)

Guía para principiantes de Syslogs en Linux

Una guía completa para instalar Tomcat en Linux

La guía completa para instalar MySQL en Ubuntu

Comandos de directorio de Linux:una guía completa

Cronjob - La guía completa de Cronjobs

    Sistema de partición de discos LVM
    Particiones Volúmenes lógicos
    Discos Grupos de volumen