Qual è il modo migliore per gestire le disconnessioni dei montaggi sshfs da parte del server?


58

Ho diverse directory montate su sshfs . A volte ricevo disconnessioni dal server (non configurabile da me). Di solito monto le directory in questo modo

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

Quando un server si disconnette, il sottosistema sshfs non smonta / libera la directory ma la blocca inaccessibile. Il supporto è ancora visibile durante la digitazione mount. Quando scrivo

ls /mnt/example

il processo viene bloccato (anche Ctrl+ cnon aiuta). Lo faccio quindi

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

C'è un modo migliore per affrontarlo? Ovviamente sshfs dovrebbe fare l'umount e ripulire ... L'ideale sarebbe riconnettersi automaticamente.



4
qualche soluzione che utilizza software gestito ?
Sebastian,

Risposte:


45

Puoi eseguire sshfs con l'opzione "riconnetti". Usiamo sshfs con PAM / automount per condividere i file del server per ogni workstation nella nostra rete. Usiamo -o riconnetti come parametro per sshfs, principalmente perché i nostri utenti hanno sospeso i loro computer e al risveglio sshfs non si riconnetterebbe (o rispondeva, o altro).

Per esempio:

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

Solo una nota, se il computer remoto è davvero spento, sshfs potrebbe non rispondere per molto tempo.


11

Questo può essere risolto diminuendo il timeout. Aggiungi quanto segue a $HOME/.ssh/configo /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Ciò comporta un timeout di 45 secondi.


3
Ciò sarebbe d'aiuto solo se il problema è colpa di SSH. C'è un problema più grande che sshfsnon affronta con sshgrazia la morte del processo sottostante .
bahamat,

In effetti questa è solo una soluzione alternativa e dovrebbe essere risolta all'interno di sshfs.
Thor,

Ma solo una soluzione alternativa che si occupa di una causa su molti. Il suo problema potrebbe non avere nulla a che fare con keepalives. La natura della domanda è meno sulla causa e più sulla pulizia di uno stato coerente.
bahamat,

5

Ho un server che utilizzo per l'archiviazione e per mancanza di spazio in cui vivo, lo conservo in un'altra posizione. Per portare i file nella mia rete uso un raspberry pi che monta i file dal server usando sshfs.

Di recente ho dovuto passare a raspbian jessie a causa di un'interruzione di corrente e mi sono reso conto che sshfs è diventato gravemente instabile. Le cartelle sarebbero state montate correttamente, ma dopo un po 'non sarei stato in grado di connettermi ad esse e il raspberry pi si congelerebbe se volessi elencare il contenuto dei supporti.

Quello che ho provato è stato:

  1. usato riconnettere in fstab
  2. usato ServerAliveInterval e ServerAliveCountMax nel file .ssh / config ma senza risultati.
  3. altre soluzioni che ho letto sulla maggior parte dei forum.

ma niente dadi! Fino a quando non ho modificato il file fstab come segue:

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 funziona! Niente più disconnessioni! Sembra che sshfs non legga il file di configurazione ssh per qualche motivo e i segnali keep alive non siano mai stati inviati.


3

Sembra un lavoro per autofs. È piuttosto abile nel gestire supporti di rete di vario tipo (nfs, samba, sshfs, lo chiami) e notando quando quelle cose hanno bisogno di essere rimontate. Può anche occuparsi di smontarli dopo periodi di inutilizzo e montarli quando viene effettuata una richiesta del file system.


11
autofs eseguirà la connessione su richiesta e può smontare quando è inattivo (il che riduce la finestra temporale problematica), ma non sarà d'aiuto se sshfs si blocca perché il server si è disconnesso.
Gilles 'SO- smetti di essere malvagio' il

1

Se ci sono ancora persone che riscontrano questo problema, non potrei ancora risolverlo. Ho trovato una soluzione alternativa.

Il seguente script ruby ​​ha funzionato. Crea una cartella chiamata "keepalive" più e più volte. Continua a farlo funzionare fino all'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

Non so perché funzioni. Ma sembra risolvere il mio problema quando sono inattivo per un minuto e tutto si blocca. Cerca solo di creare una cartella nel punto di montaggio e questo sembra impedirgli di disconnettersi e congelare tutto in qualche modo.


6
Bene, se funziona per te, allora non hai bisogno di una sceneggiatura e di un interprete ruby. Una sola riga farebbe altrettanto bene:while true; do mkdir -p /x/y; sleep 2; done
mivk il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.