Montaje de unidades en sistemas con systemd y fstab.

El montaje en los sistemas tipo RedHat 6.x se basaba en la manipulación del archivo /etc/fstab; sin embargo, desde la versión 7 systemd comparte, de cierta manera, la responsabilidad de la administración de los montajes. En mi caso, aprendí esto de la manera que menos olvidaré: dejé un servidor sin iniciar.

Al principio es un poco complicado saber que las reglas cambiaron y cómo debemos adaptarnos a tales circunstancias. Es por eso que este escrito está dirigido a aquellas personas que todos los días trabajan con servidores y no tengan ni idea de las múltiples funciones de systemd.

Si ustedes lo que desean es administrar los montajes sin comprometer la integridad del inicio, por favor, pongan atención en las siguientes lecciones que aprendí para que la administración fuera ligera y sin contratiempos.


Lección 1: Revisión de la documentación oficial.


Lo primero que tenemos que revisar es el manual de systemd en lo relacionado a los puntos de montaje, mejor conocidos como mount units. Hay más tópicos que se pueden revisar, sin embargo, salen del cometido de ese artículo.

Básicamente dice que si procedemos con systemd para montar cualquier unidad, ni siquiera irá a leer las opciones de montaje de esa unidad en el fstab. Esto me generó más dudas que certezas, puesto que de pronto me quitaron mi manera de hacer las cosas. Dentro del mismo manual hay un espacio para aclararnos un poco más, y al final nos dice que si lo encuentra en el fstab, generará su par en systemd. Es decir, permanece vigente para su utilización.

Los mount points pueden ser configurados vía unit files o vía /etc/fstab. Los puntos de montaje citados en el archivo /etc/fstab serán convertidos dinámicamente en mount points al iniciar el sistema o dinámicamente cuando el system manager es recargado.

Algunas de las opciones de montado que conforman estos conspicuos mount units son:

What=
Es la ruta absoluta del dispositivo, archivo u otro recurso a montar.

Where=
Es la ruta absoluta para el montaje del dispositivo, archivo o recurso a montar. Éste no puede ser un enlace simbólico. Si el punto de montaje no existe al momento de intentar el montado, se crea en ese momento. Es importante saber que este nombre de montaje debe coincidir con el nombre del archivo de montaje.
 
Type=
Esta opción no es mandatario, simplemente indica el tipo de sistema de archivos que será montado.

Por supuesto que hay otras opciones, las cuales recomiendo revisar a fondo cuando se desea administrar sólidamente los puntos de montaje.



Lección 2: Conocer en dónde se encuentran los mentados unit files.


Ahora que ya sabemos de la existencia de tales archivos y el peso que tienen, falta verlos con nuestros propios ojos. Lo más natural, al menos para mi, es utilizar el comando find para ubicar las rutas donde éstos yacen. Claro, no todos sabemos de memoria dónde está cada cosa en nuestro sistema. La siguiente captura es de mi partición de home en un Fedora 24.



Seguramente les surgirá la misma pregunta que a mi, bueno ya encontré los archivos, ahora, ¿cuál es el que debo revisar?. Esta pregunta es relevante puesto que una unidad de disco que no se encuentre en boot time impedirá que nuestro sistema operativo cargue, por lo tanto, entraremos en tareas de mantenimiento que no son nada ágiles, en especial cuando no tenemos la administración de los fierros o las máquinas virtuales.

La respuesta a la interrogante anterior es: /run/systemd/generator/home.mount

Las rutas en systemd tienen un significado, en este caso es que se realizó una conversión. En otras palabras, systemd genera archivos en la ruta /run/systemd/generator para aquellas configuraciones que no son nativas de systemd.

Si deseas comprender mejor el procedimiento, te invito a que revises el manual en tu terminal (o donde te sea más cómodo) de lo siguiente.


man systemd-fstab-generator
man systemd.generator


Lección 3: Rompamos unos cuántos platos.


Bien, la mejor manera de entender cómo funcionan las cosas, y toda las cosas que escribí previamente, es por medio del consabido ensayo/error, el cual casi nos prepara para llevarlo a producción casi sin dolor. En lo personal prefiero utilizar máquinas virtuales antes de mi propio sistema, puesto que puede ser tratado como un sandbox y no altera por completo el funcionamiento de mi local.

Las unidades montadas antes de iniciar se muestran a continuación. Esto me sirve para darme una idea de qué puedo esperar de las pruebas fallidas o las satisfactorias.



Lo siguiente es ubicar la partición o el disco que vamos a agregar como punto de montaje. Me salto los pasos de agregación y formateo de unidades por economía de espacio.



Ahora dice la teoría que donde se crean los unit files es en /lib/systemd/system, aunque esto lo veremos en otra oportunidad. Como vimos en el manual al inicio de este post, nuestro archivo de montaje debe quedar como a continuación (incluyendo el nombre del archivo, cuya importancia es vital). En la imagen anterior observamos que la unidad es sdb y el punto de montaje donde lo queremos es en /mnt/sbd.

mnt-sdb.mount

[Unit]
Description=Mount my partition
[Mount]
What=/dev/sdb
Where=/mnt/sdb
Type=ext4
Hacemos el montaje...

# systemctl start mnt-sdb.mount

En caso que no haya salida, quiere decir que todo fue bien. Validamos que esté el disco o partición donde debe de estar. Listo, ya tenemos funcionando nuestro punto de montaje con systemd. Ahora mi duda es ¿el archivo .mount actualiza al fstab? R=No.

Solo por curiosidad, echemos un vistazo en /etc/fstab.


No está nuestro disco que añadimos en los pasos anteriores. Como casi cualquier tarea de administración de sistemas, buscamos que nuestras configuraciones sobrevivan a los reinicios, por más fortuitos que éstos sean. ¿El montaje del disco sobrevivirá al reinicio? R= No

No nos equivocamos, no se montó. Lo siguiente es, como todo unit file en systemd, habilitarlo e iniciarlo.

# systemctl enable mnt-sdb.mount
# systemctl start mnt-sdb.mount

Si nuevamente no los comandos no nos devuelven salida alguna, es que todo va bien. ¿Ahora sí ya se monta el disco al reinicio del sistema? R=No

Agregamos la siguiente configuración al archivo mnt-sdb.mount, quedando de esta manera:


[Unit]
Description=Mount my partition

[Mount]
What=/dev/sdb
Where=/mnt/sdb
Type=ext4

[Install]
WantedBy=multi-user.target

Esta última configuración es cómo si modificáramos el runlevel 3. ¿Y ahora sí se monta el disco al reinicio? R=Sí

Hasta aquí podemos concluir que el fstab jamás se verá actualizado por el montaje de unidades con systemd así que les recomiendo mucho que a partir de este momento, antes de quitar o poner discos, revisen tanto en el fstab como en systemd para hacer las modificaciones pertinentes.

A continuación se muestra cómo consultar el estado de los mount units del servidor.

systemctl list-unit-files --type=mount


Conclusión

Ambas maneras son perfectamente funcionales cuando buscamos montar discos, incluso pueden funcionar combinándolas sin que ésto represente conflicto alguno.  Sé que es un poco confuso al inicio, pues salta a la mente el porqué tener dos maneras distintas de hacer lo mismo, especialmente para una tarea tan simple y delicada. No obstante, en la siguiente entrada abordaré algo que es un poco más complejo con systemd, y que de alguna manera me ha hecho un detractor de cómo éste funciona; esto es el retirar el montaje automático al inicio del sistema. En systemd no es como comentar una línea dentro de un archivo de configuración o eliminarla; una de las razones por las que soy detractor de systemd.


Comentarios

Entradas populares de este blog

Análisis de conexiones TIME_WAIT

Agregar un usuario a un grupo secundario

Reflexiones sobre Rayuela