Настройка и использование NFS.
Вступление.
Представленные в статье примеры продемонстрированы на основе 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_сервера