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
Publicar un comentario