2013-07-16 16 views
6

Montuję zdalny system plików za pomocą sshfs. Jeśli limit czasu połączenia ssh może spowodować zawieszanie się innych aplikacji (np. Sesja vim z otwartym tylko lokalnym plikiem). Odzyskanie systemu trwa około 10 minut. Zdarza się to, nawet jeśli podłączę zdalny system plików tylko do odczytu. Czemu? Czy istnieje sposób na zamontowanie sshfs, aby nie powodowało zawieszania się innych aplikacji podczas korzystania z niewiarygodnego połączenia (np. Wi-Fi)? Nie potrzebuję czegoś solidnego, po prostu muszę mieć możliwość przeglądania plików na komputerze zdalnym, może być tylko do odczytu.Montowanie sshfs na niepewnym połączeniu

Używam lubuntu 12.10.

$sshfs -V 
SSHFS version 2.4 
FUSE library version: 2.9.0 
fusermount version: 2.9.0 
using FUSE kernel interface version 7.18 

Odpowiedz

1

Można grać trochę z opcjami sshfs, na przykład, umożliwia kompresję, automatycznego odnawiania połączenia oraz flagę nodelay dla TCP:

-C  equivalent to '-o compression=yes' 
-o reconnect 
-o workaround=LIST 
    [no]nodelaysrv 
       set nodelay tcp flag in ssh (default: off) 

sshfs server:/srv/homes /mnt/mountpoint -C -o reconnect -o workaround=nodelaysrv 

Ale co ma mi dać lepsze wyniki jest używając NFS, nie mam opóźnień, które miałem z sshfs i jest całkiem standardowy w środowisku * nix, możesz wyeksportować swój katalog z opcją tylko do odczytu, co daje dodatkową szybkość. Chociaż pamiętaj, że NFS nie jest protokołem szyfrowanym.

Serwer:

# File: /etc/exports 
/srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) 

Klient:

mount server:/srv/homes /mnt/mountpoint 
+4

-1 ... za polecanie niezaszyfrowanego połączenia zaszyfrowanego bez żadnego ostrzeżenia – kubanczyk

7

Zastosowanie -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Te ServerAlive opcje powodować błędy I/O, aby wyskoczyć po jednej minuty awarii sieci. Bez tych opcji, procesy, które doświadczają zawieszenia I/O wydają się spać w nieskończoność, nawet po sshfs dostaje reconnect 'ed.

1

Monitoruj zdalny host i zakończ lokalny proces sshfs, jeśli podejrzewasz, że strona zdalna została usunięta. Możesz to zrobić na wiele różnych sposobów. Na przykład zacząć pingowanie to tak, że w pewnym sensie bash:

mountpoint=~/mnt/google 

sshfs -o reconnect,ServerAliveInterval=5,ServerAliveCountMax=3 [email protected]:/ "$mountpoint" 

while : 
do 
    if ping -c 3 google.com 
    then 
    echo "google.com is still up" 
    else 
    # find sshfs pid 
    sshfsPids=$(ps -C sshfs -f | grep "$mountpoint" | grep -v grep | awk '{print $2}' | tr '\n' ' ') 
    kill -SIGTERM "$sshfsPids" 
    fi 
done 

Jeśli jesteś ok, aby używać zewnętrznego podejścia watchdog dla połączenia pod ten projekt: https://github.com/RuralYak/sshfs-watchdog który robi prawie to samo, ale w bardziej wyrafinowany sposób

Powiązane problemy