Подробный гайд NFS — для Linux-клиентов

Подробная инструкция по NFS для Linux: установка клиента, монтирование через fstab и systemd-automount, оптимизация производительности и поиск ошибок.

2026.07.04                  


Подробный гайд NFS — для Linux-клиентовПодробный гайд NFS — для Linux-клиентов Ниже представлен подробный и структурированный гайд по настройке и использованию NFS (Network File System) на стороне Linux-клиента. Мы пройдем путь от установки необходимых утилит до оптимизации параметров и решения типичных проблем.


1. Установка NFS-клиента

В зависимости от вашего дистрибутива Linux, пакет с утилитами клиента называется по-разному.

Для Debian / Ubuntu / Linux Mint:

sudo apt update
sudo apt install nfs-common

Для RHEL / CentOS / AlmaLinux / Rocky Linux / Fedora:

sudo dnf install nfs-utils

Для Arch Linux / Manjaro:

sudo pacman -S nfs-utils

2. Поиск доступных ресурсов (экспортов) на сервере

Прежде чем монтировать, нужно узнать, какие директории сервер разрешает монтировать. Для этого используется утилита showmount.

# Показать все экспортированные директории на сервере
showmount -e <IP_или_домен_сервера>

# Пример вывода:
# Export list for 192.168.1.100:
# /data/backups 192.168.1.0/24
# /shared       (everyone)

Если вы видите ошибку `clnt_create:

RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)`, проверьте сетевую связность и firewall (на сервере должны быть открыты порты 111, 2049 и, для NFSv3, диапазон портов для rpcbind/mountd).


3. Ручное (временное) монтирование

Создайте точку монтирования и подключите ресурс.

# 1. Создаем директорию для монтирования
sudo mkdir -p /mnt/nfs_share

# 2. Монтируем (базовая команда)
sudo mount -t nfs <IP_сервера>:/путь/на/сервере /mnt/nfs_share

# Пример для NFSv4 (обратите внимание на отсутствие двоеточия после IP, если используется псевдофайловая система, но чаще двоеточие нужно):
sudo mount -t nfs4 192.168.1.100:/shared /mnt/nfs_share

Проверка:

df -h | grep nfs
# или
mount | grep nfs

Размонтирование:

sudo umount /mnt/nfs_share

4. Автоматическое монтирование через /etc/fstab

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

Откройте файл: sudo nano /etc/fstab и добавьте строку:

192.168.1.100:/shared   /mnt/nfs_share   nfs   defaults,_netdev   0   0

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

  • 192.168.1.100:/shared — адрес сервера и путь к экспорту.
  • /mnt/nfs_share — локальная точка монтирования.
  • nfs (или nfs4) — тип файловой системы.
  • defaults — стандартные опции.
  • _netdevкритически важная опция! Указывает системе, что для монтирования требуется сеть. Без неё система может зависнуть при загрузке, если попытается смонтировать NFS до поднятия сетевого интерфейса.
  • 0 0 — отключает проверку утилитой dump и fsck (для сетевых ФС это не нужно).

Применение изменений без перезагрузки:

sudo mount -a

5. Продвинутые опции монтирования

Вы можете тонко настроить поведение NFS, добавив опции в /etc/fstab или через флаг -o при ручном монтировании.

Опции безопасности:

  • ro — только для чтения (read-only).
  • noexec — запретить запуск бинарных файлов с этого раздела.
  • nosuid — игнорировать биты SUID/SGID (повышение привилегий).
  • nodev — запретить чтение специальных файлов устройств.
  • Пример безопасного монтирования: nfs defaults,_netdev,ro,noexec,nosuid,nodev 0 0

Опции производительности и надежности:

  • hard (по умолчанию) — если сервер недоступен, процессы, обращающиеся к файлу, будут "зависать" (в состоянии D), ожидая восстановления связи. Это безопасно для данных.
  • soft — если сервер не отвечает, клиент вернет ошибку ввода-вывода (I/O error) после таймаута. Может привести к повреждению данных, но не "вешает" систему.
  • timeo=600 — таймаут в децисекундах (600 = 60 секунд) перед повторной попыткой.
  • retrans=3 — количество повторных попыток перед тем, как сдаться (для soft) или вывести ошибку в dmesg (для hard).
  • rsize=1048576,wsize=1048576 — размер блоков чтения/записи (1 МБ). Значительно ускоряет работу на гигабитных и 10G сетях.
  • nconnect=4 — (только для NFSv4.1+) открывает несколько TCP-соединений к серверу для распараллеливания I/O.

Итоговый пример для быстрого и надежного подключения:

192.168.1.100:/shared /mnt/nfs_share nfs defaults,_netdev,hard,timeo=600,retrans=2,rsize=1048576,wsize=1048576 0 0

6. Монтирование "по требованию" (Systemd Automount)

Если вы не хотите монтировать NFS при старте (чтобы не тормозить загрузку), но хотите, чтобы директория была доступна при первом обращении к ней, используйте systemd.automount.

1. Создайте unit-файл для монтирования: sudo nano /etc/systemd/system/mnt-nfs_share.mount

[Unit]
Description=Mount NFS Share

[Mount]
What=192.168.1.100:/shared
Where=/mnt/nfs_share
Type=nfs
Options=defaults,_netdev

[Install]
WantedBy=multi-user.target

2. Создайте unit-файл для автомонтирования: sudo nano /etc/systemd/system/mnt-nfs_share.automount

[Unit]
Description=Automount NFS Share

[Automount]
Where=/mnt/nfs_share
TimeoutIdleSec=600

[Install]
WantedBy=multi-user.target

3. Активируйте:

sudo systemctl daemon-reload
sudo systemctl enable --now mnt-nfs_share.automount

Теперь при ls /mnt/nfs_share система сама на лету подмонтирует шару.


7. Диагностика и решение проблем (Troubleshooting)

Проблема 1: mount.nfs: access denied by server while mounting...

* Причина:

Сервер не разрешает монтирование вашему IP.

* Решение:

Проверьте /etc/exports на сервере. Убедитесь, что IP вашего клиента указан в списке разрешенных, и выполните sudo exportfs -ra на сервере.


Проблема 2: mount.nfs: Permission denied (при успешном showmount)

* Причина 1:

На сервере включен root_squash (по умолчанию), а вы пытаетесь смонтировать от имени root.

* Причина 2:

Несовпадение UID/GID. NFS по умолчанию не маппит пользователей (в отличие от SMB). Если на клиенте пользователь user имеет UID 1001, а на сервере UID 1005, у клиента не будет прав на файлы.

* Решение:

Синхронизируйте UID/GID пользователей на клиенте и сервере, либо настройте на сервере no_root_squash (небезопасно), либо используйте NFSv4 с idmapd (маппинг по именам пользователей).


Проблема 3: Зависание процессов (D state) при потере связи с сервером

* Причина:

Используется опция hard (что правильно для целостности данных), но сервер умер или сеть оборвалась.

* Решение:

Проверьте сеть. Если сервер умер навсегда, размонтировать "зависшую" шару можно командой: sudo umount -f /mnt/nfs_share (ленивое размонтирование) или sudo umount -l /mnt/nfs_share.


Проблема 4: Как узнать, какая версия NFS используется?

nfsstat -m
# или
mount | grep nfs

Чтобы принудительно использовать конкретную версию, добавьте в опции монтирования: -o vers=3 или -o vers=4.


Полезные команды для диагностики:

  • rpcinfo -p <IP_сервера> — покажет, какие RPC-службы и версии запущены на сервере.
  • dmesg | tail -n 20 — посмотреть ошибки ядра при неудачном монтировании.
  • showmount -e <IP_сервера> — если не работает, значит проблема на уровне сети/firewall (порты 111, 2049).

8. Краткое резюме по версиям NFS

* NFSv3:

Старая, но очень стабильная версия. Требует работы rpcbind (portmap). Поддерживает UDP (не рекомендуется) и TCP. Stateless (клиент сам следит за состоянием).

* NFSv4:

Современный стандарт. Работает только по TCP через один порт (2049), что упрощает настройку Firewall. Не требует rpcbind. Поддерживает Kerberos (шифрование и строгая аутентификация), делегирование и ACL.

* NFSv4.1 / 4.2:

Добавляют поддержку pNFS (параллельный NFS для кластеров), сессий и улучшенную работу с блокировками.


Рекомендация:

Всегда используйте NFSv4 (или 4.1/4.2), если ваше оборудование и сервер поддерживают его.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Денис Аверко @Nymexis г. Омск

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта