Как лучше справиться с отключениями от сервера монтируемых sshfs?


58

У меня есть несколько каталогов, смонтированных через sshfs . Иногда я получаю отключение от сервера (не настраивается мной). Я обычно монтирую каталоги вот так

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

Когда сервер отключается, подсистема sshfs не размонтирует / освобождает каталог, а блокирует его недоступным. Крепление все еще видно при наборе mount. Когда я печатаю

ls /mnt/example

процесс блокируется (также Ctrl+ cне помогает). Поэтому я делаю

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

Есть ли лучший способ справиться с этим? Очевидно, что sshfs должен выполнить размонтирование и очистить ... В идеале он будет автоматически подключаться.



4
любое решение с использованием поддерживаемого программного обеспечения?
Себастьян

Ответы:


45

Вы можете запустить sshfs с параметром «восстановить соединение». Мы используем sshfs с PAM / automount для совместного использования файлов сервера для каждой рабочей станции в нашей сети. Мы используем -oconconnect в качестве параметра для sshfs, главным образом потому, что наши пользователи приостановили работу своих компьютеров, и при пробуждении sshfs не будет повторно подключаться (или отвечать, или что-то еще).

Например:

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

Просто обратите внимание, что если удаленный компьютер действительно не работает, sshfs может перестать отвечать на запросы в течение длительного времени.


11

Это можно обойти, уменьшив время ожидания. Добавьте следующее к $HOME/.ssh/configили /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Это приводит к задержке в 45 секунд.


3
Это поможет, только если проблема связана с ошибкой SSH. Существует более крупная проблема, которая sshfsне имеет дело со смертью основного sshпроцесса изящно.
Багамат

На самом деле это всего лишь обходной путь, и его следует исправить внутри sshfs.
Тор

Но только обходной путь, который имеет дело с одной причиной из многих. Его проблема может не иметь ничего общего с keepalive. Суть вопроса заключается не столько в причине, сколько в очистке до согласованного состояния.
Багамат

5

У меня есть сервер, который я использую для хранения, и из-за нехватки места, где я живу, я храню его в другом месте. Чтобы перенести файлы в мою сеть, я использую raspberry pi, который монтирует файлы с сервера с помощью sshfs.

Недавно мне пришлось перейти на raspbian jessie из-за сбоя питания и я понял, что sshfs стал серьезно нестабильным. Папки будут правильно смонтированы, но через некоторое время я не смогу к ним подключиться, и raspberry pi зависнет, если я захочу перечислить содержимое креплений.

То, что я попробовал, было:

  1. использовал переподключение в fstab
  2. использовал ServerAliveInterval и ServerAliveCountMax в файле .ssh / config, но безрезультатно.
  3. другие решения я читаю на большинстве форумов.

но не игра в кости! Пока я не изменил файл fstab следующим образом:

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

И это работает! Нет больше отключений! Похоже, что sshfs по какой-то причине не читает конфигурационный файл ssh и сигналы поддержки активности никогда не отправлялись.


3

Это звучит как работа для авторов. Он довольно искусен в работе с сетевыми монтировками различного типа (nfs, samba, sshfs, вы называете это) и замечает, когда эти вещи нужно перемонтировать. Он также может позаботиться о размонтировании их после периодов неиспользования и монтировании при запросе файловой системы.


11
autofs выполнит подключение по требованию и может отключиться во время простоя (что уменьшает проблемное временное окно), но это не поможет, если sshfs зависает, потому что сервер отключился.
Жиль "ТАК - перестань быть злым"

1

Если все еще есть люди, сталкивающиеся с этой проблемой, я все еще не мог бы решить это. Я нашел рабочий обходной путь.

Следующий скрипт Ruby сделал свое дело. Он создает папку под названием «keepalive» снова и снова. Просто продолжайте это до бесконечности.

$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

Я не знаю, почему это работает. Но, похоже, это решает мою проблему: я неактивен на минуту и ​​все зависает. Он просто пытается создать папку в точке монтирования, и это, кажется, не дает ей отключиться и как-то заморозить все.


6
Хорошо, если это работает для вас, тогда вам не нужен скрипт и интерпретатор ruby. Одиночная строка будет делать так же хорошо:while true; do mkdir -p /x/y; sleep 2; done
mivk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.