linux-labs

Вики / Хранилище и ФС

NFS (сетевая ФС)

Концепция Ubuntu 24.04 · NFSv4 ХранилищеСетьФайлы

Сетевые каталоги по NFS — экспорт на сервере, монтирование на клиенте, права.

NFS даёт доступ к каталогам сервера по сети как к локальным. Сервер экспортирует каталог, клиент его монтирует (mount). Распространён между Linux-машинами.

  • сервер: пакет nfs-kernel-server, экспорты в /etc/exports;
  • клиент: пакет nfs-common, монтирование через mount -t nfs.
sudo apt install nfs-kernel-server
sudo mkdir -p /srv/share

/etc/exports (по строке на экспорт): путь сеть(опции):

/srv/share   10.0.0.0/24(rw,sync,no_subtree_check)
/srv/ro      10.0.0.0/24(ro,sync,no_subtree_check)
/srv/admin   10.0.0.5(rw,sync,no_root_squash)   # доверять root клиента (осторожно!)
sudo exportfs -ra                 # перечитать /etc/exports (-r) без рестарта
sudo exportfs -v                  # показать активные экспорты с опциями
sudo systemctl status nfs-server

Опции: rw/ro, sync (надёжно)/async (быстро), root_squash (root клиента → nobody, по умолчанию), no_subtree_check (рекомендуется).

sudo apt install nfs-common
showmount -e 10.0.0.1             # что экспортирует сервер
sudo mount -t nfs 10.0.0.1:/srv/share /mnt/share
sudo mount -t nfs -o vers=4.2 10.0.0.1:/srv/share /mnt/share   # явная версия
sudo mount -t nfs -o ro,soft,timeo=50 10.0.0.1:/srv/ro /mnt/ro

# постоянно — в /etc/fstab:
#   10.0.0.1:/srv/share  /mnt/share  nfs  defaults,_netdev,nofail  0  0
nfsstat -m                        # параметры смонтированных NFS

mount.nfs: access denied by server

IP клиента не подходит под маску в /etc/exports, или после правки не сделали exportfs -ra. Проверь showmount -e сервер и саму строку экспорта.

Права/владельцы «не те» на смонтированном

NFS сопоставляет по UID/GID — у клиента и сервера они должны совпадать (или настрой idmapping для NFSv4). root клиента по умолчанию «сжимается» в nobody (root_squash).

Connection timed out / mount висит

Файрвол или служба. NFSv4 — порт 2049/tcp. Проверь ss -tlnp на сервере и доступность порта: nc -zv сервер 2049.

Зависание процессов при недоступном сервере (D-состояние)

«Жёсткое» (hard, по умолчанию) монтирование вешает процессы намертво. Для некритичных данных — soft,timeo=50,retrans=2; в fstab добавляй _netdev,nofail.

Stale file handle

Экспорт пересоздали/ФС перемонтировали на сервере. Перемонтируй на клиенте (umount/mount), при необходимости с -o remount.

# сервер:
#   /etc/exports → /srv/share 10.0.0.0/24(rw,sync,no_subtree_check)
sudo exportfs -ra ; sudo exportfs -v
# клиент:
showmount -e сервер
sudo mount -t nfs -o vers=4.2 сервер:/srv/share /mnt
# fstab: сервер:/path /mnt nfs defaults,_netdev,nofail 0 0
nc -zv сервер 2049               # доступен ли NFS-порт

См. также