Qual é a melhor maneira de lidar com desconexões de servidor de montagens sshfs?


58

Eu tenho vários diretórios montados através do sshfs . Às vezes, recebo desconexões do servidor (não configurável por mim). Eu costumo montar os diretórios assim

sshfs user@server.example.com:/home/user /mnt/example

Quando um servidor se desconecta, o subsistema sshfs não desmonta / libera o diretório, mas o bloqueia inacessível. A montagem ainda é visível ao digitar mount. Quando digito

ls /mnt/example

o processo fica bloqueado (também Ctrl+ cnão ajuda). Eu faço

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

Existe uma maneira melhor de lidar com isso? Obviamente, o sshfs deve fazer a quantidade e limpar ... Idealmente, ele se reconectaria automaticamente.



4
alguma solução usando software mantido ?
Sebastian

Respostas:


45

Você pode executar o sshfs com a opção "reconectar". Usamos sshfs com PAM / automount para compartilhar arquivos do servidor para cada estação de trabalho em nossa rede. Usamos -o reconnect como parâmetro para sshfs, principalmente porque nossos usuários suspenderam seus computadores e, quando ativados, os sshfs não se reconectariam (ou responderiam, ou algo assim).

Por exemplo:

sshfs mvaldez@192.168.128.1:/home/mvaldez/REMOTE /home/mvaldez/RemoteDocs -o reconnect,idmap=user,password_stdin,dev,suid

Apenas uma observação: se o computador remoto estiver realmente inoperante, o sshfs poderá ficar sem resposta por um longo tempo.


11

Isso pode ser resolvido diminuindo o tempo limite. Adicione o seguinte a $HOME/.ssh/configou /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Isso resulta em um tempo limite de 45 segundos.


3
Isso só ajudaria se o problema fosse culpa do SSH. Há um problema maior que sshfsnão lida com a morte do sshprocesso subjacente normalmente.
bahamat

Na verdade, isso é apenas uma solução alternativa e deve ser corrigido dentro do sshfs.
Thor

Mas apenas uma solução alternativa que lida com uma causa dentre muitas. Seu problema pode não ter nada a ver com keepalives. A natureza da pergunta é menos sobre a causa e mais sobre a limpeza para um estado consistente.
bahamat

5

Eu tenho um servidor que eu uso para armazenamento e, por falta de espaço onde moro, eu o mantenho em outro local. Para trazer os arquivos para minha rede, eu uso um raspberry pi que monta os arquivos do servidor usando sshfs.

Recentemente, tive que atualizar para o raspbian jessie devido a uma falha de energia e percebi que os sshfs se tornam seriamente instáveis. As pastas seriam montadas corretamente, mas depois de algum tempo eu não conseguiria conectar-me a elas e o raspberry pi congelaria se eu quisesse listar o conteúdo das montagens.

O que eu tentei foi:

  1. reconexão usada no fstab
  2. usou o ServerAliveInterval e ServerAliveCountMax no arquivo .ssh / config, mas sem sucesso.
  3. outras soluções que li na maioria dos fóruns.

mas sem dados! Até eu modificar o arquivo fstab da seguinte maneira:

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

E funciona! Não há mais desconexões! Parece que o sshfs não lê o arquivo de configuração ssh por algum motivo e os sinais keep alive nunca foram enviados.


3

Isso soa como um trabalho para autofs. É bastante hábil em lidar com montagens de rede de vários tipos (nfs, samba, sshfs, você escolhe) e perceber quando essas coisas precisam ser remontadas. Ele também pode desmontá-los após períodos de desuso e montá-los quando uma solicitação do sistema de arquivos é feita.


11
O autofs fará a conexão sob demanda e poderá desmontar quando estiver ocioso (o que reduz a janela de tempo problemática), mas não ajudará se o sshfs travar porque o servidor foi desconectado.
Gilles 'SO- deixa de ser mau'

1

Se ainda houver pessoas com esse problema, ainda não consegui consertá-lo. Eu encontrei uma solução alternativa de trabalho.

O script ruby ​​a seguir fez o truque. Ele cria uma pasta chamada "keepalive" repetidamente. Apenas continue executando isso até o 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

Não sei por que isso funciona. Mas parece resolver o meu problema onde estou inativo por um minuto e tudo congela. Ele apenas tenta criar uma pasta no ponto de montagem e isso parece impedir que ela desconecte e congele tudo de alguma forma.


6
Bem, se isso funcionar para você, você não precisa de um interpretador de script e ruby. Uma única linha faria tão bem:while true; do mkdir -p /x/y; sleep 2; done
mivk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.