Диагностика NFS: nfsstat, nfsiostat, mountstats, журналы — инструкции для DevOps | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Диагностика NFS: nfsstat, nfsiostat, mountstats, журналы — инструкции для DevOps

26 мая 2026 10 мин. чтения

Проблемы с производительностью NFS, зависание монтирования или ошибки доступа требуют системного подхода. Эта инструкция предоставляет готовые пошаговые алгоритмы диагностики для типовых сценариев. Вы научитесь интерпретировать ключевые метрики утилит nfsstat и nfsiostat, анализировать детальную статистику mountstats, а также безопасно применять strace и tcpdump в production-среде. Все методы актуальны для NFSv4 и современных дистрибутивов Linux с ядром 5.x/6.x.

Фундамент диагностики: ключевые утилиты и их вывод

Эффективная диагностика начинается с понимания базовых инструментов и их вывода. Эти утилиты дают моментальный снимок состояния NFS-соединения.

nfsstat: анализ статистики RPC и общих показателей

Команда nfsstat показывает общую статистику по операциям Remote Procedure Call (RPC). Запустите nfsstat -c для просмотра статистики клиента или nfsstat -s для сервера.

Критичные поля в выводе:

  • retrans: Количество повторных передач RPC-запросов. Значение выше 1-2% от общего числа вызовов (call) указывает на сетевые проблемы: потерю пакетов, перегрузку или высокую задержку.
  • timeout: Число таймаутов RPC. Высокие значения подтверждают сетевую ненадежность.
  • read, write: Количество операций чтения и записи. Дисбаланс может указывать на специфику нагрузки приложения.
  • call: Общее число RPC-вызовов.

Для NFSv3 и NFSv4 структура вывода различается. В NFSv4 добавляются операции типа OPEN, CLOSE, LOCK. Нормальный порог для retrans - менее 1%. Превышение 5% - явный сигнал для детального анализа сети.

nfsiostat: детальный мониторинг производительности операций

Утилита nfsiostat, аналогичная iostat для дисков, показывает производительность на уровне операций NFS. Синтаксис: nfsiostat [интервал_в_секундах].

Анализ ключевых колонок:

  • ops/s: Операций в секунду. Низкое значение при высокой ожидаемой нагрузке - признак проблемы.
  • kB/s, kB/op: Пропускная способность и средний размер операции. Маленький kB/op (например, менее 4 КБ) часто указывает на неэффективную работу приложения с мелкими файлами.
  • avg RTT (Round-Trip Time): Средняя сетевая задержка для RPC-запроса. В локальной сети ожидается менее 1 мс.
  • avg exe (Execution Time): Общее время выполнения операции на сервере, включая дисковый ввод-вывод. Если avg exe значительно превышает avg RTT, проблема скорее на сервере (медленные диски, нехватка CPU).

Пример диагностики: высокий avg exe (например, 50 мс) при нормальном avg RTT (0.5 мс) требует проверки дисков сервера командой iostat -x 2.

/proc/self/mountstats (mountstats): глубокая статистика по точке монтирования

Файл /proc/self/mountstats содержит наиболее детализированную статистику для каждой точки монтирования. Просмотрите его: cat /proc/self/mountstats | grep -A 50 '/mnt/nfs_share'.

Структура данных:

  1. Раздел перед статистикой: Параметры монтирования (адрес сервера, версия NFS, размеры rsize/wsize).
  2. RPC статистика: Общие метрики RPC, аналогичные nfsstat, но для конкретного mount.
  3. Статистика NFS: Детали по операциям (READ, WRITE, COMMIT, GETATTR). Для каждой операции указаны: количество, задержки (latency), размеры передаваемых данных.

Ключевые поля в «статистике NFS»: operations, transmissions, bytes, cumulative queue wait time, cumulative total response time. Длительное время ожидания в очереди (queue wait) указывает на перегрузку сервера NFS (нехватка потоков nfsd). Сравнение статистики разных точек монтирования помогает локализовать проблему до конкретного сервера или экспорта.

Алгоритмы диагностики типовых проблем

Используйте эти пошаговые алгоритмы для быстрого реагирования на инциденты.

Зависание монтирования или операций

Когда клиент "зависает" при команде mount или выполнении операций (например, ls), действуйте последовательно.

  1. Проверка базовой доступности. Убедитесь, что сервер доступен по сети: ping <server_ip>. Проверьте доступность RPC-сервисов: rpcinfo -p <server_ip>. Должны быть видны порты для mountd, nfs, nlockmgr.
  2. Анализ журналов. На клиенте и сервере проверьте системные журналы: journalctl -u nfs-server --since "5 minutes ago" (сервер), journalctl -f (клиент). Ищите ошибки от rpc.mountd или rpc.nfsd.
  3. Трассировка системных вызовов. Используйте strace для процесса, который зависает. Найдите PID процесса mount: ps aux | grep mount.nfs. Затем: strace -f -e trace=file -p <PID>. Команда покажет, на каком системном вызове (например, open()) процесс блокируется.
  4. Анализ сетевого обмена. Запустите tcpdump на клиенте во время попытки монтирования: tcpdump -i eth0 -n host <server_ip> -w mount.pcap. Проанализируйте захват в Wireshark или tcpdump -r mount.pcap. Отсутствие ответов от сервера на RPC-запросы указывает на блокировку firewall (порты 2049 для NFSv3, 2049/tcp для NFSv4) или сбой rpc.mountd.

Типовые причины: блокировка портов NFS в правилах iptables/nftables, остановленный сервис rpcbind на сервере, несовместимые версии NFS (клиент пытается использовать v4.1, а сервер поддерживает только v4.0).

Аномально низкая скорость передачи данных

Если операции чтения/записи выполняются медленно, дифференцируйте проблему.

  1. Измерение производительности. Запустите nfsiostat 2 для наблюдения за метриками в реальном времени. Выполните простой тест: dd if=/dev/zero of=/mnt/nfs/test.bin bs=1M count=1024 oflag=direct. Сравните скорость с локальным диском.
  2. Дифференциация компонентов.
    • Сеть: Проверьте задержку: ping <server_ip>. Используйте ss -ti для просмотра retransmit и rtt для соединения к порту 2049.
    • Диск сервера: На сервере NFS выполните iostat -x 2. Высокое значение await (> 20 мс) указывает на очередь запросов к диску.
    • Параметры NFS: В выводе mountstats найдите строки с rsize= и wsize=. Значения по умолчанию (например, 32 КБ) могут быть неоптимальны для 10 GbE сетей. Для диагностики сетевых проблем также полезно знать общие метрики сервера. Сервер тормозит? За 5 минут определите причину с помощью top, iostat и ss.
  3. Анализ задержек в mountstats. В разделе статистики NFS сравните cumulative total response time для операций READ и WRITE. Если время отклика велико, а сетевая задержка (RTT) мала, проблема на сервере.
  4. Проверка настроек сервера. На сервере проверьте количество потоков nfsd: cat /proc/fs/nfsd/threads. Увеличьте его в файле /etc/nfs.conf (threads=64). Убедитесь, что в экспорте нет ограничивающих параметров, например, sync вместо async.

Возможные решения: увеличение rsize и wsize до 1048576 (1 МБ) в опциях монтирования клиента, настройка Jumbo Frames (MTU 9000) в сети, распределение нагрузки на несколько NFS-серверов. Для комплексной оптимизации производительности сервера, включая ZFS и сеть, изучите настройку производительности TrueNAS в 2026.

Ошибки доступа «Permission denied» или нестабильная работа

Проблемы с правами и периодические сбои требуют анализа логов и состояния служб.

  1. Проверка журналов ядра. Выполните dmesg | grep -i nfs или journalctl -k --since "1 hour ago" | grep nfs. Ищите сообщения о таймаутах блокировок (lock) или отказах в доступе.
  2. Анализ логов демонов NFS. На сервере проверьте системный лог: tail -f /var/log/messages или journalctl -u nfs-server -f. Ошибки rpc.nfsd о нехватке памяти или отказе в обработке запроса указывают на исчерпание ресурсов.
  3. Верификация экспорта и прав. На сервере выполните exportfs -v, чтобы убедиться, что нужный каталог экспортирован с правильными опциями (например, rw,no_root_squash). Убедитесь, что UID и GID пользователя на клиенте совпадают с правами на файлы сервера. Используйте id <username> на обеих системах для сравнения.
  4. Включение детального логирования. Используйте rpcdebug для временного включения подробного вывода. На сервере: rpcdebug -m nfsd -s all. Повторите операцию, вызывающую ошибку, и проанализируйте логи. Не забудьте отключить: rpcdebug -m nfsd -c all.

Типовые причины: несоответствие UID/GID на клиенте и сервере (особенно при использовании root_squash), исчерпание лимита потоков nfsd, сбои в работе rpc.statd, отвечающего за блокировки. Для работы с такими сбоями необходимы уверенные навыки администрирования Linux. Если вам нужно освежить основы, обратитесь к практическому руководству по Linux для IT-специалистов.

Настройка расширенного логирования для глубокой отладки

Когда стандартные журналы недостаточны, включите детальное логирование RPC и NFS операций.

Использование rpcdebug для детального трассирования RPC

Утилита rpcdebug управляет уровнем логирования модулей ядра, связанных с RPC и NFS. Синтаксис: rpcdebug -m модуль -s флаги для включения, -c флаги для выключения.

Основные модули:

  • nfs: Клиентская сторона NFS.
  • nfsd: Серверная сторона NFS.
  • mount: Процесс монтирования.

Ключевые флаги логирования: all (все события), call (вызовы процедур), auth (аутентификация), packet (пакеты).

Пример включения полного логирования на сервере: rpcdebug -m nfsd -s all. После этого все операции NFS сервера будут подробно записываться в системный журнал (journalctl -f). Логирование генерирует большой объем данных и создает нагрузку на CPU. Включайте его только на короткое время для конкретного клиента или проблемы и всегда отключайте после завершения отладки.

Конфигурация демонов и ядра через sysctl и nfs.conf

Для постоянной или более тонкой настройки логирования используйте конфигурационные файлы.

В современных системах с nfs-utils >= 2.5 основным файлом является /etc/nfs.conf. Чтобы увеличить уровень детализации логов демонов, добавьте в секцию [nfsd]:

[nfsd]
debug = all

Или более специфично: debug = auth, call. После изменения перезапустите службу: systemctl restart nfs-server.

В старых системах или для тонкой настройки ядра используйте sysctl. Параметры модуля sunrpc управляют логированием RPC:

sysctl -w sunrpc.nfs_debug=0xffff
sysctl -w sunrpc.rpc_debug=0xffff

Эти параметры непостоянны. Для сохранения добавьте строки sunrpc.nfs_debug=0xffff в файл /etc/sysctl.conf.

Анализ полученных детальных логов: ищите шаблоны. Множественные сообщения RETRY... указывают на сетевые проблемы. Ошибки AUTH_BADCRED связаны с правами доступа. Используйте grep для фильтрации по IP-адресу клиента: journalctl -u nfs-server | grep "192.168.1.100".

Инструменты трассировки: strace и tcpdump в production

Мощные инструменты отладки требуют осторожного применения в рабочей среде.

strace: анализ системных вызовов клиента

Strace показывает, какие системные вызовы выполняет процесс и сколько времени на них тратится. Это помогает определить, "застревает" ли процесс на операции чтения/записи или ожидании блокировки.

Безопасная методика использования:

  1. Найдите PID процесса, работающего с NFS: lsof /mnt/nfs_share или ps aux | grep "ls /mnt/nfs".
  2. Запустите strace с фильтрацией и ограничением времени:
    strace -f -e trace=read,write,openat -tt -p <PID> -o /tmp/strace.log -c 30
    Опция -c 30 завершит трассировку через 30 секунд.
  3. Проанализируйте вывод. Длительные паузы между вызовами (большие временные метки -tt) указывают на ожидание ответа от сервера. Если вызов read() возвращает EAGAIN или блокируется, проблема может быть в сетевой задержке или блокировке файла на сервере.

Запускайте strace на менее критичных процессах (например, на фоновом скрипте копирования, а не на базе данных). Избегайте трассировки всех вызовов (trace=all) на высоконагруженных процессах - это резко снизит производительность.

tcpdump: анализ сетевого обмена NFS

Tcpdump позволяет захватывать и анализировать сетевые пакеты, подтверждая потери, ретрансляции и структуру RPC-запросов.

Практические рекомендации для production:

  1. Создайте ограниченный по размеру и времени захват, чтобы не заполнить диск:
    tcpdump -i eth0 -n port 2049 and host <client_ip> -w /tmp/nfs.pcap -c 1000 -G 60
    Эта команда захватит 1000 пакетов или остановится через 60 секунд.
  2. Для быстрого анализа без Wireshark используйте:
    tcpdump -r /tmp/nfs.pcap -nn -A | grep -E "(Call|Reply|Retransmit)"
  3. Идентифицируйте ретрансмиссии. В NFSv3/v4 повторная передача происходит, если ответ на RPC-запрос не пришел за время таймаута. В захвате это выглядит как одинаковый XID (Transaction ID) у нескольких пакетов Call.

Для анализа логов веб-серверов, что также часто связано с проблемами доступа к файлам через NFS, существуют свои оптимизированные команды. Практический анализ логов Nginx и Apache предоставляет готовые команды grep и awk.

Предупреждение: tcpdump создает нагрузку на сетевой интерфейс и CPU. По возможности запускайте его на отдельном интерфейсе мониторинга (SPAN-порт) или на самом клиенте для коротких сессий. Тестируйте методы на изолированной тестовой среде или на копии данных.

Верификация и актуальность: работа с современными NFS и системами

Все рассмотренные утилиты (nfsstat, nfsiostat, анализ mountstats) полностью работоспособны с NFSv4, NFSv4.1 и NFSv4.2 в 2026 году. Они входят в стандартный пакет nfs-utils и поддерживаются в ядрах Linux серий 5.x и 6.x.

Ключевые отличия при диагностике NFSv4 по сравнению с NFSv3:

  • Монтирование в NFSv4 происходит по одному порту (2049/tcp), что упрощает настройку firewall. Отсутствует необходимость в rpc.mountd для самого монтирования в чистом v4, хотя сервис может использоваться для обратной совместимости.
  • В статистике появляются операции составного протокола (COMPOUND), которые объединяют несколько действий (OPEN, READ, CLOSE) в один RPC-запрос. Анализируйте их в mountstats.
  • Журналирование перешло на систему systemd. Используйте journalctl -u nfs-server, journalctl -u rpcbind. Для фильтрации по конкретному компоненту: journalctl _SYSTEMD_UNIT=nfs-server.service.

Проверьте версии NFS на клиенте и сервере: cat /proc/fs/nfsd/versions (сервер), в опциях монтирования клиента или nfsstat -m. Устаревшие методы, такие как детальный разбор файла /proc/net/rpc/nfsd, были заменены более структурированным выводом mountstats.

Для поддержания безопасности серверов в актуальном состоянии, особенно при предоставлении сетевых сервисов, следуйте руководству по безопасности Linux-сервера с актуальными решениями для 2026 года.

Использование единого API для доступа к различным моделям ИИ, таким как GPT и Gemini, может помочь в автоматизации анализа логов или генерации отчетов. Для этого рассмотрите сервис AiTunnel, который предоставляет единый интерфейс без необходимости использования VPN.

Поделиться:
Сохранить гайд? В закладки браузера