Quel est le meilleur moyen de gérer les déconnexions de serveur des montages sshfs?

58

J'ai plusieurs répertoires montés via sshfs . Je reçois parfois des déconnexions du serveur (non configurable par moi). Je monte habituellement les répertoires comme celui-ci

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

Lorsqu'un serveur se déconnecte, le sous-système sshfs ne démonte pas / ne libère pas le répertoire mais le verrouille à la place. Le montage est toujours visible lors de la frappe mount. Quand je tape

ls /mnt/example

le processus est verrouillé ( Ctrl+ cn'aide pas non plus). Je fais donc

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

Y a-t-il une meilleure façon de gérer cela? Évidemment, sshfs devrait faire le démontage et le nettoyage ... Idéalement, il se reconnecterait automatiquement.

Sébastien
la source
Il s’agit d’un travail pour un tunnel TCP à reconnexion automatique .
Gilles, arrête de faire le mal '
4
une solution utilisant un logiciel maintenu ?
Sebastian le

Réponses:

45

Vous pouvez exécuter sshfs avec l'option "reconnecter". Nous utilisons sshfs avec PAM / automount pour partager des fichiers de serveur pour chaque poste de travail de notre réseau. Nous utilisons -o reconnect en tant que paramètre pour sshfs, principalement parce que nos utilisateurs ont suspendu leurs ordinateurs et que sake ne pourrait pas se reconnecter (ou répondre, ou quoi que ce soit d'autre).

Par exemple:

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

Juste une note, si l'ordinateur distant est vraiment en panne, sshfs peut ne plus répondre pendant un long moment.

MV.
la source
11

Cela peut être contourné en réduisant le délai d'attente. Ajoutez les éléments suivants à $HOME/.ssh/configou /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Cela entraîne un délai d'attente de 45 secondes.

Thor
la source
3
Cela n’aidera que si le problème vient de SSH. Il existe un problème plus vaste qui sshfsne traite pas la mort du sshprocessus sous-jacent avec élégance.
bahamat
En effet, ceci n’est qu’une solution de contournement et doit être corrigé dans sshfs.
Thor
Mais seulement une solution de contournement qui traite d’une cause parmi d’autres. Son problème n’a peut-être rien à voir avec la conservation. La nature de la question porte moins sur la cause que sur le nettoyage dans un état cohérent.
bahamat
5

J'ai un serveur que j'utilise pour le stockage et pour un manque d'espace là où je vis, je le conserve dans un autre endroit. Afin d'amener les fichiers sur mon réseau, j'utilise un Raspberry Pi qui monte les fichiers à partir du serveur à l'aide de sshfs.

Récemment, j'ai dû passer à Jessica Raspbian en raison d'une panne de courant et me suis rendu compte que sshfs devenait sérieusement instable. Les dossiers seraient correctement montés, mais après un certain temps, je ne serais plus en mesure de me connecter et le Raspberry Pi se figerait si je souhaitais répertorier le contenu des supports.

Ce que j'ai essayé était:

  1. utilisé reconnecter dans le fstab
  2. utilisé ServerAliveInterval et ServerAliveCountMax dans le fichier .ssh / config mais en vain.
  3. autres solutions que j'ai lues sur la plupart des forums.

mais pas de dés! Jusqu'à ce que j'ai modifié le fichier fstab comme suit:

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

Et il fonctionne! Pas plus de déconnexions! J'ai l'impression que sshfs ne lit pas le fichier de configuration ssh pour une raison quelconque et que les signaux de maintien en vie n'ont jamais été envoyés.

lucian
la source
3

Cela ressemble à un travail d'autofs. Il est plutôt apte à gérer des montages réseau de différents types (nfs, samba, sshfs, etc.) et à remarquer le moment où ces éléments doivent être remontés. Il peut également s'occuper de les démonter après des périodes d'inutilisation et de les monter lorsqu'une demande de système de fichiers est faite.

Caleb
la source
11
autofs effectuera la connexion à la demande et pourra être démonté lorsqu'il sera inactif (ce qui réduira la fenêtre temporelle problématique), mais cela ne changera rien si sshfs se bloque car le serveur est déconnecté.
Gilles, arrête de faire le mal '
1

Si certaines personnes rencontrent encore ce problème, je ne peux toujours pas le résoudre. J'ai trouvé une solution de contournement.

Le script ruby ​​suivant a fait l'affaire. Il crée un dossier appelé "keepalive" à plusieurs reprises. Continuez à courir jusqu'à l'infini.

$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

Je ne sais pas pourquoi cela fonctionne. Mais cela semble résoudre mon problème de rester inactif pendant une minute et de tout geler. Il essaie simplement de créer un dossier au point de montage, ce qui semble l'empêcher de tout déconnecter et de tout geler.

Vudew
la source
6
Eh bien, si cela fonctionne pour vous, vous n'avez pas besoin d'un script et d'un interprète Ruby. Une seule ligne ferait aussi bien l' while true; do mkdir -p /x/y; sleep 2; done
affaire