Как предотвратить SSHFS, монтируют замораживание после того, как изменяющееся соединение после приостанавливают?

Я использую SSHFS с reconnect атрибут. Это хорошо работает, когда я приостанавливаю ноутбук и запускаю его снова. Но проблема состоит в том, когда я беру ноутбук где-нибудь - значение другого IP, и другое соединение (мог бы быть Wi-Fi или Ethernet).

Смонтированная папка SSHFS просто замораживает и также замораживает все приложения, которые использовали ее. И единственное решение его, которое я имею до сих пор, состоит в том, чтобы использовать

sudo umount -f /mnt/sshfs_folder

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

О, и у меня есть Ubuntu 14.04, но я предполагаю, что это SSHFS конкретный.

5
задан 24 June 2016 в 06:55

2 ответа

Более полный ответ здесь: SSHFS - автоматический снова соединяются .

Короче говоря, используйте:

sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 server:/path/to/mount`
4
ответ дан 23 November 2019 в 09:32

Я написал сценарий оболочки под названием sshfs-reconnect со следующим:

while true
do
    sshfs -f -o ConnectTimeout=3,ConnectionAttempts=1,ServerAliveInterval=5,ServerAliveCountMax=3 $@
    echo "disconnected from $@"
    sleep 3
    echo "retry $@ ..."
done

Если я оставлю его работающим в фоновом режиме, он будет вести себя в большинстве случаев так, как хотелось бы:

  • Если сервер исчезнет ненадолго, процессы, обращающиеся к монтированию, будут зависать до тех пор, пока сервер не вернется
  • Если сервер исчезнет слишком надолго (в данном случае около 15 секунд), то ожидающие процессы получат ошибку ввода-вывода
  • Если мы попытаемся снова получить доступ к монтированию, когда сервер отсутствует, мы получим либо ошибку «конечная точка транспорта не подключена», либо файл не найден (я бы предпочел получить только ошибку транспорта, но не понял, как для этого)
  • После того, как сервер вернется, мы снова сможем получить доступ к монтированию без вмешательства

Подробности об этом решении:

  • Я не использую здесь -o reconnect, потому что я не хочу, чтобы sshfs пытался переподключиться бесконечно, так как это приводит к тому, что любой процесс, ожидающий в смонтированной файловой системе, зависает навсегда. Вместо этого я позволяю sshfs отключаться по истечении определенного тайм-аута и позволяю этим ожидающим процессам корректно завершиться.
  • Параметры ServerAliveInterval=5,ServerAliveCountMax=3 говорят, что ssh проверяет каждые 5 секунд, отвечает ли удаленный сервер. Если он не получает ответа после 3 таких проверок, то автоматически отключается. Таким образом, любой процесс, ожидающий этого монтирования, должен зависнуть максимум на 15 секунд.
  • Параметры ConnectTimeout=3,ConnectionAttempts=1 необходимы, так как в противном случае ssh будет очень долго ждать при попытке переустановить соединения, что снова приведет к зависанию других процессов, если они попытаются получить доступ к монтированию во время в этот раз.
4
ответ дан 11 September 2020 в 18:52

Другие вопросы по тегам:

Похожие вопросы: