Casi nada :D.
Ya comenté en 'descargar imágenes ISO desde blackshell' como montar directorios con NFS de forma remota y bajo demanda. Era el servidor quién montaba/desmontaba los directorios en el cliente según su propia disponibilidad.
La solución que expliqué funciona, pero no es perfecta. De hecho no tolera nada bien los fallos :(.
Si homeworld (el servidor NFS) cuando se apaga no desmonta correctamente los directorios en blackshell (el cliente), tenemos una historia "montada" ;) porque la próxima vez que arranque volverá a montar los directorios.
La verdad es que no sé porqué se comporta así, parece más lógico que si un disco ya está montado que rechace la nueva petición de montado. Pero bueno, algo tendrá que ver el NFS ¿?
La solución es editar el /etc/init.d/nfs-kernel-server de homeworld de la siguiente forma:
# en la zona del start) después de arrancar el NFS printf "Calling blackshell:" printf " WAKE UP!" ssh -i /home/usuario/.ssh/id_rsa usuario@blackshell-lan \ "/home/usuario/bin/share.sh" echo "." # en la zona del stop) antes de apagar el NFS printf "Calling blackshell:" printf " SLEEP NOW!" ssh -i /home/usuario/.ssh/id_rsa usuario@blackshell-lan \ "/home/usuario/bin/unshare.sh" echo "."
Cuidado con los permisos de los dos scripts, que solo sean ejecutables por el usuario en cuestión.
Ahora los scripts implementan esa comprobación tan lógica, en share.sh:
#!/bin/sh mount | grep /storage/ftp/pub/iso > /dev/null [ $? != 0 ] && /usr/bin/sudo /sbin/mount /storage/ftp/pub/iso
Y en unshare.sh:
#!/bin/sh mount | grep /storage/ftp/pub/iso > /dev/null [ $? == 0 ] && /usr/bin/sudo /sbin/umount -f /storage/ftp/pub/iso
Fácil y eficaz.
Lamentablemente queda un pequeño punto delicado. ¿Qué pasa si homeworld no apaga bien? ¿Hay que volver a arrancar esa máquina y desmontar el directorio en blackshell?
La solución sería poner un cron que cada 15 minutos, por ejemplo, haga lo siguiente:
# esta montado? mount | grep /storage/ftp/pub/iso > /dev/null if [ $? != 0 ]; then rm -f /home/usuario/.mount_check exit fi # está homeworld ahí? ping -c 1 homeworld > /dev/null if [ $? != 0 ]; then rm -f /home/usuario/.mount_check exit fi # ha fallado ya una vez? if [ -f /home/usuario/.mount_check ]; then rm -f /home/usuario/.mount_check /usr/bin/sudo /sbin/umount -f /storage/ftp/pub/iso else touch /home/usuario/.mount_check fi
De forma que desmonte el directorio si el servidor está 30 minutos sin responder (fallando a dos comprobaciones consecutivas).
Esta sería una solución que nos daría lo que dice el título de este post: montado NFS remoto y tolerante a fallos (de montado/desmontado) :P.
![[xml]](/images/xml.gif)
