Сетевая служба NFS в ОС Linux

Служба W: [Network File System] изначально разрабатывалась для прозрачного сетевого использования файловых систем сервера так, как будто они были непосредственно примонтированы в дерево каталогов клиента.

В отличие от FTPransfer-протоколa, предназначенного для скачивания (transfer) файлов, протокол NFS является ретранслятором системных вызовов open, close, read, write, seek и пр. с клиента на сервер.

Это позволяет клиенту выполнять операции чтения/записи с любой частью файла, без его передачи целиком.

NFS-клиент

Клиент протокола NFS непосредственно реализован в ядре Linux при помощи модулей nfs, nfsv2/nfsv3/nfsv4 и используется посредством штатной операции монтирования mount, тем самым делая доступными серверные файлы любым клиентским программам.

В примере из листинга ниже показана процедура монтирования файловой системы /Qmultimedia NFS-сервера NVR.local в каталог /mnt/network/nvr/Qmm при помощи протокола NFS v3 (-t nfs -о vers=3). Для получения списка экспортируемых (-e, export) сервером файловых систем используется команда showmount, которая также является специализированным NFS-клиентом.

Монтирование NFS

lumpy@ubuntu:~$ showmount -e NVR.local

Export list for NVR.local:

/Qweb *
/Qusb *

/Qrecordings *
/Qmultimedia *
/Qdownload *
/Public *
/Network Recycle Bin 1 *

lumpy@ubuntu: ~$ sudo mkdir -p /mnt/network/nvr/Qmm

lumpy@ubuntu:~$ sudo mount -t nfs -o vers=3 NVR. local: /Qmultimedia /mnt/network/nvr/Qmm

lunpy@ubuntu:~$ findmnt -t nfs

TARGET                                     SOURCE                                STYPE          OPTIONS
/mnt/network/nvr/Qmn        NVR.local:/Qmultimedia  nfs                  w,relatime,vers=3,…

lumpy@ubuntu:~$ ls /mnt/network/nvr/Qmm

-rw-r—r— 1   toothy    users  678696     авг.      20    2018   IMG_20180719_125651.jpg

-rw-r—r—  1  toothy  users    649685     авг.       20    2018    IMG_20140719_125713.jpg

-rw-r—f— 1    toothy   users     814607     авг.     20    2018    IMG_20180820_111355.jpg

lumpy@ubuntu:~$ id toothy

uid=1010( toothy) gid=1012( toothy) группы=1012( toothy)

Необходимо отметить, что права доступа и идентификаторы UID/GID владельцев файлов передаются NFS-протоколом в неизменном виде, поэтому базы пользовательских учетных записей всех клиентов (и сервера), должны быть согласованы, например, при помощи их централизованного хранения в каталоге LDAP.

NFS-сервер

Функционирование NFS-сервера имеет свою специфику, связанную с использованием NFS-протоколом принципа RPC (remote procedure call, удаленного вызова процедур) в реализации W: [SUN RPC].

Серверы, использующие SUNRPC, не имеют «зафиксированного» (как, например, порт 22 закреплен за службой SSH, порт 25 за SMTP, а порт 80 — за HTTP-протоколом службы WWW) номера порта TCP/UDP, а используют произвольный, случайно выбираемый порт.

Вместо этого, в SUNRPC закрепляются номера «программ» (program), предоставляющих определенные «услуги» (service), & соответствующий порт регистрируется в служебной RPC-программе portmapper2, что проиллюстрировано в листинге ниже при помощи утилиты rpcinfo. Порт самой RPC-программы portmapper все же закреплен за номером 111 TCP/UDP, что позволяет клиентам обращаться portmapper сервера и находить порты других RPC-программ по их номерам.

Удаленный вызов процедур RPC динамические номера портов и portmapper

lumpy@ubuntu:~$ rpcinfo -p NVR.local

program     vers    proto      port     service

100000            3          tcp       111     service

100000            3          tcp       111     portmapper
100000            3         udp       111    portmapper
100003            3          tcp   2049    nfs
100003            3         udp  2649     nfs
100005            3         udp  53964   mountd
100005            3         tcp   39635   mountd

При помощи portmapper организуется обнаружение NFS-серверов в локальной сети посредством широковещательного (-b, broadcast) поиска зарегистрированных RPC-программ NFS v3.

Кроме этого, некоторые серверы NFS (например, сетевые устройства хранения данных W: [NAS] или сетевые видеорегистраторы W:[NVR]) регистрируются в службе mDNS/DNS-SD, что обнаруживается в при помощи avahi-browse.

Обнаружение NFS-серверов

lumpy@ubuntu:~$ rpcinfo -b nfs 3

192.168.17.90.8.1               NVR.local

lumpy@ubuntu:~$ avahi-browse -rcl _nfs._tcp

+ eth0 IPv4 NVR(NFS)                                       Network File System               local
= eth0 IPv4 NVR(NFS)                                       Network File System               local

hostname = [NVR.local]

address = [192.168.17.90]

port = [2049]

txt = []

Сервер NFS предоставляет клиентам некоторое количество RPC-услуг (-s, services), показанных в примере ниже, при помощи rpcinfo. Выделяют базовые RPC-программы mountd и nfs, позволяющие монтировать файловые системы NFS и обращаться к их файлам, и дополнительные RPC-программы nlockngr и status, реализующие механизм блокировки файлов W:[NLM], network lock manager и W:[NSM], network status monitor).

RPC-программы службы NFS

lumpy@ubuntu:~$ rpcinfo -s NVR.local
program   verslon(s)   netid(s)                      service             owner
100000    4,3,2            tcp6,tcp,udp,udp6   portmapper    superuser
100003    4,3,2            udp6,tcp6,udp,tcp   nfs                    superuser
100005    3,2,1             tcp6,udp6,tcp,udp   mountd           superuser
100021    4,3,2,1          tcp6,udp6,tcp,udp   nlockmgr        superuser
100024    1                    tcp6,udp6,tcp,udp   status              superuser

 

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