automount nfs: configuración de tiempo de espera de autofs para servidores poco confiables: ¿cómo evitar el bloqueo?

18

Estoy ejecutando un pequeño servidor para nuestra parte plana. Es principalmente un servidor de archivos con algunos servicios adicionales. Los clientes son máquinas Linux (principalmente Ubuntu, pero también algunas Distros) y algunas Mac (-Book) entre ellas (pero no son importantes para la pregunta). El servidor ejecuta Ubuntu 11.10 (Oneiric Ocelot) 'Server Edition', el sistema desde el que hago mi configuración y prueba ejecuta 11.10 'Desktop Edition'. Estuvimos ejecutando nuestros recursos compartidos con Samba (con los que estamos más familiarizados) durante bastante tiempo, pero luego migramos a NFS (porque no tenemos ningún usuario de Windows en la LAN y queremos probarlo) y hasta ahora todo funciona bien .

Ahora quiero configurar el montaje automático con autofs para suavizar las cosas (hasta ahora todos montan los recursos compartidos manualmente cuando es necesario). El montaje automático parece funcionar también. El problema es que nuestro "servidor" no funciona las 24 horas, los 7 días de la semana para ahorrar energía (si alguien necesita cosas del servidor, lo enciende y lo apaga después, por lo que solo funciona un par de horas cada día). Pero desde la configuración de autofs, los clientes cuelgan a menudo cuando el servidor no se está ejecutando.

  • Puedo iniciar todos los clientes bien, incluso cuando el servidor no se está ejecutando.

  • Pero cuando quiero mostrar un directorio (en terminal o nautilus), que contiene enlaces simbólicos a un /nfsrecurso compartido mientras el servidor no se está ejecutando, se cuelga durante al menos dos minutos (porque los autofs no pueden conectarse al servidor pero se mantienen tratando, supongo).

    • ¿Hay alguna manera de evitar eso? ¿De modo que el montaje se retrasaría hasta un cambio en el directorio o hasta que se acceda al contenido de ese directorio? ¿No cuando "mira" un enlace a una acción debajo /nfs? Creo que no, pero ¿tal vez es posible no intentar acceder a él durante tanto tiempo? Y solo dame un directorio vacío o un "no se puede encontrar / conectar a ese directorio" o algo así.
  • Cuando el servidor se está ejecutando, todo funciona bien.

  • Pero cuando el servidor se apaga, antes de que un recurso compartido se desmonte, las herramientas (como dfo ll) se bloquean (suponiendo que piensan que el recurso compartido todavía está encendido pero el servidor ya no responderá).

    • ¿Hay alguna forma de desmontar los recursos compartidos automáticamente cuando se pierde la conexión?
  • Además, los clientes no se apagarán o reiniciarán cuando el servidor esté inactivo y todavía tengan recursos compartidos montados. Se cuelgan (infinitamente como parece) en " matar los procesos restantes " y nada parece suceder.

Creo que todo se reduce a buenos valores de tiempo de espera para montar y desmontar. Y tal vez para eliminar todos los recursos compartidos cuando se pierde la conexión con el servidor.

Entonces mi pregunta es: ¿Cómo manejar esto? Y como beneficio adicional: ¿hay una buena manera de vincular dentro /nfssin la necesidad de montar los recursos compartidos reales (una opción de autofs o tal vez usando un pseudo FS para el /nfsque se reemplaza cuando ocurre el montaje o algo así)?

Mi configuración

La configuración de NFS es bastante básica pero nos ha servido bien hasta ahora (usando NFSv4 ):

/ etc / default / nfs-common

NEED_STATD=
STATDOPTS=
NEED_IDMAPD=YES
NEED_GSSD=

/etc/idmapd.conf

[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

/ etc / exportaciones

/srv/   192.168.0.0/24(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0)

Debajo de la raíz de exportación /srvtenemos dos directorios con bind:

/ etc / fstab (servidor)

...
/shared/shared/      /srv/shared/      none    bind  0 0
/home/Upload/        /srv/upload/      none    bind  0 0

El primero es principalmente de solo lectura (pero lo impongo a través de los atributos del archivo y la propiedad en lugar de la configuración de NFS) y el segundo es rw para todos. Nota: No tienen entradas adicionales en / etc / exportaciones , aunque su montaje por separado funciona.

En el lado del cliente, se configuran /etc/fstaby montan manualmente según sea necesario ( mortones el nombre del servidor y se resuelve bien).

/ etc / fstab (Cliente)

morton:/shared  /nfs/shared nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0
morton:/upload  /nfs/upload nfs4    noauto,users,noatime,soft,intr,rsize=8192,wsize=8192    0   0

Para la configuración de autofs, eliminé las entradas de /etc/fstablos clientes y configuré el resto de esta manera:

/etc/auto.master

/nfs    /etc/auto.nfs

Primero até el ejecutable suministrado /etc/auto.net(puedes echarle un vistazo aquí ) pero no montará nada automáticamente para mí. Luego escribo un /etc/auto.nfsbasado en algunos HowTos que encontré en línea:

/etc/auto.nfs

shared  -fstype=nfs4  morton:/shared
upload  -fstype=nfs4  morton:/upload

Y funciona un poco ... O funcionaría si el servidor funcionara 24/7. Entonces obtenemos los bloqueos cuando un cliente arranca sin que el servidor se ejecute o cuando el servidor deja de funcionar mientras los recursos compartidos aún están conectados.

Brutus
fuente

Respuestas:

2

Con cualquier sistema de montaje, desea evitar situaciones en las que Nautilus enumera el directorio que contiene un montaje que puede o no montarse. Entonces, con autofs, no cree montajes en, por ejemplo, / nfs. Si lo hace, cuando use Nautilus para enumerar el 'Sistema de archivos', intentará crear las monturas que deberían existir en / nfs, y si esos intentos de montaje fallan, le llevará minutos darse por vencido.

Entonces, lo que hice fue cambiar auto.master para crear los montajes en / nfs / mnt.

Esto solucionó el problema para mí. Solo recibo un largo retraso si trato de enumerar el contenido de / nfs / mnt, lo que puedo evitar fácilmente.

Tim Passingham
fuente
20

Monte el recurso compartido NFS en los clientes utilizando las opciones de montaje "bg, intr, hard".

Lo más importante en su caso es "bg" para el fondo, que le dice al sistema que no se bloquee cuando el servidor no está disponible.

"intr" para interrruptable, para que pueda matar las monturas colgantes en el cliente con el comando kill.

"duro" es lo opuesto a "suave". La diferencia es que "duro" seguirá intentando sin cesar, mientras que "suave" retrocederá exponencialmente sus reintentos cuando el servidor no esté disponible.

Nils
fuente
Gracias por la respuesta. No puedo hacer una prueba en este momento porque no estoy en casa, pero después de tratar de obtener la página del manual (nuevamente), tengo algunas preguntas más: hardy bgal principio me suena intuitivo. ¿Quiero que la montura no vuelva a intentarlo y vuelva inmediatamente si se rescata? intrparece estar bien, pero parece que ya no funciona: " La opción de montaje intr / nointr está en desuso después del kernel 2.6.25. Solo SIGKILL puede interrumpir una operación NFS pendiente en estos núcleos, y si se especifica, esta opción de montaje se ignora para proporcionar compatibilidad con versiones anteriores. con granos más viejos ".
Brutus
2
Hard volverá a intentarlo sin cesar: bg NO se bloqueará si el montaje no es posible en este momento. El resultado será que está montado cuando esté disponible, pero todas las demás operaciones continuarán. INTR parece ser el predeterminado ahora, lo cual es genial. Al principio, tenía que reiniciar el cliente colgado si su servidor NFS murió ...
Nils
Acabo de prueba, pero añadiendo hard,bga /etc/auto.masterparece cambiar nada. A time ls -l ~(mi directorio de usuario contiene un enlace simbólico a /nfs/upload) todavía demora más de dos minutos, cuando el servidor no se está ejecutando.
Brutus
¿Reiniciaste los autofs? Solo los cambios en el submapa se propagarán sin reiniciar los autofs.
Nils
Lo hice:sudo reload autofs && sudo restart autofs
Brutus
7

Jugué un poco más con algunas de las opciones de la página de manual. Todos bg,hard, bg,soft, fg,hardy fg,softme dan los tiempos de más de dos minuetos regrese.

Sin retrans=1,retry=0embargo, el ajuste (combinado con cualquiera de los anteriores) me da tiempos alrededor de tres segundos. Bastante decente. Aunque no estoy seguro de lo que significa cada combinación. Cavará más allá.

También me encontré con las opciones de autofs MOUNT_WAITy UMOUNT_WAIT. No he podido obtener algunos resultados diferentes con ellos, pero seguiré intentándolo. Parece lika una buena manera de usar la opción NFS "más segura" (también conocida como más reintentos, etc.) pero tiempos de retorno rápidos para autofs, ¿o no?

Brutus
fuente
1
También parece haber otras opciones, rsize=32768,wsize=32768,noatimecomo se señala aquí: techrepublic.com/blog/opensource/…
Ehtesh Choudhury
-1

Para configurar un sistema de archivos NFS para que se monte automáticamente cada vez que inicie su sistema Red Hat Linux, debe agregar una entrada para ese sistema de archivos NFS al archivo / etc / fstab. El archivo / etc / fstab contiene información sobre todos los diferentes tipos de sistemas de archivos montados (y disponibles para ser montados) para su sistema Red Hat Linux. EJ:: nfs El corresponde al nombre de host, la dirección IP o el nombre de dominio completo del servidor que exporta el sistema de archivos. El es la ruta al directorio exportado. Especifica en qué parte del sistema de archivos local montar el directorio exportado. Este punto de montaje debe existir antes de que se lea / etc / fstab o el montaje fallará El área especifica las opciones de montaje para el sistema de archivos. Por ejemplo, si el área de opciones indica rw, suid, el sistema de archivos exportado se montará de lectura-escritura y se utilizará el usuario y el groupid establecido por el servidor. Tenga en cuenta que los paréntesis no deben usarse aquí

M.Zaman
fuente