Jaka jest lepsza metoda radzenia sobie z rozłączeniami serwerów z mocowaniami sshfs?

58

Mam kilka katalogów zamontowanych przez sshfs . Czasami dostaję rozłączenie z serwerem (nie konfigurowane przeze mnie). Zwykle montuję takie katalogi

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

Kiedy serwer rozłącza się, podsystem sshfs nie umountuje / zwalnia katalogu, lecz blokuje go niedostępnym. Mocowanie jest nadal widoczne podczas pisania mount. Kiedy piszę

ls /mnt/example

proces zostaje zablokowany (również Ctrl+ cnie pomaga). Dlatego też

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

Czy istnieje lepszy sposób, aby sobie z tym poradzić? Oczywiście sshfs powinien wykonać umount i posprzątać ... Idealnie byłoby połączyć się automatycznie.

Sebastian
źródło
Jest to zadanie dla automatycznego ponownego łączenia tunelu TCP .
Gilles „SO- przestań być zły”
4
jakieś rozwiązanie wykorzystujące utrzymywane oprogramowanie?
Sebastian

Odpowiedzi:

45

Możesz uruchomić sshfs z opcją „reconnect”. Używamy sshfs z PAM / automount do udostępniania plików serwera dla każdej stacji roboczej w naszej sieci. Używamy -o reconnect jako parametru dla sshfs, głównie dlatego, że nasi użytkownicy zawiesili swoje komputery i po przebudzeniu sshfs nie nawiąże ponownego połączenia (ani nie zareaguje, ani nic takiego).

Na przykład:

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

Tylko uwaga, jeśli zdalny komputer naprawdę nie działa, sshfs może długo przestać odpowiadać.

MV
źródło
11

Można to obejść, zmniejszając limit czasu. Dodaj następujące elementy do $HOME/.ssh/configlub /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Powoduje to przekroczenie limitu czasu 45 sekund.

Thor
źródło
3
Pomogłoby to tylko wtedy, gdy problem jest wina SSH. Istnieje większy problem, sshfsktóry nie radzi sobie ze śmiercią w sshprocesie leżącym u podstaw .
bahamat
Rzeczywiście jest to tylko obejście problemu i powinno zostać naprawione w sshfs.
Thor
Ale tylko obejście, które dotyczy jednej z wielu przyczyn. Jego problem może nie mieć nic wspólnego z utrzymywaniem życia. W naturze pytania chodzi nie tyle o przyczynę, co o oczyszczenie do spójnego stanu.
bahamat
5

Mam serwer, którego używam do przechowywania i z powodu braku miejsca w miejscu zamieszkania, trzymam go w innym miejscu. Aby wprowadzić pliki do mojej sieci, używam raspberry pi, które montuje pliki z serwera za pomocą sshfs.

Ostatnio musiałem zaktualizować system do raspbian jessie z powodu awarii zasilania i zdałem sobie sprawę, że sshfs stają się poważnie niestabilne. Foldery byłyby poprawnie zamontowane, ale po pewnym czasie nie byłbym w stanie się z nimi połączyć, a Raspberry Pi zawiesiłby się, gdybym chciał wymienić zawartość wierzchowców.

Próbowałem:

  1. używane ponownie połączyć w fstab
  2. używał ServerAliveInterval i ServerAliveCountMax w pliku .ssh / config, ale bezskutecznie.
  3. inne rozwiązania, które czytałem na większości forów.

ale żadnych kości! Aż zmodyfikowałem plik fstab w następujący sposób:

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

I to działa! Nigdy więcej nie rozłącza się! Wygląda na to, że sshfs z jakiegoś powodu nie czyta pliku konfiguracyjnego ssh, a sygnały podtrzymania nigdy nie zostały wysłane.

Lucian
źródło
3

To brzmi jak praca dla autofs. Jest raczej biegły w obsłudze różnego rodzaju montowań sieciowych (nfs, samba, sshfs, jak to nazywasz) i zauważaniu, kiedy te rzeczy wymagają ponownego montażu. Może również zadbać o ich odmontowanie po okresach nieużywania i zamontowanie ich po wysłaniu żądania systemu plików.

Caleb
źródło
11
autofs wykona połączenie na żądanie i może odmontować, gdy jest bezczynny (co zmniejsza problematyczne okno czasowe), ale nie pomoże, jeśli sshfs zawiesi się, ponieważ serwer się rozłączył.
Gilles „SO- przestań być zły”
1

Jeśli nadal są ludzie, którzy napotykają ten problem, nadal nie mogę go naprawić. Znalazłem działające obejście.

Poniższy skrypt ruby ​​załatwił sprawę. Ciągle tworzy folder o nazwie „keepalive”. Po prostu uruchom to do nieskończoności.

$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

Nie wiem, dlaczego to działa. Ale wydaje się, że to rozwiązuje mój problem, gdy jestem nieaktywny przez minutę i wszystko zawiesza się. Po prostu próbuje utworzyć folder w punkcie montażu, co wydaje się powstrzymywać go przed rozłączaniem i zawieszaniem wszystkiego.

Vudew
źródło
6
Cóż, jeśli to Ci odpowiada, nie potrzebujesz interpretera skryptów i ruby. Pojedyncza linia byłaby równie dobra:while true; do mkdir -p /x/y; sleep 2; done
mivk