В операционной системе FreeBSD поддерживается множество файловых систем и NFS не является исключением. NFS (Network File System) - распределенная файловая система, позволяющая пользователям получать доступ к данным через сеть, причем работа с ней аналогична работе с локальными ФС. Область применения ее ограничивается только вашей фантазией, например, можно использовать ее, если у вас много компов с FreeBSD, а точнее хранить коллекцию портов на одном компе и предоставлять доступ к ней другим компам посредством NFS. Так же ее можно использовать при установке ОС по сети, при использовании бездисковых станций или для хранения домашних директорий пользователей. Далее я опишу, какие настройки небходимо сделать на сервере, а какие на клиенте.
На сервере настройка заключается в поднятии нескольких основных демонов (rpcbind, mountd, nfsd) и указании экспортируемых директорий.- rpcbind - это сервер, преобразующий номера программ RPC в универсальные адреса. Он должен работать, чтобы была возможность делать RPC вызовы (RPC calls) на сервер, на котором он будет запущен.
Некоторые полезные ключи:
- -6 - работать только с протоколом IPv6
- -h - привязать демон к определенному IP адресу. Учтите, что при запуске демон автоматически привязывается к loopback адресам (127.0.0.1 и ::1).
И запускаем его:- rpcbind_flags="-h my_ip"
- rpcbind_enable="YES"
Проверить работает ли сервис можно таким образом:- # service rpcbind start
- # sockstat -l | grep rpcbind
- root rpcbind 85723 5 stream /var/run/rpcbind.sock
- root rpcbind 85723 7 udp4 127.0.0.1:111 *:*
- root rpcbind 85723 8 udp4 192.168.7.250:111 *:*
- root rpcbind 85723 9 udp4 *:960 *:*
- root rpcbind 85723 10 tcp4 127.0.0.1:111 *:*
- root rpcbind 85723 11 tcp4 192.168.7.250:111 *:*
- mountd - это сервис обрабатывающий запросы на монтирование NFS. Именно его нужно перезапускать, когда вы изменяете файл экспортируемых точек монтирования, о котором я расскажу далее.
Некоторые полезные ключи:
- -l - заставляет демона записывать удачные запросы монтирования в лог файл.
- -h - привязать демон к определенному IP адресу. Учтите, что при запуске демон автоматически привязывается к loopback адресам (127.0.0.1 и ::1).
Каждая точка монтирования должна начинаться с новой строки и путь к директории должен быть абсолютным. Символ вначале строки "#" означает, что далее следует комментарий. Некоторые параметры:- mountpoint [[-parameters]...]
- -alldirs - позволяет монтировать все поддиректории относительно указанной директории. То есть можно использовать вместо такой записи:
вот такую:
- /usr /usr/bin /usr/sbin /usr/src /usr/ports и т.д.
- /usr -alldirs
- -maproot=user - дать права рута удаленной машине, использующей точку монтирования, пользователю user (сопоставление идет по числовому идентификатору пользователя в системе). Все группы, в которых состоит пользователь, также будут иметь такие права. Можно указывать числовой идентификатор пользователя или его имя. Чаще всего здесь указывают пользователя root.
- -maproot=user:group1:group2:... - список имен или числовых идентификаторов пользователя и групп, разделенный двоеточиями, которым будут даны права рута.
- -ro - директория будет экспортироваться только для чтения.
- -network=netname[/prefixlength] - подсеть, которой разрешено монтировать данную директорию.
- -mask - маска подсети, можно использовать вместо указания prefixlength в предыдущем параметре.
- -quiet - подавлять некоторые сообщения об ошибках в syslog для некорректных строк в файле.
Не забывайте "говорить" демону перечитать файл, если он был изменен. Итак, добавляем следующие строки в /etc/rc.conf:- /usr -ro -mapall=nobody
- /u -maproot=bin: -network 131.104.48 -mask 255.255.255.0
- /a -network 192.168.0/24
- /a -network 3ffe:1ce1:1:fe80::/64
- /cdrom -alldirs,quiet,ro -network 192.168.33.0 -mask 255.255.255.0
- /usr/ports/distfiles -maproot=0 -network 192.168.7.0 -mask 255.255.255.0
И запускаем его:- mountd_enable="YES"
Проверить работает ли сервис можно таким образом:- # service mountd start
- # sockstat -l | grep mountd
- root mountd 85836 5 udp4 127.0.0.1:603 *:*
- root mountd 85836 6 udp4 192.168.7.250:603 *:*
- root mountd 85836 7 tcp4 127.0.0.1:603 *:*
- root mountd 85836 8 tcp4 192.168.7.250:603 *:*
- nfsd - собственно сам сервер NFS, который обрабатывает NFS запросы от других машин. Некоторые полезные ключи:
- -n - количество создаваемых процессов.
- -h - привязать демон к определенному IP адресу. Полезно, когда на сервере несколько сетевых интерфейсов. Можно указывать несколько раз.
- -t - обрабатывать запросы по протоколу TCP.
- -u - обрабатывать запросы по протоколу UDP.
И запускаем его:- nfs_server_enable="YES"
- nfs_server_flags="-u -t -n 3 -h 192.168.7.250"
Проверить работает ли сервис можно таким образом:- # service nfsserver start
- # sockstat -l | grep nfsd
- root nfsd 85891 3 tcp4 192.168.7.250:2049 *:*
- amd - демон, который автоматически монтирует файловые системы, когда происходит запрос к директории. Подробности смотрите в мане.
- rpc.lockd и rpc.statd - демоны, которые позволяют блокировать файлы на NFS, ведь она сама не поддерживает такой функционал.
- nfsstat - отображает статистику по NFS.
- -c - показать статистику только по клиентам.
- -s - показать статистику только по серверу.
- showmount - отображает подмонтированные точки NFS на удаленных машинах.
- -a - показать список всех точек монтирования в формате хост:директория.
- -d - показать список подмонтированных директорий вместо хостов.
- -e - показать содержимое /etc/exports.
- nfs_client_enable="YES"
- # mount_nfs 192.168.7.250:/usr/port /usr/ports
- 192.168.7.250:/usr/ports /usr/ports nfs rw 0 0