- ¿Existe un método fiable para comprobar, ese archivo está presente? En el escenario anterior, lstat en el archivo devuelve éxito y la aplicación falla solo después de intentar mover el archivo.
Eso es normal comportamiento de NFS.
- ¿Cómo puedo sincronizar manualmente el contenido del directorio en el cliente con el servidor?
Eso es imposible hacerlo de forma manual, ya que NFS se hace pasar por un sistema de archivos compatible con POSIX normal.
me han tratado una vez al código de cierre()/open() en un intento de mitigar de alguna manera los efectos de la caché del cliente NFS. En mi caso, necesitaba leer la información escrita en el archivo en otro servidor. Pero incluso el truco de reapertura tuvo un efecto casi nulo. Y no puedo agregar fdatasync() al lado de la escritura, ya que eso reduce la velocidad de toda la aplicación.
Mi experiencia con NFS hasta la fecha es que nada se puede hacer. En rutas de código críticas simplemente codifiqué para volver a intentar las operaciones de archivo que devuelven ESTALE.
- Algunos consejos generales sobre cómo escribir código de gestión de archivos fiable en caso de NFS?
Mod yo abajo todo lo que quiera, pero si sus clientes quieren fiabilidad entonces no deberían utilizar NFS.
Mi empresa, por ejemplo, anuncia el uso del sistema de archivos distribuido adecuado (omito deliberadamente la marca) si el cliente quiere fiabilidad. Nuestro software central no está garantizado para ejecutarse en NFS y no admitimos dichas configuraciones. Pero en nuestro caso, realmente necesitamos las garantías de que tan pronto como los datos se escriben en FS, se vuelven accesibles en todos los otros nodos.
Coherencia en NFS se puede lograr, pero a costa de rendimiento, haciendo NFS apenas utilizable. (Verifique sus opciones de montaje.) NFS almacena en caché como un loco para ocultar el hecho de que es un sistema de archivos de servidor. Para que todas las operaciones sean coherentes, el cliente NFS debería ir al servidor NFS de forma síncrona para cada pequeña operación, sin pasar por la memoria caché local. Y eso nunca sería rápido.
Pero ya que estamos hablando aquí de Linux, se puede aconsejar a los clientes del software para evaluar los sistemas de archivos de clúster disponibles. P.ej. RedHat ahora oficialmente es compatible con GFS. He oído hablar de personas que usan CodaFS, pero no tienen información sobre él.
Gracias. Has confirmado la mayoría de mis propios resultados de investigación de NFS. Supongo que codificaré un montón de comprobaciones ESTALE, porque no tenemos planes de migrar a otro tipo de almacenamiento.No aceptaré esta respuesta por el momento, espero que alguien presente más información sobre el tema. – begray