Вопрос или проблема
У нас есть клиент NFS, который выводит в сообщения следующую ошибку:
kernel: nfs: server nfsserver not responding, timed out
она выводится примерно каждую минуту. Обычно я предполагаю, что возникли проблемы с коммуникацией или блокировкой портов.
Но вот что интересно, смонтированная NFS-общая папка работает как ожидалось, мы можем читать/записывать из нее с ожидаемой пропускной способностью!
Оба сервера и клиента работают на RHEL7, клиент монтирует ее с следующими параметрами:
rw,vers=4.1,user,auto
timeo
и retrans
установлены по умолчанию (600 и 2). У нас много клиентов, которые подключаются к этому NFS-серверу, и только один из них испытывает эту проблему, все клиенты монтируют общий ресурс с теми же параметрами и из разных сетей.
Запустите dmesg -T
Возможно, вы увидите запись в логе вида
nfs: server name.of.server.or.ip not responding, timed out
Попробуйте пинговать name.of.server.or.ip и наладить его или исправить маршрут к нему.
Проверьте монтирования, выполните ‘mount |grep nfs’
Возможно, вы увидите что-то такое: (мой акцент на hard)
name.of.server.or.ip:/mnt/pool-1/thing on /thing type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,**hard**,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.26.24.18,local_lock=none,addr=10.26.2.10)
Под учетной записью root попробуйте umount /thing
, если (КОГДА) эта команда зависнет, то Ctrl-C и также посмотрите https://unix.stackexchange.com/questions/722712/nfs-causes-linux-system-to-hang-doing-ls-or-df-for-example
Попробуйте следующее (это тоже, скорее всего, не сработает, Ctrl-C для отмены):
mount -o remount /nfs/mountpoint
Если это не удалось, то можно принудительно размонтировать. ОБРАТИТЕ ВНИМАНИЕ, что это может вызвать повреждение – однако риск тот же, что и при перезагрузке.
umount -f /nfs/mountpoint
Это должно сработать. Теперь проблема была вызвана жестким монтажом nfs. Отредактируйте /etc/fstab и измените точки монтирования nfs, добавив в них soft
. Без soft
жесткое монтирование — это установка по умолчанию, которая вызывает подвисание диска.
vi /etc/fstab
name.of.server.or.ip::/mnt/pool-1/thing /thing nfs soft,bg,defaults 0 0
ИЛИ просто закомментируйте неработающие монтирования nfs в fstab.
Ответ или решение
Ваша задача связана с ошибкой, которая возникает на клиенте NFS и регистрируется в системных журналах как:
kernel: nfs: server nfsserver not responding, timed out
Сначала рассмотрим теоретическую часть вопроса. NFS (Network File System) — это протокол сетевого доступа к файловым системам, который позволяет клиентам монтировать удаленные файловые системы как локальные. Этот механизм позволяет приложениям работать с удаленными файлами как с обычными файлами на локальном компьютере. Однако, несмотря на удобство использования, NFS может сталкиваться с проблемами задержек и таймаута, особенно в средах с ненадежной сетью или неправильно настроенными сетевыми параметрами.
Ошибка «server not responding, timed out» обычно указывает на проблемы с коммуникацией между NFS клиентом и сервером. Это может быть вызвано несколькими проблемами: перегрузкой сети, потерей пакетов, блокировкой портов файерволом, или проблемами с маршрутизацией. Однако в вашем случае, несмотря на регулярные сообщения об ошибке, NFS-ресурс продолжает функционировать корректно, что свидетельствует о нормальном R/W (чтение/запись) доступе с ожидаемой пропускной способностью. Данный факт усложняет диагностику.
Теперь перейдем к примеру того, как подобная ошибка может быть решена. Первая рекомендация — провести проверку сетевого подключения. Вы можете использовать утилиту ping
для проверки доступности сервера, что может выявить нестабильность соединения. Если ping
показывает стабильное соединение, проблема, вероятно, кроется в конфигурации клиента или сервера NFS.
На уровне конфигурации полезно проверить параметры монтирования, используемые для подключения NFS. В вашем случае параметры включают:
rw,vers=4.1,user,auto
Важно также учесть, что стандартные значения для timeo
(600) и retrans
(2) могут не всегда быть оптимальны. Параметр timeo
определяет таймаут для операций RPC (в десятых долях секунды), а retrans
— число повторных попыток перед отказом. Возможно, имеет смысл настроить более агрессивные параметры попыток соединения, особенно в сетях с высокой латентностью.
Еще одна важная деталь — использование «жесткого» (hard
) или «мягкого» (soft
) монтирования. По умолчанию используется жесткое монтирование, что делает систему более устойчивой, но в то же время подверженной зависаниям в случае потери соединения. В таком режиме любая операция ввода-вывода будет приостановлена до восстановления соединения. Это и объясняет отсутствие видимых нарушений в работе; клиент просто ждет восстановления соединения.
В контексте решения вы можете рассмотреть изменение типа монтирования на «мягкий» (soft
). Это сократит время ожидания операций ввода/вывода при задержках в сети, однако увеличивает риск потери данных при серьезных проблемах с доступом.
Вот пример строки /etc/fstab с параметром soft
:
name.of.server.or.ip:/mnt/pool-1/thing /thing nfs soft,bg,defaults 0 0
Таким образом, изменение параметра монтирования может помочь сократить время, в течение которого система считает сервер недоступным.
Кроме того, важно проверить журналы как на стороне клиента, так и на стороне сервера, чтобы выявить любые аномалии или дополнительные ошибки. Используйте dmesg -T
для просмотра системных сообщений, которые могут дать более полное представление о проблеме.
В качестве заключения, каждое сетевое окружение уникально и требует своего подхода. Регулярные тестирования и настройки сети, а также мониторинг производительности могут помочь предотвратить подобные проблемы в будущем. Надеемся, что представленные рекомендации и примеры помогут вам в решение проблемы и улучшении стабильности работы вашего NFS-сервиса.