Монтаж sshfs на ненадежное соединение

Я монтирую удаленную файловую систему с помощью sshfs. Если время соединения ssh истекает, это может привести к зависанию других приложений (например, сеанс vim с открытым только локальным файлом). Восстановление системы занимает ~ 10 минут. Это происходит, даже если я монтирую удаленную файловую систему только для чтения. Почему? Есть ли способ смонтировать sshfs так, чтобы это не приводило к зависанию других приложений при использовании ненадежного соединения (например, Wi-Fi)? Мне не нужно что-то надежное, мне просто нужно иметь возможность просматривать файлы на удаленном компьютере, может быть только для чтения.

Я использую 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

person John Newman    schedule 16.07.2013    source источник


Ответы (3)


Используйте 1_

Эти ServerAlive параметры вызывают появление ошибок ввода-вывода после одной минуты сбоя сети. Без этих параметров процессы, которые испытывают зависание ввода-вывода, кажутся бездействующими на неопределенный срок, даже после того, как sshfs будет reconnect'ed.

person kubanczyk    schedule 27.10.2014

Вы можете немного поиграть с параметрами sshfs, например, включив сжатие, автоматическое переподключение и флаг nodelay для 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

Но что дало мне лучшие результаты, так это использование NFS, у меня нет задержек, которые у меня были с sshfs, и это довольно стандартно в среде * nix, вы можете экспортировать свой каталог с опцией только для чтения, что дает вам дополнительную скорость. Хотя учтите, что NFS не является зашифрованным протоколом.

Сервер:

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

Клиент:

mount server:/srv/homes /mnt/mountpoint
person rgamez    schedule 03.08.2013
comment
-1 ... за рекомендацию незашифрованного соединения вместо зашифрованного без предупреждения - person kubanczyk; 26.10.2014

Наблюдайте за удаленным хостом и завершите локальный процесс sshfs, если вы считаете, что удаленная сторона ушла. Вы можете сделать это разными способами. Например, начните пинговать его вот так в 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

Если вы можете использовать внешний сторожевой таймер для своего соединения, рассмотрите этот проект: https://github.com/RuralYak/sshfs-watchdog, который делает то же самое, но более изощренным способом.

person RuralYak    schedule 17.03.2017