Crear un volumen lógico LVM en Ubuntu Server 22.04 LTS y mover la carpeta ‘var’
En un ordenador de escritorio, o un ordenador que actúa como servidor para ofrecer un entrono de trabajo interactivo a diferentes usuario, la carpeta del sistema que puede necesitar una mayor capacidad de almacenamiento es /home. El motivo es que ahí es donde los usuarios guardan los archivos que forman sus respectivos perfiles.
Sin embargo, cuando el equipo ofrece otro tipo de servicios, como los servidores web, los servidores de bases de datos, etc., la carpeta que suele sufrir un mayor incremento en su ocupación suele ser /var. El motivo es que suele ser ahí donde la mayoría de los programas servidores almacenan sus datos. Por ejemplo, las bases de datos de MySQL suelen estar en /var/lib/mysql/ y las páginas web ofrecidas por Apache se encuentran, de forma predeterminada, en /var/www/html.
Por esta razón, cuando administramos un servidor que utiliza volúmenes lógicos, es frecuente crear un volumen independiente para /var, de modo que podamos administrar su espacio de almacenamiento de la forma más flexible posible.
En SomeBooks.es ya hemos explicado cómo configurar un volumen LVM al Instalar Ubuntu Server 22.04 LTS (Jammy Jellyfish) desde cero y también cómo Añadir espacio de almacenamiento a volúmenes LVM en Ubuntu Server 22.04 LTS. Sin embargo, como en el primer artículo seguimos la recomendación predeterminada de Ubuntu, creamos una estructura con una partición física para el arranque (/boot) y un único volumen lógico que contenía la raíz del sistema (/).
Para comprobarlo, basta con usar el comando vgdisplay:
sudo vgdisplay
Observamos que existe solo un volumen lógico y que tenemos un total de 31,5 GiB disponibles para asignar
Ya durante la instalación podríamos haber creado un volumen lógico independiente para /var pero, como no lo hicimos, hoy tenemos la excusa perfecta para aprender a realizar esta tarea a conposterioridad.
Así es que, si estás listo, comencemos…
Crear un nuevo volumen lógico en el grupo de volúmenes LVM
Para crear el volumen lógico que, más adelante, servirá para albergar la carpeta /var, usaremos el comando lvcreate con una sintaxis como esta:
sudo lvcreate -L 20G ubuntu-vg -n var-lv
Como puedes imaginar, el argumento -L nos permite indicar el tamaño inicial del volumen. En nuestro caso, serán 20GB, pero tú puedes adaptarla según las necesidades.
A continuación, incluimos el nombre del grupo de volúmenes (en nuestro caso ubuntu-vg) y el argumento -n para indicar el nombre del volumen nuevo (para nuestro ejemplo usaremos var-lv).
Y para comprobar que todo ha sido correcto, podemos utilizar dos comandos:
-
De nuevo vgdisplay, para constatar los cambios en el grupo de volúmenes:
sudo vgdisplay
-
lvdisplay, que nos permite consultar información concreta sobre cada uno de los volúmenes lógicos existentes.
sudo lvdisplay
Ahora que sabemos que el volumen lógico se ha creado satisfactoriamente, deberemos darle formato antes de poder utilizarlo. Algo tan sencillo como usar el siguiente comando:
sudo mkfs.ext4 /dev/ubuntu-vg/var-lv
Observa que el identificador del volumen coincide con el contenido de la línea LV Path de la imagen anterior.
Copiar la carpeta /var a su nueva ubicación
Antes de nada, debemos recordar que la carpeta /var contiene información que puede estar siendo accedida por cualquier servicio del sistema. Por lo tanto, lo primero será comprobar si algún proceso tiene abierto algún archivo en esta ubicación. Podemos conseguirlo con este comando:
lsof | grep /var
El comando lsof muestra los archivos abiertos por cualquier proceso. Combinándolo con grep, obtendríamos unicamente aquellos que tengan en su ruta el texto /var.
Como no obtenemos ninguna salida, no existe ningún proceso con estas características, lo que significa que podemos seguir adelante.
Si, en la imagen anterior, hubiésemos encontrado algún proceso, deberíamos detener su ejecución antes de continuar.
A continuación, creamos una carpeta donde montar el nuevo volumen. Por ejemplo, dentro de /mnt. Bastará con utilizar el comando mkdir, escribiendo algo parecido a esto:
sudo mkdir /mnt/var
Ya estamos listos para montar el volumen. Lo conseguimos con la orden mount seguida del nombre del volumen y de la ruta que actúa como punto de montaje:
sudo mount /dev/ubuntu-vg/var-lv /mnt/var
Ahora, copiamos sobre él todo el contenido de la carpeta /var original. En este caso usaremos el comando rsync:
sudo rsync -va /var/* /mnt/var
El argumento a nos permite preservar la estructura y los atributos que tenían los archivos originales. El argumento v muestra cada uno de los archivos copiados.
Una vez completada la copia, podemos volver a desmontar el volumen. Algo tan fácil como utilizar el comando umount seguido de la ruta de montaje:
sudo umount /mnt/var
Establecer el punto de montaje predeterminado de la carpeta /var
Ya estamos casi listos. Sólo nos falta decirle al sistema operativo que, ahora, la carpeta /var se encuentra en un lugar diferente.
Para lograrlo, sólo tenemos que modificar el archivo fstab, que es donde se leen los parámetros de montaje de dispositivos durante el arranque del sistema. Sin embargo, para completar la tarea necesitaremos conocer el UUID (Universally Unique IDentifier) del volumen nuevo, dato que podemos obtener con el comando blkid:
sudo blkid
Ahora ya estamos listos para editar el archivo fstab. Por ejemplo, usando nano:
sudo nano /etc/fstab
Al momento tendremos el contenido del archivo en la pantalla.
Para añadir un nuevo punto de montaje, solo hay que situarse al final del archivo y añadir una línea como esta:
UUID=30e90753-5fd6-4b4c-962c-41940025fa3e /var ext4 defaults 0 0
Como es lógico, deberás cambiar el valor UUID por el de tu volumen lógico. Recuerda que lo hemos obtenido más arriba con el comando blkid.
En cuanto al resto de opciones, debemos indicar la ruta donde se montará el dispositivo (en nuestro caso, indicaremos /var), el sistema de archivos que utiliza (ext4), las opciones de montaje (defaults representa las opciones predeterminadas), el valor 0, para que el programa dump (que se encarga de hacer copias de seguridad) ignore este dispositivo, y el segundo 0 para que fsck no compruebe el sistema de archivos (también podría ser 1 ó 2, siendo 1 la prioridad más alta).
Al salir, nano nos pregunta si queremos guardar los cambios. Lógicamente, la respuesta debe ser Yes (Sí).
Como última precaución, nano nos ofrece la posibilidad de cambiar el nombre del archivo, por si no queremos reescribirlo.
El último paso consistirá en cambiar el nombre de la carpeta /var actual, para evitar que aparezcan dos ubicaciones con el mismo nombre la próxima vez que reiniciemos (algo que produciría un error). También podríamos eliminarla pero, por cuestiones de seguridad, no lo haremos hasta que comprobemos que todo ha funcionado correctamente.
El comando que usaremos para cambiar el nombre de la carpeta será el siguiente:
sudo mv /var /var-old
Yo he elegido /var-old, pero tú puedes usar el nombre que prefieras.
Después de esto, estaremos listos para reiniciar el equipo y comprobar que todo funciona.
Reiniciar y limpiar
Reiniciar el equipo desde la consola es tan sencillo como usar el comando reboot:
sudo reboot
Si todo ha ido bien, cuando se complete el reinicio, el sistema nos volverá a pedir el nombre de usuario y la contraseña. Y no tendremos dificultad en iniciar sesión.
Después, para comprobar que los dispositivos se han montado de forma correcta, podemos usar el comando lsblk, que nos aporta información sobre los dispositivos de almacenamiento de bloques disponibles:
lsblk -fm
El argumento f nos ofrece información sobre los sistemas de archivos instalados y el argumento m nos informa de quién es su propietario, su tamaño, etc.
Es el momento de borrar los datos de la carpeta /var original (que ahora se llama /home-var) y la carpeta que creamos para montar de forma temporal el disco nuevo (/mnt/var). En ambos casos, recurriremos al comando rm:
sudo rm -R /mnt/var sudo rm -R /var-old
El argumento -R elimina, de forma recursiva, todo el contenido de lar carpetas antes de eliminar la propia carpeta.
Si has sufrido cualquier contratiempo, o algo no ha funcionado como esperabas, siempre puedes volver a editar el archivo /etc/fstab, borrar la línea que creaste, recuperar el nombre original de la carpeta /var-old y reiniciar el equipo.
Y esto es todo por el momento. Espero que te resulte útil.