¿Habría mucha diferencia en el tiempo para iniciar sesión en la máquina que tiene el directorio antes de hacer un rm -rfen el directorio, o simplemente rm -rfel directorio a través de NFS?
fuente
¿Habría mucha diferencia en el tiempo para iniciar sesión en la máquina que tiene el directorio antes de hacer un rm -rfen el directorio, o simplemente rm -rfel directorio a través de NFS?
Por supuesto, el ssh es el mejor.
Nfs utiliza un protocolo de red complejo con varias llamadas a procedimientos remotos y tiempos de espera de sincronización de datos. En el caso de ssh, estos no se aplican.
Además, hay muchas cerraduras. La eliminación de archivos en nfs funciona de esta manera:
rmcomando da el unlink()syscallunlink()llamadaunlink()llamada en el lado remotounlink()llamada de su originalrmrm itera al siguiente archivo, ir a 1Ahora, lo importante es: entre 2-7, rmtiene que esperar. Podría enviar la siguiente unlink()llamada de forma asincrónica, pero es una herramienta de un solo subproceso, no orientada a eventos. Incluso si pudiera, aún requeriría complicadas banderas de montaje nfs. Hasta que no obtenga el resultado, espera.
Nfs, y cualquier sistema de archivos de red, siempre es mucho más lento.
En muchos casos, puedes hacer eliminaciones recursivas de velocidad casi infinita con un truco:
mv -vf oldfilms oldfilms-)rm -rf oldfilms- &)Desde muchos aspectos (pero no todos), esta eliminación de directorio se verá como si hubiera sucedido en prácticamente cero tiempo.
Extensión: Como @ el.pascado menciona en su excelente comentario, en realidad 2-7 tiene que ejecutar 3x para cualquier archivo:
lstat()llamada al sistema),unlink(), en el caso de directorios opendir(), eliminar todos los archivos / directorios en forma recursiva, luego closedir(), finalmente rmdir().readdir()llamada.Esto requiere 3 comandos RPC nfs para archivos y 3 adicionales para directorios.
-rindicador,rmprimero debe verificar si el archivo es un directorio (alstattravés de nfs), abrirlo (aopendirtravés de nfs), leer su contenido (areaddirtravés de nfs) y solo luego realizar la eliminación real como se describe en la respuesta en cada archivo que se encuentra dentro y recurriendo a subdirectorios, cierre el directorio (aclosedirtravés de nfs) y luego repita, para cada directorio encontrado.Si. Bien quizás. Depende. Para una pequeña cantidad de archivos y directorios, no habría mucha diferencia.
La operación de archivo en bloque en un directorio montado en NFS es lenta. Si tiene la oportunidad de iniciar sesión en el servidor NFS y hacerlo en el directorio real, entonces esto sería más rápido.
Probémoslo eliminando la colección de puertos de OpenBSD que he extraído de CVS y que he montado sobre NFS:
En el servidor NFS:
En el cliente (después de restaurar los archivos originales de la copia de seguridad):
fuente