¿Cómo puedo determinar si un control remoto NFS está exportando un directorio?

11

En mi script, tengo varias capas de estado:

  1. el control remoto está disponible (ping)
  2. el servicio NFS remoto está activo
  3. NFS remoto está exportando un determinado directorio
  4. NFS remoto está montado (montaje)

Para (2) y (3), creo que rcpinfoes la mejor apuesta. Sin embargo, para (2), no puedo entender cómo limitar mi consulta al servicio NFS sin iniciar un subshell (que no es aceptable para esta aplicación). Para (3), no estoy seguro de que esta información esté disponible de forma remota (sin sshentrar, por supuesto).

Estoy trabajando en RHEL 6 y no tengo acceso a programas que no están incluidos en la distribución estándar.

Sean Allred
fuente

Respuestas:

16

Para 3) probablemente quiera usar lo showmount -e remote_nfs_serverque muestra si remote_nfs_server ha exportado algo.

Y para 2) si no desea utilizar un shubshell y saber si el servidor remoto ejecuta NFSv3 o NFSv4 y si TCP o UDP, puede consultarlo específicamente con rpcinfo:
rpcinfo -u remote_nfs_server nfs 3 para NFSv3 a través de UDP y
rpcinfo -t remote_nfs_server nfs 4para NFSv4 a través de TCP

Para 4) es posible que desee ver Comprobar si la carpeta es un sistema de archivos remoto montado


Más información:

doktor5000
fuente
showmount -r remoteme dirá si remoteestá exportando algo , pero ¿hay alguna forma de determinar si remote:/mnt/dirse está exportando sin iniciar una subshell (es decir, una tubería)?
Sean Allred
showmount -e remotele dirá si remoteha exportado algo. showmount -rsolo le dará un mensaje de error ya que esa opción no existe. Podría intentar usar la coincidencia de subcadenas de shell para básicamente grep para una expresión regular en la salida showmount. Tal vez eche un vistazo, por ejemplo, stackoverflow.com/questions/12619720/…
doktor5000
O al revés, no conozco ningún comando independiente que pueda consultar específicamente un servidor NFS remoto para un montaje en particular, y no creo que exista. Solo otras dos formas viables serían consultar el servidor remoto localmente a través de ssh (aunque incluso entonces no hay una forma confiable de determinar si un directorio dado se exporta actualmente debido a la naturaleza sin estado de NFS). Otro enfoque podría ser tratar de montar la exportación NFS desde el cliente y verificar el código de salida y luego el montaje local y su contenido.
doktor5000
Mi error con la -ropción versus -e, eso es lo que quise decir :) El 'enfoque de intento' ya se sugirió anteriormente. No me gusta particularmente, pero parece una opción real.
Sean Allred
5

Puedes usar showmount -e <server>para algunos aspectos del # 3. Cuando las exportaciones son simples, al menos sugeriría que se exporte un directorio (o tal vez un padre de dicho directorio).

# showmount -e server
/export                               (everyone)

Para el # 2, no estoy seguro de lo que estás buscando. Si usa NFSv3, buscará al menos mountd y nfs (y en algunos casos puede que desee confirmar los administradores de bloqueo). Puede verificar cualquier explícitamente con rpcinfo como usted dice.

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting
BowlOfRed
fuente
showmount -r remoteme dirá si remoteestá exportando algo , pero ¿hay alguna forma de determinar si remote:/mnt/dirse está exportando sin iniciar una subshell (es decir, una tubería)?
Sean Allred
Eso depende de las instalaciones a su disposición. ¿En qué está escrito tu guión? ¿Por qué iniciar un ejecutable separado (showmount) es menos problemático que iniciar otro shell?
BowlOfRed
Estoy escribiendo mi script en Python 2.6 y estoy usando el subprocessmódulo. Puedo configurar una tubería con él, pero prefiero no complicar tanto el diseño. Necesito evitar iniciar un subshell para permitir que el script se elimine correctamente: si se elimina, sus procesos secundarios se eliminarán, pero no los procesos secundarios. Por lo tanto, la subshell se eliminaría, pero no los procesos que genera la subshell. También he notado que rpcinfopuede tomar hasta tres minutos para regresar, que es la base original para la cosa sin subshell. Sin embargo, es demasiado tarde para cambiar eso ahora.
Sean Allred
Escriba un script por separado que haga lo que necesita (como las llamadas showmount, pero toma un argumento para el directorio y devuelve éxito / fracaso, e incluye un tiempo de espera que sea razonable para sus propósitos), luego llame a ese script desde su python.
BowlOfRed
Puedo prometerle que no es tan fácil como pensaría de inmediato: cuando está bloqueado, rpcinfono responde a nada más que a SIGKILL (que es una mala atribución, el sistema operativo obviamente simplemente mata el proceso). En cualquier caso, eso todavía iniciaría un shell para comenzar rpcinfo: el problema subyacente persiste.
Sean Allred
0

Listar todos los directorios de exportación pseudo root NFS-V4

ls /net/ip-addr-nfs-server

Mira mi respuesta en otro hilo

Sathish
fuente
Para que un /netmontaje funcione, el /etc/auto.netscript debe establecer que el servidor tiene una exportación correspondiente. Esto usa el showmountcomando. Si el servidor solo tiene NFSv4, no funcionará (se muestra showmount RPC: Program not registeredy /net/serversolo informará File not found)
Ale