Вопрос или проблема
Я монтирую четыре сервера (3 через cifs
, 1 через sshfs
) с использованием autofs
.
auto.master
/- /etc/auto.all --timeout=60 --ghost
auto.all
/mnt \
/server1 -fstype=cifs,rw,credentials=/etc/.smbcredentials.txt,uid=1000,file_mode=0775,dir_mode=0775,users ://server1/ \
/server2/ -fstype=cifs,rw,credentials=/etc/.smbcredentials.txt,uid=1000,file_mode=0775,dir_mode=0775,users ://server2/ \
/server3 -fstype=cifs,rw,credentials=/etc/.smbcredentials.txt,uid=1000,file_mode=0775,dir_mode=0775,users ://server3/ \
/server4 -fstype=fuse,rw,allow_other,uid=1000,users,reconnect,cache=yes,kernel_cache,compression=no,large_read,Ciphers=arcfour :sshfs\#user@server\:/home
“`
Все в порядке, когда я делаю чистую загрузку. Я подключаюсь к своей сети (с использованием VPN), и autofs
монтирует все.
Проблема
Когда происходит отключение сети, например, когда я перевожу ноутбук в режим гибернации или подключаюсь к другой сети, autofs
вызывает зависание моего проводника (dolphin), так как он пытается загрузить удаленный ресурс бесконечно.
Он становится неотзывчивым и даже не реагирует на команды SIGTERM. Иногда мне везет, и вызов sudo service autofs stop
и sudo automount
помогает решить проблему. Однако часто он все равно остается зависшим. Иногда из-за этого даже весь мой док зависает, делая все приложения недоступными. Тогда мне приходится делать полную перезагрузку..
Я искал решение этих ситуаций с autofs
уже несколько недель. До использования autofs
у меня все было смонтировано через /etc/fstab
, но это также требовало ручного перемонтирования после каждого сбоя сети.
Я думал, что autofs
поможет мне, но он приносит еще больше проблем.
Вопросы
- Есть ли какая-то деталь, которую я упустил, и которая могла бы решить проблему замерзания?
- Есть ли совершенно другой подход, который может оказаться более подходящим для моей ситуации, чем
autofs
?
PS: Я использую Kubuntu 16.04
Если автомонтирования все еще заблокированы / медленно перемонтируются, когда сервер снова стал доступным, может помочь явное их перезапуск. Сначала используйте:
systemctl list-units --type=automount
чтобы увидеть, какие автомонтирования активны под каким именем, а затем используйте:
systemctl stop UNIT
или:
systemctl restart UNIT
по мере необходимости. UNIT – это имя из первоначального списка. Это помогло мне разблокировать систему, которая все еще пыталась получить доступ к отсутствующему серверу NFS, несмотря на то что автомонтирование уже было удалено из fstab и демон перезагружен.
вы можете добавить опцию “soft”, чтобы генерировать ошибку, когда время ожидания превышено. По умолчанию вы используете жесткое монтирование, что означает… оно будет удерживать монтирование nfs и бесконечно пытаться снова.
ПРЕДУПРЕЖДЕНИЕ: мягкое монтирование прервет любые ввод-вывод операции, как только время ожидания будет превышено из-за ошибок (таймаут сети и т.д.), если в кэше есть что-то, что не записано на монтировку nfs, существует вероятность, что вы можете это потерять.
Ответ или решение
Чтобы решить проблему зависания системы, вызванную autofs
после отключения сетевого соединения, необходимо тщательно рассмотреть настройки и методы управления автоматически монтируемыми файловыми системами. В вашем случае, вы монтируете ресурсы через cifs
и sshfs
с использованием autofs
. Хотя autofs
обеспечивает автоматическое монтирование при обнаружении первой попытки доступа к каталогу, он может вызывать проблемы при потере сетевого соединения, что приводит к зависанию системы, как это наблюдается в вашей установке.
Теоретические Основания
-
Поведение
autofs
при сбоях сети:
autofs
предназначен для динамического монтирования сетевых ресурсов, что избавляет от необходимости постоянного монтирования файловых систем, как в случае использования/etc/fstab
. Однако,autofs
может вызвать зависание системы при потере сетевого соединения, особенно если используется опция "hard mount" (монтирование с жесткими зависимостями), которая подразумевает бесконечные попытки повторного подключения. -
Опции монтирования
soft
иhard
:
При монтировании сетевых ресурсов можно использовать опциюsoft
, которая позволяет выдать ошибку после истечения времени ожидания, если подключение не удалось. Это предотвратит долгосрочные зависания, однако может привести к потере данных, если они не были записаны. -
Нестабильность при гибернации и смене сети:
Частое переключение сети и использование гибернации может приводить к неожиданным ошибкам подключения, которыеautofs
не всегда может обработать корректно, из-за чего приложения, работающие с файлами из монтируемых ресурсов, не могут завершить свои операции.
Практическое Применение
-
Изменение конфигурации монтирования:
Рассмотрите возможность использования опцииsoft
для вашихcifs
монтирований. Это позволит избежать долгосрочного зависания, однако следите за возможными потерями данных в случае неудачных записей./mnt/server1 -fstype=cifs,rw,soft,credentials=/etc/.smbcredentials.txt,uid=1000,file_mode=0775,dir_mode=0775,users ://server1/
-
Управление службами
systemd
:
Используйте утилитыsystemctl
для управления автоподключениями. Если система зависла, попробуйте остановить или перезапустить соответствующие автоматические монтирования:systemctl list-units --type=automount
Замените
UNIT
на конкретное имя устройства и выполните:systemctl stop UNIT
или
systemctl restart UNIT
Это может помочь снять зависание без перезагрузки системы.
-
Мониторинг и автоматизация с помощью скриптов:
Для более надежного управления, разработайте скрипты, которые автоматически проверяют состояние сетевых подключений и перезапускаютautofs
или соответствующие монтирования при сбоях сети.
Применение в Вашей Ситуации
-
Оценка текущих настроек:
Внимательно изучите текущие параметры монтирования в файлеauto.all
и рассмотрите возможность добавления опцииsoft
там, где это возможно, как указано выше. -
Автоматизация управления системой:
Используйте сочетание команд оболочки и скриптов, чтобы автоматически реагировать на изменения состояния сети. Например, создание скрипта, который будет исполнять командыsystemctl
при восстановлении подключения через VPN или после выхода из гибернации. -
Регулярное обновление системы:
Учитывая, что вы используете Kubuntu 16.04, возможно, стоит рассмотреть обновление до более новой версии операционной системы, поскольку это может исправить известные проблемы с сетевыми драйверами иautofs
.
Следуя этим рекомендациям, вы сможете минимизировать случаи зависания системы и улучшить управление сетевыми монтированиями, обеспечивая более стабильную работу вашего рабочего окружения.