Tengo una pequeña red local que tiene un cuadro de Gentoo y un cuadro de Windows. Monto un recurso compartido que se origina en el cuadro de Windows en el cuadro de Gentoo con un comando como:
mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox
La mayoría de las veces, todo funciona, y puedo leer y escribir sin problemas. Sin embargo, cada pocas semanas más o menos, la conexión o el punto de montaje parece bloquearse, de modo que cualquier proceso que intente acceder al punto de montaje se atasca en estado D (disco o espera de E / S). Estos procesos se vuelven impermeables a las señales TERM y KILL. Desconectar y volver a conectar el cuadro de Windows de la red no ayuda. El estado congelado dura más de 5 minutos. Es realmente frustrante y se interpone en el camino del trabajo normal, porque congela los diálogos, ls
comandos, etc. de Guardar como umount
. Eventualmente, el estado muerto se resuelve solo, y el punto de montaje se desmonta, o se hace posible umount
sin demora.
Supongo que esto sucede cuando la conexión / montaje se ha quedado inactivo, o cuando la máquina Windows ha estado inactiva. No estoy muy seguro.
¿Por qué sucede esto y qué puedo hacer para evitarlo? ¿O cómo puedo matar con éxito estos procesos de estado D a voluntad?
Posiblemente relacionado: los montajes CIFS se cuelgan en la lectura
Respuestas:
No estoy seguro de por qué está ocurriendo el problema, pero como solución alternativa, ¿ha intentado poner algo como
touch /mnt/windowsbox/keepalive.txt
oecho "I am still alive." >/mnt/windowsbox/keepalive.txt
ejecutarse a través de cron cada minuto? De esa manera, la conexión debe permanecer activa.fuente
*/5 * * * *
en el horario de crontabYo también encuentro esto cada pocos meses.
sudo umount -l
es mi solución /programming//a/96288/2097284fuente
Otra posible respuesta sugirió escribir en un archivo en la montura en un intervalo regular a través de cron. En su lugar, sugeriría usar el programa smbclient para conectarse al recurso compartido y desconectarse.
Escribí un script bash como este para lograr eso:
Este comando establece una nueva conexión con el recurso compartido y luego ejecuta el comando de salida, apagando inmediatamente la conexión que acaba de establecer en la línea de comando. Debe haber 8 barras diagonales antes del nombre del servidor y 4 antes del nombre del recurso compartido, ya que las barras invertidas deben escaparse, y las escapes deben escaparse dentro de una cadena de comillas dobles. Quizás haya una forma más inteligente de hacer esto, pero parece funcionar.
Quizás haya una manera de hacer esto aún más confiable haciendo que mantenga la conexión abierta durante varios minutos a la vez, pero eso está un poco fuera de mi alcance.
fuente
//servername/sharname
es mucho más fácil en lugares donde necesita escapar mucho.