NFS: Server is not responding, still trying — Решение зависания NFS в Linux
Архитектура ошибки и симптомы сбоя
Сообщение «NFS: Server is not responding, still trying...» генерируется подсистемой NFS Client VFS в ядре Linux. Ошибка означает, что RPC-клиент ядра отправил запрос на удаленный NFS-сервер, но не получил ответа в течение таймаута (параметр timeo). При монтировании с опцией hard (по умолчанию) ядро переводит все обращающиеся к шаре процессы в состояние беспрерывного ожидания (D-state / Uninterruptible Sleep), что блокирует файловые операции, системные утилиты (df, ls) и вызывает резкий рост Load Average.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| RPC Timeout | timeo / retrans | Время ожидания RPC ответа (в десятых долях секунды) и число повторов. |
| Hard Mount | Infinite Retry Loop | Клиент бесконечно повторяет запрос, намертво подвешивая вызвавший процесс. |
| D-State (Uninterruptible) | Process Block | Поток невозможно завершить сигналом kill -9 до ответа NFS-сервера. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка доступности RPC и NFS портов на сервере
# Проверка портов RPC (111) и NFS (2049) на стороне сервера:
rpcinfo -p nfs-server-ip
# Проверка прохождения пакетов без фрагментации (тест MTU):
ping -M do -s 8972 nfs-server-ip # Для Jumbo Frames (MTU 9000)
ping -M do -s 1472 nfs-server-ip # Для стандартного MTU 1500Сценарий 2: Аварийное принудительное размонтирование зависшей шары
Если процессы заблокированы, выполните ленивое и принудительное размонтирование:
# Принудительное размонтирование (Force + Lazy):
sudo umount -f -l /mnt/nfs_share
# Проверка зависших точек монтирования:
cat /proc/mounts | grep nfsСценарий 3: Оптимизация параметров монтирования NFS в /etc/fstab
Используйте протокол TCP, настройте таймауты и используйте безопасные параметры отказоустойчивости:
# Рекомендуемая строка в /etc/fstab (NFSv4 с таймаутом и прерыванием):
nfs-server-ip:/exported_dir /mnt/nfs_share nfs4 rw,proto=tcp,hard,intr,timeo=60,retrans=3,rsize=1048576,wsize=1048576,nofail,_netdev 0 0ITSTM выполнит тюнинг RPC-очередей ядра, настройку мультипасинга nconnect, балансировку высокопроизводительных NAS и CephFS.
Частые вопросы (FAQ)
В чем разница между опциями монтирования hard и soft в NFS?
Опция hard бесконечно повторяет RPC-запросы при обрыве связи, защищая файлы от повреждения при сбоях сети, но замораживает процессы. Опция soft при превышении таймаута возвращает ошибку EIO приложению, что предотвращает зависание процессов, но может повредить целостность баз данных.
Что дает параметр nconnect в современных ядрах Linux (NFSv4.1+)?
Опция nconnect=4 (или до 16) указывает ядру создать несколько параллельных TCP-сессий к одному NFS-серверу для одной точки монтирования, что кратно увеличивает пропускную способность сетевого хранилища.
Почему процессы в состоянии 'D' нельзя убить через kill -9?
Процесс находится в ядре внутри системного вызова драйвера ФС (Task Uninterruptible Sleep). Ядро принципиально игнорирует любые сигналы (включая SIGKILL) до тех пор, пока драйвер оборудования или сети не завершит операцию I/O.
Как параметр _netdev помогает при загрузке системы?
Параметр _netdev сообщает systemd, что данная файловая система требует наличия активной сети. Это предотвращает попытки монтирования NFS до инициализации сетевых интерфейсов при старте ОС.