Crear un volumen lógico en LVM y mover la carpeta var sobre Ubuntu 18.04 LTS

Publicado por P. Ruiz en

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 este motivo, 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 durante la instalación de Ubuntu Server 18.04 LTS y también cómo Añadir espacio de almacenamiento a volúmenes LVM en Ubuntu Server 18.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 (/).

Ya durante la instalación podríamos haber creado un volumen lógico independiente para /var pero, como no lo hicimos, hoy aprenderemos a realizar esta tarea a posteriori.

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 40G 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 40GB, 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).

Creamos el volumen lógico

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-001

Y para comprobar que todo ha sido correcto, podemos utilizar dos comandos:

  1. vgdisplay, que se encarga de mostrar todos los atributos de un grupo de volúmenes:

    sudo vgdisplay

    Constatamos que existen dos volúmenes lógicos

    Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-002
  2. lvdisplay, que nos permite consultar información concreta sobre cada uno de los volúmenes lógicos existentes.

    sudo lvdisplay

    Comprobamos que los datos son correctos.

    Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-003

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.

Volumen formateado.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-004

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.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-005

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

Creamos la carpeta /mnt/var.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-006

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

Ya tenemos el nuevo volumen accesible.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-007

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.

Escribimos, o copiamos, el comando y pulsamos la tecla Intro.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-008

… Poco después, la copia habrá terminado.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-009

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

Volumen desmontado.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-010

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

Identificamos el UUID del volumen var-lv.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-011

Ahora ya estamos listos para editar el archivo fstab. Por ejemplo, usando nano:

sudo nano /etc/fstab

Editamos el archivo fstab.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-012

Al momento tendremos el contenido del archivo en la pantalla

Así vemos los puntos de montaje actuales…

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-013

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=fded4539-6c03-4717-874e-d529eccb7918  /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 (como es lógico, 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 más alta).

Cuando hayamos terminado, pulsamos Ctrl + X para salir.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-014

Al salir, nano nos pregunta si queremos guardar los cambios. Lógicamente, la respuesta debe ser Yes ().

Pulsamos la tecla Y.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-015

Como última precaución, nano nos ofrece la posibilidad de cambiar el nombre del archivo, por si no queremos reescribirlo.

Como preferimos reescribirlo, pulsamos la tecla Intro.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-016

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.

Escribimos el comando y pulsamos la tecla Intro.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-017

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

Unos instantes después de pulsar la tecla Intro comenzará el reinicio.

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-018

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.

Comprobamos que la carpeta /var se encuentra montada en el lugar correcto

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-019

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.

Y con esto completamos el último paso…

Crear-un-volumen-logico-en-LVM-y-mover-la-carpeta-var-sobre-Ubuntu-1804-LTS-019

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.