Вопрос или проблема
У меня есть ноутбук с Debian, который я в основном использую в своей домашней Wi-Fi сети. Чтобы получить доступ к некоторым сетевым дискам, у меня есть несколько строк, как эти в /etc/fstab:
disk:/media/vol0 /home/disk0 nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=10
disk:/media/vol1 /home/disk1 nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=10
Это отлично работает при доступе, когда я открываю директорию /home/disk1 на ноутбуке, диск монтируется. Проблема возникает при выключении, поскольку мой Wi-Fi — это пользовательское соединение, оно отключается, когда я выхожу из системы. В этом случае размонтирование NFS застревает. Ранее было 90 секунд задержка, что было немного раздражающим, но приемлемым, но после последнего обновления Debian, кажется, что задержка стала бесконечной для повторной попытки размонтирования NFS-диска, когда сервер недоступен. (Я пока не ждал долго, это согласно сообщениям во время завершения работы) Это означает, что мне приходится принудительно выключать машину, и я никогда не получаю чистое размонтирование / наряду с другими проблемами.
Коренная причина этой проблемы, конечно, в том, что у меня есть определенная пользователем сеть и определенный системой NFS монтирование. Я (думаю, что) знаю, как определить подключение Wi-Fi как системную службу, но это усложнит другие вещи, поэтому мне интересно:
- Есть ли настройка, чтобы сделать NFS пользовательским монтированием, чтобы оно отключалось до того, как соединение Wi-Fi будет отключено? или,
- Как я могу установить таймаут для размонтирования?
(Когда я задавал этот вопрос, я понял, что возможным обходным решением было бы установить таймаут бездействия на монтирование NFS, чтобы оно автоматически размонтировалось, когда оно бездействует в течение некоторого времени, но для этого таймаут должен быть настолько коротким, чтобы он успевал размонтироваться за время от последнего процесса, обращающегося к монтированию, до отключения Wi-Fi, так что, возможно, это не подойдет)
Значение x-systemd.requires=network-online.target было предложено на форуме как способ сообщить systemd, что монтирование требует активного подключения к сети, второй был предложен @ipor-sircer в комментарии к вашему вопросу.
Вам, возможно, нужно перезагрузить systemd sudo systemctl daemon-reload
и перемонтировать разделы, чтобы изменения вступили в силу.
У меня была похожая проблема, моя система не могла завершить работу из-за того, что точки монтирования ждали NFS, я добавил x-systemd.requires=network-online.target,_netdev
в мой fstab, и теперь моя система может завершать работу без проблем.
Я нашел это в ArchWiki:
Если завершение работы/перезагрузка задерживается слишком долго из-за NFS, включите NetworkManager-wait-online.service, чтобы гарантировать, что NetworkManager не завершится до того, как NFS тома будут размонтированы.
Ответ или решение
Как решить проблему с размонтированием NFS при завершении работы системы
Ваша проблема связана с тем, что NFS-монты, определенные в /etc/fstab
, продолжают ждать завершения работы, когда ваша Wi-Fi сеть отключается во время процесса завершения сеанса пользователя. Это приводит к зависанию размонтирования и, как следствие, требует принудительной остановки системы, что является нежелательным и может привести к повреждению файловой системы.
Возможные решения проблемы:
-
Изменение настроек в
/etc/fstab
:Вы можете попробовать добавить необходимые параметры в файл
/etc/fstab
, чтобы система знала, что ваши NFS-монты зависят от состояния сети. Например, добавив следующие параметры:disk:/media/vol0 /home/disk0 nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=10,x-systemd.requires=network-online.target,_netdev disk:/media/vol1 /home/disk1 nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=10,x-systemd.requires=network-online.target,_netdev
x-systemd.requires=network-online.target
указывает системе, что эти монтирования требуют активного сетевого подключения._netdev
помогает системе понимать, что данный ресурс является сетевым.
После внесения изменений в
fstab
, выполните команды:sudo systemctl daemon-reload sudo mount -a
-
Активация
NetworkManager-wait-online.service
:Убедитесь, что служба
NetworkManager-wait-online.service
активирована. Эта служба гарантирует, что NetworkManager не завершится до тех пор, пока все сетевые соединения не будут установлены. Для активации выполните:sudo systemctl enable NetworkManager-wait-online.service
-
Ручное управление размонтированием:
Если вышеуказанные меры не помогли, можно настроить команду для автоматического размонтирования (например, используя системные службы) перед отключением сети. Вы можете создать набросок службы systemd, которая будет ответственной за размонтирование ваших NFS-дисков во время завершения работы системы.
Пример файла службы
/etc/systemd/system/nfs-unmount.service
:[Unit] Description=Unmount NFS Shares Before=shutdown.target [Service] Type=oneshot ExecStart=/bin/umount -a -t nfs4 [Install] WantedBy=halt.target reboot.target
После создания службы, активируйте её:
sudo systemctl enable nfs-unmount.service
-
Настройка тайм-аутов:
Вы также можете настроить тайм-ауты размонтирования для NFS-дисков в параметрах монтирования. Это можно сделать с помощью добавления
timeo=<мс>
в опции монтирования. Например:disk:/media/vol0 /home/disk0 nfs4 noauto,x-systemd.automount,x-systemd.device-timeout=10,timeo=100
Здесь значение
timeo
указывает, сколько миллисекунд система будет пытаться размонтировать диск, прежде чем прекратит попытки. -
Идея использования таймаута при бездействии:
Как вы упомянули в вашем вопросе, установка таймаута бездействия для NFS-дисков также может быть вариантом. Это может быть полезным решением, однако, стоит учитывать, что timeout должен быть достаточно коротким, чтобы он сработал до отключения Wi-Fi.
Заключение
Приведенные решения помогут использовать NFS в Debian более эффективно, избегая зависаний при завершении работы системы. Рекомендуется протестировать предложенные изменения по одному, чтобы определить наиболее подходящий для вашей конфигурации. Не забывайте делать резервные копии и выполнять тестирование в безопасной среде, особенно если изменения затрагивают системные службы.