¿Cuál es una mejor manera de lidiar con las desconexiones del servidor de los montajes sshfs?

58

Tengo varios directorios montados a través de sshfs . A veces recibo desconexiones del servidor (no configurable por mí). Suelo montar los directorios así

sshfs [email protected]:/home/user /mnt/example

Cuando un servidor se desconecta, el subsistema sshfs no desmonta / libera el directorio, sino que lo bloquea inaccesible. La montura sigue siendo visible al escribir mount. Cuando escribo

ls /mnt/example

el proceso se bloquea (también Ctrl+ cno ayuda). Por lo tanto hago

sudo umount -l /mnt/example
# find pid of corresponding process:
ps aux | grep example.com
kill -9 <pid of locked sshfs process>

¿Hay una mejor manera de lidiar con esto? Obviamente sshfs debería hacer el desmontaje y la limpieza ... Idealmente, se volvería a conectar automáticamente.

Sebastian
fuente
Este es un trabajo para un túnel TCP de reconexión automática .
Gilles 'SO- deja de ser malvado'
44
¿Alguna solución usando software mantenido ?
Sebastian

Respuestas:

45

Puede ejecutar sshfs con la opción "reconectar". Utilizamos sshfs con PAM / automount para compartir archivos de servidor para cada estación de trabajo en nuestra red. Usamos -o reconectar como parámetro para sshfs, principalmente porque nuestros usuarios suspendieron sus computadoras y al despertar sshfs no se reconectaron (ni respondieron, ni nada).

Por ejemplo:

sshfs [email protected]:/home/mvaldez/REMOTE /home/mvaldez/RemoteDocs -o reconnect,idmap=user,password_stdin,dev,suid

Solo una nota, si la computadora remota está realmente inactiva, sshfs puede dejar de responder durante mucho tiempo.

MV.
fuente
11

Esto se puede solucionar disminuyendo el tiempo de espera. Agregue lo siguiente a $HOME/.ssh/configo /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Esto da como resultado un tiempo de espera de 45 segundos.

Thor
fuente
3
Esto solo ayudaría si el problema es culpa de SSH. Hay un problema mayor que sshfsno trata con sshgracia la muerte del proceso subyacente .
bahamat
De hecho, esto es solo una solución alternativa y debe corregirse dentro de sshfs.
Thor
Pero solo una solución alternativa que se ocupa de una causa de muchas. Su problema puede no tener nada que ver con keepalives. La naturaleza de la pregunta es menos sobre la causa y más sobre la limpieza hasta un estado consistente.
bahamat
5

Tengo un servidor que uso para el almacenamiento y, por falta de espacio donde vivo, lo guardo en otra ubicación. Para llevar los archivos a mi red, uso un raspberry pi que monta los archivos desde el servidor usando sshfs.

Recientemente tuve que actualizarme a raspbian jessie debido a una falla de energía y me di cuenta de que los sshfs se vuelven muy inestables. Las carpetas se montarían correctamente, pero después de un tiempo no podría conectarme a ellas y la frambuesa pi se congelaría si quisiera enumerar el contenido de las monturas.

Lo que probé fue:

  1. usado reconectar en el fstab
  2. usó ServerAliveInterval y ServerAliveCountMax en el archivo .ssh / config pero fue en vano.
  3. Otras soluciones que leo en la mayoría de los foros.

pero no dados! Hasta que modifiqué el archivo fstab de la siguiente manera:

sshfs#user@server:/remote/folder /local/mount/dir fuse IdentityFile=sshkeyfile,Port=XXX,uid=1000,gid=1000,allow_other,_netdev,ServerAliveInterval=45,ServerAliveCountMax=2,reconnect,noatime,auto 0 0

¡Y funciona! ¡No más desconexiones! Parece que sshfs no lee el archivo de configuración ssh por alguna razón y las señales de mantener vivo nunca se enviaron.

lucian
fuente
3

Esto suena como un trabajo para autofs. Es bastante hábil para manejar montajes de red de varios tipos (nfs, samba, sshfs, lo que sea) y darse cuenta de cuándo es necesario volver a montar esas cosas. También puede encargarse de desmontarlos después de períodos de desuso y montarlos cuando se realiza una solicitud del sistema de archivos.

Caleb
fuente
11
autofs se conectará a pedido y puede desmontarse cuando esté inactivo (lo que reduce la ventana de tiempo problemática), pero no ayudará si sshfs se bloquea porque el servidor se ha desconectado.
Gilles 'SO- deja de ser malvado'
1

Si todavía hay personas que se encuentran con este problema, todavía no podría solucionarlo. Encontré una solución alternativa.

El siguiente guión de rubí hizo el truco. Crea una carpeta llamada "keepalive" una y otra vez. Solo sigue ejecutando esto hasta el infinito.

$i =1 
$num =0
begin
    puts("Inside the loop i = #$i" )
    $i +=1
    puts 'creating obj'
    system 'mkdir  /{yourmountpoint}/keepalive'
    sleep 5
    puts 'we did it, it should be still alive'
end while $i > $num

No sé por qué funciona esto. Pero parece resolver mi problema cuando estoy inactivo por un minuto y todo se congela. Solo trata de crear una carpeta en el punto de montaje y eso parece evitar que se desconecte y congele todo de alguna manera.

Vudew
fuente
66
Bueno, si eso funciona para usted, entonces no necesita un guión y un intérprete de rubí. Una sola línea funcionaría igual de bien:while true; do mkdir -p /x/y; sleep 2; done
mivk