Настройка NFS в Ubuntu: практическое руководство для сисадминов и DevOps | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Настройка NFS в Ubuntu: практическое руководство для сисадминов и DevOps

27 мая 2026 9 мин. чтения
Содержание статьи

Быстрый старт: установка и базовая настройка NFS-сервера в Ubuntu

Эта инструкция позволяет развернуть рабочий NFS-сервер в Ubuntu 20.04 или 22.04 за пять минут. Мы используем проверенные команды, которые гарантируют результат без ошибок на старте.

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

Сначала обновите список пакетов и установите серверную часть NFS.

sudo apt update
sudo apt install nfs-kernel-server

Пакет nfs-kernel-server содержит демон NFS и необходимые инструменты для управления экспортами. Для клиентских машин потребуется nfs-common, но сейчас мы работаем на сервере.

Создайте каталог, который будет доступен клиентам. Используйте стандартный путь /srv.

sudo mkdir -p /srv/nfs/share

Назначьте права владельца, чтобы избежать проблем с доступом на старте. Если вы планируете предоставлять доступ конкретному пользователю, например, с UID 1001, выполните:

sudo chown 1001:1001 /srv/nfs/share
sudo chmod 755 /srv/nfs/share

Для общего использования с несколькими клиентами часто удобнее оставить владельцем root и настроить права через параметры экспорта.

Первая конфигурация: редактируем /etc/exports

Основной файл конфигурации экспортов - /etc/exports. Его синтаксис строгий. Каждая строка определяет путь, клиентов и параметры.

Откройте файл для редактирования:

sudo nano /etc/exports

Добавьте строку для экспорта созданного каталога в локальную сеть 192.168.1.0/24.

/srv/nfs/share 192.168.1.0/24(rw,sync,no_subtree_check)

Структура строки:

  • /srv/nfs/share - путь к экспортируемому каталогу.
  • 192.168.1.0/24 - IP-адрес или сеть клиентов. Можно указать конкретный IP, например, 192.168.1.10.
  • (rw,sync,no_subtree_check) - параметры в скобках без пробелов.
    rw - разрешает чтение и запись.
    sync - требует подтверждения записи на диск перед ответом клиенту (надёжно, но медленно).
    no_subtree_check - отключает проверку подкаталогов, повышая скорость в большинстве случаев.

Примените изменения и перезапустите службы.

sudo exportfs -ra
sudo systemctl restart nfs-server

Команда exportfs -ra (re-read all) обновляет таблицу экспортов без полного перезапуска. systemctl restart nfs-server гарантирует, что демон NFS использует новую конфигурацию. Проверьте, что экспорт активен.

sudo showmount -e localhost

Вы должны увидеть список экспортированных каталогов. Если служба не запустилась, проверьте статус: sudo systemctl status nfs-server. Частая проблема - отсутствие запущенного rpcbind. Убедитесь, что он работает: sudo systemctl status rpcbind.

Глубокая настройка /etc/exports: безопасность и производительность для production

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

Параметры безопасности: как не дать доступ лишнему и защитить данные

Параметр root_squash включен по умолчанию. Он преобразует операции root-пользователя (UID/GID 0) с клиента в операции пользователя nobody (обычно UID/GID 65534) на сервере. Это предотвращает получение клиентом неограниченных прав на файлы сервера. Использование no_root_squash отключает это преобразование и создаёт серьёзную уязвимость. Применяйте его только в полностью доверенных и контролируемых средах, например, для монтирования корневой файловой системы в кластерных решениях.

Ограничение доступа по IP - фундаментальная мера. В /etc/exports указывайте конкретные IP-адреса клиентов или доверенные подсети, никогда не используйте wildcard (*). Пример для двух конкретных серверов:

/srv/data 192.168.1.10(rw,sync,no_subtree_check) 192.168.1.11(rw,sync,no_subtree_check)

Для согласования прав между сервером и множеством клиентов, например, в среде Docker или Kubernetes, используйте параметры anonuid и anongid. Они задают фиксированные UID и GID, которым будут соответствовать все неаутентифицированные (или преобразованные) операции.

/srv/container_storage 192.168.1.0/24(rw,sync,no_subtree_check,anonuid=1001,anongid=1001)

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

Параметры производительности: баланс между скоростью и надежностью записи

Ключевой выбор - между sync и async. sync требует, чтобы данные были физически записаны на диск сервера перед отправкой подтверждения клиенту. Это обеспечивает надёжность, но снижает скорость, особенно для небольших операций записи. async позволяет серверу подтвердить операцию сразу, отложив фактическую запись. Это значительно быстрее, но при сбое сервера данные могут быть потеряны.

Рекомендации по выбору:

  • Базы данных, критичные транзакции: всегда используйте sync.
  • Лог-файлы, временные данные: допустимо async.
  • Статический контент (библиотеки, медиафайлы): преимущественно чтение, параметр не критичен.

Параметр no_subtree_check отключает проверку, является ли доступный файл частью экспортированного каталога. Это ускоряет операции, особенно при работе с глубокими деревьями каталогов. В большинстве современных сценариев его следует включать. Проблемы могут возникнуть только если клиент пытается получить доступ к файлу, который был перемещён из экспортированного каталога во время работы. Для повышения производительности чтения/записи больших файлов можно настроить размеры блоков rsize и wsize. Однако оптимальные значения зависят от сети и нагрузки. Стартовые значения 32768 или 65536 часто эффективны. Для детальной оптимизации под конкретные задачи, такие как работа с видео или базами данных, используйте готовые конфигурации NFS для максимальной скорости.

Настройка NFS-клиента в Ubuntu и других ОС: монтирование и автозагрузка

После настройки сервера подключите клиентские машины. На клиенте Ubuntu установите базовые пакеты.

sudo apt update
sudo apt install nfs-common

Для проверки доступности экспорта с клиента используйте:

showmount -e 192.168.1.100

Здесь 192.168.1.100 - IP-адрес вашего NFS-сервера. Команда должна показать список экспортированных каталогов.

Постоянное монтирование через /etc/fstab: правильные опции

Для постоянного монтирования при загрузке системы добавьте строку в /etc/fstab. Критично использовать опцию nofail, чтобы система не зависала при недоступности сервера.

192.168.1.100:/srv/nfs/share /mnt/nfs_share nfs defaults,nofail,noatime,vers=4 0 0

Разбор опций:

  • defaults - включает базовые опции (rw, suid, dev, exec, auto, nouser, async).
  • nofail - позволяет системе завершить загрузку, даже если ресурс недоступен.
  • noatime - не обновляет время последнего доступа к файлу при чтении, снижая нагрузку.
  • vers=4 - принудительно использует NFS версии 4, которая более современна и часто имеет лучшую производительность и безопасность.
  • 0 0 - указывает, что ресурс не нужно проверять fsck и не нужно dump.

После добавления строки выполните монтирование:

sudo mount /mnt/nfs_share

Или перезагрузите систему.

Динамическое монтирование с Autofs: удобство для часто подключаемых ресурсов

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

Установите autofs:

sudo apt install autofs

Основной файл конфигурации - /etc/auto.master. Добавьте строку:

/mnt/autofs /etc/auto.nfs --timeout=300

Это означает, что каталоги внутри /mnt/autofs будут управляться правилами из /etc/auto.nfs, а демонтирование произойдет после 300 секунд бездействия.

Создайте и отредактируйте /etc/auto.nfs:

share -fstype=nfs,vers=4,rw,noatime 192.168.1.100:/srv/nfs/share

Перезапустите службу autofs:

sudo systemctl restart autofs

Теперь при переходе в /mnt/autofs/share ресурс автоматически монтируется.

Для клиентов на других ОС, таких как CentOS/RHEL, установка пакетов отличается (yum install nfs-utils), но принципы монтирования через /etc/fstab аналогичны. Для интеграции NFS в более сложные инфраструктуры, например, с использованием TrueNAS как сервера, обратитесь к полному руководству по настройке NFS-сервера в TrueNAS для Linux.

Диагностика и решение частых проблем с NFS в Ubuntu

Когда соединение не работает, используйте системный подход к диагностике.

Основные команды для проверки работоспособности NFS

Следующие команды локализуют 80% проблем.

Команда Что показывает Ожидаемый результат
rpcinfo -p server_ip Доступность RPC-сервисов на сервере Список служб, включая portmapper (100000), nfs (100003), mountd (100005)
ss -tlpn | grep :2049 на сервере Прослушивается ли порт NFS (2049) Процесс nfsd должен слушать порт 2049
sudo showmount -e server_ip с клиента Список экспортов, доступных клиенту Каталоги, указанные в /etc/exports
sudo exportfs -v на сервере Текущая активная таблица экспортов с параметрами Подробный вывод всех экспортированных каталогов и их настроек
sudo tail -f /var/log/syslog | grep nfs Логи NFS в реальном времени Сообщения о попытках подключения, ошибках аутентификации или доступа

Разбор и исправление типичных ошибок монтирования

Ошибка: «mount.nfs: access denied by server»

Причины:

  • IP-адрес клиента не указан в /etc/exports.
  • Клиент находится в другой подсети, не разрешенной экспортом.
  • На сервере не применены изменения (exportfs -ra не выполнен).
  • Правила firewall блокируют порты RPC (111) или NFS (2049).

Решение:

  1. Проверьте строку в /etc/exports на сервере, убедитесь, что IP клиента или его сеть указаны правильно.
  2. Выполните sudo exportfs -ra на сервере.
  3. На клиенте проверьте доступность экспорта: showmount -e server_ip.
  4. На сервере проверьте статус firewall: sudo ufw status. Если UFW активен, добавьте правила для клиента.

Ошибка: «mount.nfs: Connection refused»

Причины:

  • Сервер NFS не запущен (nfs-server или rpcbind).
  • Порт 2049 или 111 заблокирован firewall на сервере.
  • Проблемы с сетевой связью между сервером и клиентом.

Решение:

  1. На сервере проверьте статус служб: sudo systemctl status nfs-server и sudo systemctl status rpcbind. Запустите их, если они остановлены.
  2. Проверьте, слушает ли порт: ss -tlpn | grep :2049.
  3. Используйте rpcinfo -p server_ip с клиента. Если команда ничего не возвращает, проблема в firewall или сети.
  4. Временно остановьте firewall для диагностики: sudo ufw disable (не забудьте включить после).

Ошибка: «Stale file handle»

Эта ошибка возникает, когда клиент пытается получить доступ к файлу, который сервер уже переэкспортировал или удалил. Частая причина - изменение конфигурации экспорта (например, путь или параметры) на сервере во время активного использования клиентом.

Решение: на клиенте демонтируйте ресурс и монтируйте его снова.

sudo umount /mnt/nfs_share
sudo mount /mnt/nfs_share

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

Дополнительная настройка для production-среды: firewall, резервирование, мониторинг

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

Настройка firewall (UFW) для безопасной работы NFS

UFW в Ubuntu упрощает управление firewall. Открывайте порты только для доверенных подсетей.

sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow from 192.168.1.0/24 to any port 111

Порт 111 (rpcbind) необходим для первоначального согласования версий и процедур. Порт 2049 (nfs) используется для основной передачи данных. Не открывайте эти порты для any, это создаёт уязвимость.

Для проверки активных правил:

sudo ufw status numbered

Если требуется более детальная настройка firewall с использованием nftables или iptables, принцип остаётся неизменным: ограничить доступ к портам 111 и 2049 по IP.

Автоматизация и мониторинг: шаг towards DevOps

Резервное копирование конфигурации /etc/exports предотвращает проблемы при сбое сервера. Используйте простой скрипт или cron.

#!/bin/bash
cp /etc/exports /backup/exports_backup_$(date +%Y%m%d).txt

Для автоматизации развертывания NFS-сервера в нескольких системах используйте Ansible. Пример простого плейбука для установки пакетов и базовой конфигурации:

- name: Install NFS server
  hosts: nfs_servers
  tasks:
    - name: Install nfs-kernel-server
      apt:
        name: nfs-kernel-server
        state: present
    - name: Create shared directory
      file:
        path: /srv/nfs/share
        state: directory
        mode: '0755'
    - name: Configure exports
      copy:
        dest: /etc/exports
        content: '/srv/nfs/share 192.168.1.0/24(rw,sync,no_subtree_check)'

Мониторинг производительности осуществляется через команды nfsstat и nfsiostat. nfsstat показывает общую статистику операций (чтение, запись, ошибки). nfsiostat, аналогично iostat, предоставляет метрики ввода-вывода для каждого монтированного NFS-ресурса, включая latency и IOPS.

nfsiostat /mnt/nfs_share 2 5

Эта команда выводит статистику для /mnt/nfs_share каждые 2 секунды, 5 раз.

Для обеспечения высокой доступности (HA) NFS требуется кластеризация сервера и использование распределенных файловых систем, таких как DRBD (Distributed Replicated Block Device) или GlusterFS. Это сложная тема, требующая отдельного рассмотрения.

Для управления общим доступом к файлам в многопользовательских средах или интеграции с другими протоколами, ознакомьтесь с руководством по настройке общего доступа в TrueNAS.

Если в вашей работе требуется интеграция различных моделей искусственного интеллекта через единый API, рассмотрите использование сервиса AiTunnel. Этот агрегатор предоставляет доступ к более чем 200 моделям, включая GPT, Gemini и Claude, через единый интерфейс с оплатой в рублях и без необходимости VPN.

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