Настройка и использование NFS.

30. июня 2023 Linux 0

Вступление.

Представленные в статье примеры продемонстрированы на основе ALT Linux.

На момент написания статьи актуальная версия: NFSv4.2.

NFS — Network File System: https://ru.wikipedia.org/wiki/Network_File_System

Достоинства:

  • Хорошая надёжность и безопасность.
  • Высокая производительность.
  • Простота конфигурации.
  • Может работать поверх сети интернет и «пробивать» NAT, но в базовом варианте пакеты не шифруются, что требует заворачивания в защищённый туннель.
  • Небольшой набор зависимостей.

Отлично подходит для небольших сетей, прикрытых NAT.

NFS разделяется на серверную и клиентскую части. Сервер предоставляет каталоги для дистанционного монтирования, а клиенты — их монтируют.

Клиентская часть состоит всего из одного основного пакета:

  • nfs-clients

Серверная часть:

  • nfs-server
  • nfs-utils — содержит mount.nfs, showmount и прочие утилиты и файлы конфигурации.

Место хранение конфигурационных файлов:

  • /etc/nfs.conf
  • /etc/default/nfs-kernel-server
  • /etc/default/nfs-common
  • /etc/exports — единственный из перечисленных, который потребуется отредактировать для разворачивания простого варианта использования NFS.

Конфигурация сервера.

После установки пакета nfs-server должна быть запущена служба nfs-server:

su -
systemctl start nfs-server

Можно сразу добавить в автозапуск:

systemctl enable nfs-server

На сетевом экране сервера должен быть доступен порт 2049.

Подготовка экспортируемых каталогов.

Для работы с NFS принято, что все экспортируемые каталоги находятся в одном («корневом») каталоге.

Это можно осуществить следующим образом. Создать каталог /export, в нём создать подкаталоги для каждого экспортируемого с сервера каталога. Каждый экспортируемый каталог привязать (--bind) к соответствующему ранее созданному каталогу в /export, что сделает доступным содержимое исходного каталога в новом (будет добавлена дополнительная точка входа). Тем самым всё, что требуется экспортировать, окажется в подкаталогах /export, который будет являться «корневым» для файловой системы NFS.

Создание каталога /export:

su -
mkdir /export

К примеру, с сервера требуется экспортировать содержимое каталогов ~/Documents и ~/Pictures (клиенту будут доступны все вложенные файлы и каталоги), то в /export необходимо создать соответствующие подкаталоги:

mkdir /export/Documents /export/Pictures

Далее следует привязка-монтирование каталога ~/Documents и ~/Pictures к созданным подкаталогам в /export:

mount --bind /home/$USER/Documents /export/Documents
mount --bind /home/$USER/Pictures /export/Pictures

Для удобства привязку стоит сделать постоянной через /etc/fstab:

/home/$USER/Documents   /export/Documents   none   bind   0   0
/home/$USER/Pictures   /export/Pictures   none    bind   0   0

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

findmnt --verify

На этом подготовка каталогов к экспорту завершена.

Настройка параметров экспортируемых каталогов.

Настройки экспортируемых каталогов хранятся в /etc/exports.

man exports

Синтаксис /etc/exports:

путь_до_экспортируемого_каталога ip_адрес_клиента(опции)

Пример с полным набором опций, где IP клиента 192.168.1.120:

/export/экспортируемый_каталог 192.168.1.120(rw,sync,no_subtree_check,root_squash,all_squash,anonuid=500,anongid=500)

В качестве IP клиентов можно указывать целую подсеть.

Основные параметры конфигурации /etc/exports, используемые для настройки NFSv4:

  • rw — разрешить чтение и запись.
  • ro — только чтение. Обычно используется для «корневого» каталога /export.
  • secure — использовать порты до 1024. Используется по умолчанию. В локальной сети можно использовать insecure — использовать все доступные порты.
  • sync — ожидать записи данных прежде, чем обрабатывать новые запросы. Рекомендованный режим.
  • no_subtree_check — не проверять доступ пользователя в пределах иерархии экспортируемой файловой системы, что существенно улучшает производительность, но ценой некоторого снижения уровня безопасности. Используется по умолчанию. Если требуется высокий уровень безопасности, следует использовать subtree_check.
  • root_squash — сбросить права суперпользователя-клиента до «остальные». Тем самым файлы, принадлежащие серверу, будут доступны только в режиме «чтение». Используется по умолчанию.
  • all_squash — сбросить права пользователя-клиента до «остальные». Нужно для работы anonuid и anongid.
  • anonuid=500,anongid=500 — по ID привязывает пользователя-клиента к пользователю на сервере. Тем самым клиент получит права указанного пользователя на сервере. В дистрибутивах ALT Linux uid=500 и gid=500.
  • fsid=0 — указывает корневой каталог экспортируемой файловой системы. В данном случае это каталог /export. Является необходимым.
  • noaccess — запретить доступ к указанному каталогу. Позволяет ограничить доступ тем или иным пользователям к конкретным каталогам.

Пример записи в /etc/exports:

#С помощью fsid=0 указать, что /export является корневым каталогом для всех остальных экспортируемых каталогов
/export 192.168.1.120(ro,sync,fsid=0,secure,no_subtree_check,root_squash)

#Указать экспортируемые подкаталоги /export
/export/Documents 192.168.1.120(rw,sync,no_subtree_check,root_squash,all_squash,anonuid=500,anongid=500)

/export/Pictures 192.168.1.120(rw,sync,no_subtree_check,root_squash,all_squash,anonuid=500,anongid=500)

Применить конфигурацию:

exportfs -a

После применения экспортируемые каталоги станут доступны для монтирования клиентами.

Конфигурация на стороне клиента.

На клиенте создать каталоги, куда будут смонтированы экспортируемые с сервера каталоги. К примеру:
su -
mkdir /mnt/Documents /mnt/Pictures

Остаётся смонтировать экспортируемые каталоги. Пример монтирования с подробным выводом (-vvvv), где IP сервера 192.168.1.15:

mount -t nfs4 -vvvv 192.168.1.15:/Documents /mnt/Documents
mount -t nfs4 -vvvv 192.168.1.15:/Pictures /mnt/Pictures

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

Важно обратить внимание, что за корневой каталог принят каталог /export, тем самым клиенту нужно монтировать непосредственно подкаталог /Documents, так как под корнем подразумевается /export, в котором находятся экспортируемые каталоги. Если при монтировании указать /export/Documents, то будет выведена ошибка, что такой каталог не найден: «Failed, reason given by server: No such file or directory».

Отмонтирование:

umount /mnt/Documents
umount /mnt/Pictures

Для автоматического монтирования (на стороне клиента) можно задействовать /etc/fstab:

192.168.1.15:/Documents   /mnt/Documents   nfs   soft,_netdev,noauto   0   0

192.168.1.15:/Pictures   /mnt/Pictures   nfs   soft,_netdev,noauto   0   0

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

findmnt --verify

Перемонтировать файловые системы для вступления конфигурации в силу:

mount -a

Вывести список экспортируемых каталогов, включая параметры конфигурации:

exportfs -v

Аппендикс.

Нюансы.

При экспорте из виртуальной машины, запущенной на хосте-клиенте, и использовании виртуальной сети типа NAT, в настройках экспорта необходимо указывать IP виртуального NAT, а не IP хоста-клиента. К примеру, IP виртуального NAT будет иметь подобный вид: 192.168.122.1.


Изменение файлов на сервере не всегда автоматически обновляется в файловом менеджере клиента. Поэтому на клиенте необходимо вручную обновить содержимое окна (F5) в файловом менеджере.


Бывает, что по какой-то причине клиент не может отмонтировать файловую систему NFS и получает вывод:

device is busy

В этом случае следует использовать утилиту lsof:

lsof | grep /mnt/Documents

Утилита покажет процесс, блокирующий отмонтирование. Как правило, причиной является то, что какая-то программа на стороне клиента использует файлы, предоставляемые по NFS. К примеру, экспортируемый текстовый файл открыт в редакторе на стороне клиента.

Прочие полезности.

Если требуется отменить экспорт всех перечисленных в /etc/exports каталогов (выполнять на сервере):

exportfs -au

Если нужно восстановить экспорт, то необходимо снова выполнить:

exportfs -a

Вывести список экспортируемых каталогов (выполнять на стороне клиента):

showmount -e ip_сервера

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *