2013-07-16 41 views
6

Tôi gắn hệ thống tệp từ xa với sshfs. Nếu kết nối ssh hết thời gian có thể khiến các ứng dụng khác bị treo (ví dụ: phiên vim chỉ mở tệp cục bộ). Phải mất ~ 10 phút để hệ thống khôi phục. Điều này xảy ra ngay cả khi tôi gắn kết hệ thống tập tin từ xa chỉ đọc. Tại sao? Có cách nào để làm sshfs gắn kết để nó sẽ không gây ra các ứng dụng khác để treo khi sử dụng kết nối không đáng tin cậy (ví dụ, wifi)? Tôi không cần một cái gì đó mạnh mẽ, tôi chỉ cần để có thể xem các tập tin trên máy tính từ xa, có thể được chỉ đọc.Gắn kết sshfs trên kết nối không đáng tin cậy

Tôi sử dụng 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 

Trả lời

1

Bạn có thể chơi một chút với các tùy chọn của sshfs, ví dụ, cho phép nén, kết nối lại tự động và nodelay cờ cho 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 

Nhưng những gì đã cho tôi kết quả tốt hơn là bằng cách sử dụng NFS, tôi không có độ trễ mà tôi có với sshfs và khá chuẩn trong môi trường * nix, bạn có thể xuất thư mục của mình bằng tùy chọn chỉ đọc cho bạn tốc độ thêm. Mặc dù lưu ý rằng NFS không phải là một giao thức được mã hóa.

Server:

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

Chủ đầu tư:

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

-1 ... để đề xuất kết nối không được mã hóa qua kết nối được mã hóa mà không có bất kỳ cảnh báo nào – kubanczyk

7

Sử dụng -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

Những ServerAlive tùy chọn này khiến các lỗi I/O để bật ra sau một phút mất mạng. Nếu không có các tùy chọn này, các quá trình trải nghiệm I/O treo dường như ngủ vô thời hạn, ngay cả sau khi sshfs được reconnect 'ed.

1

Giám sát máy chủ từ xa và chấm dứt quá trình sshfs cục bộ nếu bạn nghĩ rằng mặt từ xa đã biến mất. Bạn có thể làm điều đó theo nhiều cách khác nhau. Ví dụ bắt đầu ping nó như thế trong một cách 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 

Nếu bạn là ok để sử dụng cách tiếp cận cơ quan giám sát bên ngoài cho kết nối của bạn xem xét dự án này: https://github.com/RuralYak/sshfs-watchdog mà làm khá nhiều việc cùng nhưng theo một cách phức tạp hơn

Các vấn đề liên quan