Подробный гайд 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), если ваше оборудование и сервер поддерживают его.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.