Обзор Сетевой файловой системы


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

Пакет NFS содержит наборы команд и программ-демонов, предназначенных для работы с NFS, Службой информации о сети (NIS) и другими службами. Несмотря на то, что NFS и NIS устанавливаются совместно, как один пакет, они независимы друг от друга, и их настройка и администрирование выполняются раздельно. Более подробная информация о NIS и NIS+ приведена в AIX 5L Version 5.1 Network Information Services (NIS and NIS+) Guide.

Операционная система поддерживает последнее обновление версии 3 протокола NFS, а также включает клиент и сервер NFS версии 2.

В данном разделе обсуждаются следующие вопросы:

Службы NFS

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

NFS выполняет следующие основные функции:
Монтирование Выполняется с помощью программы-демона /usr/sbin/rpc.mountd на сервере и команды клиента /usr/sbin/mount.
Удаленный доступ к файлам Выполняется с помощью программ-демонов /usr/sbin/nfsd на сервере и /usr/sbin/biod на клиенте.
Поддержка удаленного выполнения Запускается с помощью программы-демона /usr/sbin/rpc.rexd на сервере и команды клиента /usr/bin/on.
Удаленный доступ к статистическим данным о системе Предоставляется с помощью программы-демона /usr/sbin/rpc.rstatd на сервере и команды клиента /usr/bin/rup.
Создание списка удаленных пользователей Обеспечивается с помощью программы-демона /usr/lib/netsvc/rusers/rpc.rusersd на сервере и команды клиента /usr/bin/rusers.
Предоставление параметров загрузки Программа-демон сервера /usr/sbin/rpc.bootparamd передает на бездисковые клиенты под управлением операционной системы фирмы Sun параметры их загрузки.
Удаленная служба Wall Обеспечивается с помощью программы-демона /usr/lib/netsvc/rwall/rpc.rwalld на сервере и команды клиента /usr/sbin/rwall.
Служба рассылки Посылает односторонний поток пакетов Вызова удаленных процедур (RPC) с помощью программы-демона /usr/lib/netsvc/spray/rpc.sprayd на сервере и команды /usr/sbin/spray на клиенте.
Служба идентификации PC Выполняет идентификацию PC-NFS с помощью программы-демона /usr/sbin/rpc.pcnfsd на сервере.

Примечание: Компьютер может быть одновременно и сервером, и клиентом NFS.

Сервер NFS называется сервером без сохранения состояния. Это означает, что сервер NFS не хранит никаких данных о транзакциях клиентов. Все транзакции NFS атомарные. Каждой транзакции NFS соответствует одна полная операция над файлом. Все данные, необходимые для дальнейшей работы, должны храниться клиентом NFS.

Списки управления доступом (ACL) в NFS

Хотя NFS и поддерживает списки управления доступом (ACL), но они больше не используются по умолчанию. Для применения с NFS списков управления доступом укажите после флага -o опцию acl, как показано ниже:

mount -o acl

Данную функцию обеспечивает программа RPC, осуществляющая обмен данными об ACL между клиентом и сервером. Включение поддержки ACL не влияет на действия протокола NFS; эта функция является независимой.

Операционная система добавляет списки ACL в стандартную файловую систему. Поскольку обычный протокол NFS не поддерживает ACL, обычные клиенты NFS не видят списков ACL. При этом работа обычных клиентов NFS может быть нарушена. Например, пользователь клиента NFS на основании своих прав доступа решает, что доступ к данному файлу разрешен, но в действительности оказывается, что права доступа запрещены списком ACL этого файла. Ограничение доступа к серверу может быть усилено списком ACL сервера, и пользователь клиента получит сообщение о недоступности данного файла.

Когда клиент впервые обращается к только что смонтированной удаленной файловой системе, на самом деле он взаимодействует с программой RPC ACL на сервере.

В сервере AIX версии 3.2 перед тем, как предоставить программе доступ к файлу, клиент запрашивает список ACL, связанный с данным файлом. Поэтому при передаче запроса серверу непредвиденных ситуаций не возникает. Кроме того, клиент может управлять списками ACL с помощью команд aclget, aclput и alcedit.

Поддержка кэширования файловой системы (CacheFS)

Кэширование файловой системы (CacheFS) представляет собой механизм кэширования общего назначения, увеличивающий производительность и масштабируемость NFS за счет уменьшения нагрузки на сервер и сеть. Обладая многослойной структурой, CacheFS дает возможность кэшировать одну файловую систему в другой. Использование CacheFS в среде NFS увеличивает соотношение количества клиентов к количеству серверов, уменьшает нагрузку на сервер и сеть, и увеличивает производительность клиентов, соединенных через медленные каналы связи, например по двухточечному протоколу (PPP).

Создание кэша в системе клиента ускоряет доступ к смонтированным файловым системам, предоставляя локальный доступ к данным вместо передачи их по сети. Данные помещаются в кэш при первом обращении. До тех пор, пока пользователь не запросит какие-либо файлы с сервера, кэш будет оставаться пустым. Первое обращение к файлу может занять много времени, но последующие запросы к тем же файлам будут выполняться значительно быстрее.

Примечания:
  1. Кэширование файловых систем / (корневая) и /usr невозможно.
  2. Монтировать можно только общие файловые системы. (См. описание команды exportfs.)
  3. Кэширование локальной дисковой журнализированной файловой системы (JFS) не дает никакого выигрыша в производительности.
  4. Для выполнения задач, перечисленных в приведенной ниже таблице, необходимы системные права доступа или права доступа root.

Задачи CacheFS
Процедура Команда быстрого доступа из SMIT Команда или имя файла Web-администратор системы
Создать кэш cachefs_admin_create cfsadmin -c имя-каталога-монтирования1. Программное обеспечение --> Файловые системы --> Кэширующая файловая система --> Создать кэширующую файловую систему
Указать файлы, предназначенные для монтирования cachefs_mount mount -F cachefs -o backfstype=тип-файловой-системы, cachedir=каталог-кэша[,опции]
     файловая-система-сервера имя-каталога-монтирования2
или
edit /etc/filesystems.
Программное обеспечение --> Файловые системы --> Обзор и задачи --> Смонтировать файловую систему.
Изменить кэш cachefs_admin_change удалите кэш, затем снова создайте его командой mount с нужными параметрами. Программное обеспечение --> Файловые системы --> Кэширующая файловая система --> Выбранная --> Удалить. Затем создайте кэш заново по инструкциям из первой строки таблицы.
Показать данные о кэшировании cachefs_admin_change cfsadmin -l каталог Программное обеспечение --> Файловые системы --> Кэширующая файловая система --> Выбранная --> Свойства.
Удалить кэш cachefs_admin_remove
  1. Размонтировать файловую систему:
    umount имя-каталога
  2. Определить идентификатор кэша:
    cfsadmin -lкаталог
  3. Удалить файловую систему:
    cfsadmin -d ИД-кэша каталог

Программное обеспечение --> Файловые системы --> Кэширующая файловая система --> Выбранная --> Удалить.
Проверить целостность файловой системы cachefs_admin_check fsck_cachefsкаталог3. Программное обеспечение --> Файловые системы --> Кэширующая файловая система --> Выбранная --> Проверить целостность кэша.

Примечания:
  1. После того как кэш будет создан, выполнять какие-либо операции непосредственно в самом каталоге кэша (cachedir) не рекомендуется. Это может вызвать конфликты с программным обеспечением CacheFS.
  2. Если файлы для монтирования вы задаете с помощью опций команды mount, то учтите, что команду нужно запускать заново после каждой перезагрузки системы.
  3. Для того чтобы только проверить целостность файловых систем (не внося при этом исправлений), используйте опции -m или -o команды fsck_cachefs.

Поддержка отображаемых файлов в NFS

Поддержка отображаемых файлов в NFS позволяет программам работать с файлами так, как будто он загружен в память. Клиенты могут отображать области файла в адресное пространство функцией shmat. В момент, когда программа считывает и записывает данные в эту области памяти, происходит считывание данного файла с сервера и запись его в память, либо необходимое обновление файла на сервере.

Отображение файлов в системе NFS имеет следующие три недостатка:

Если файл NFS будет применяться для обмена данными между различными клиентами, необходимо применять блокирование записей и обычные функции read и write.

Использование отображения файлов несколькими программами на одном клиенте обеспечивает повышение производительности. Согласовать обновления файла на клиенте можно путем поочередного блокирования всего файла. Несколько клиентов могут совместно использовать только такие отображения файлов, данные которых никогда не изменяются (например, статические базы данных).

Три типа монтирования

Существует три типа монтирования в NFS:

  1. Предопределенное
  2. Явное
  3. Автоматическое

.

Предопределенные каталоги монтирования перечислены в файле /etc/filesystems. В этом файле каждый раздел (или отдельная запись) задает монтируемый каталог. Такой раздел содержит данные об имени хоста, пути к удаленному каталогу, локальном каталоге и всех остальных параметрах монтирования. Предопределенное монтирование удобно в тех случаях, когда для обычной работы клиента всегда требуются одни и те же каталоги.

Монтирование вручную обычно выполняется пользователем root. Вручную смонтированные каталоги обычно устанавливают на небольшой срок, когда возникает необходимость в каких-либо ранее неучтенных файловых системах. Монтирование вручную также бывает удобно для выполнения специальных задач, если каталог не нужен клиенту постоянно. Все параметры монтирования обычно задают в командной строке команды mount. При монтировании вручную изменение файла /etc/filesystems не требуется. Каталоги, смонтированные вручную, размонтировать можно также только вручную командой umount. Неразмонтированные каталоги сохраняются до перезагрузки системы.

Автоматическим монтированием управляет команда automount, которая указывает расширению ядра AutoFS отслеживать обращения к указанным каталогам. Если программа или пользователь пытаются обратиться к каталогу, который еще не смонтирован, AutoFS перехватывает запрос, выполняя монтирование файловой системы.

Процесс монтирования в NFS

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

  1. При загрузке сервера сценарий /etc/rc.nfs запускает команду exportfs, которая считывает с сервера файл /etc/exports и передает ядру данные о том, какие каталоги с какими правами доступа необходимо экспортировать.
  2. После этого сценарий /etc/rc.nfs запускает демон rpc.mountd и несколько (по умолчанию - 8) демонов nfsd.
  3. При запуске клиента сценарий /etc/rc.nfs запускает несколько демонов biod (по умолчанию 8), пересылающих запросы клиентов на монтирование соответствующему серверу.
  4. После этого сценарий /etc/rc.nfs выполняет команду mount, которая считывает список файловых систем, находящийся в файле /etc/filesystems.
  5. Команда mount находит сервер, экспортировавший данные, которые были запрошены клиентом, и устанавливает с ним связь. Этот процесс называется связыванием.
  6. После этого команда mount запрашивает у одного или нескольких серверов разрешение на доступ каталогам, указанным в файле /etc/filesystems на клиенте.
  7. Демон rpc.mountd на сервере получает от клиентов запросы на монтирование и либо разрешает выполнение операции, либо отказывает в доступе. Если доступ к запрошенному каталогу разрешить можно, программа-демон rpc.mountd передает ядру клиента идентификатор, называемый описателем файла.
  8. Затем ядро клиента связывает описатель файла с точкой монтирования (каталогом), занося соответствующие данные в запись монтирования.

После того как каталог смонтирован, клиент может начать работу с запрошенными файлами. Обработка запроса клиента на операции с файлами выполняется следующим образом: программа-демон клиента biod передает описатель файла на сервер, где одна из программ-демонов nfsd считывает нужный файл. Если у данного клиента есть право на выполнение запрошенной операции, программа-демон nfsd возвращает демону клиента biod нужные данные.

Файл /etc/exports

В файле /etc/exports перечислены все каталоги, экспортируемые с сервера. Одна строка задает один каталог. Эти каталоги сервер NFS экспортирует автоматически при каждом запуске. Затем клиенты могут смонтировать экспортированные каталоги. Синтаксис строк файла /etc/exports следующий:

каталог     -опции[,опция]

Параметр каталог - это полный путь к каталогу. Опции могут представлять собой флаг, например ro, или список имен хостов. Полное описание опций приведено в документации по файлу /etc/exports и команде exportfs. Если файл /etc/exports отсутствует, то сценарий /etc/rc.nfs не запустит демоны nfsd и rpc.mountd.

Пример записей файла /etc/exports:

/usr/games    -ro,access=ballet:jazz:tap
/home         -root=ballet,access=ballet
/var/tmp
/usr/lib      -access=clients

Первая запись означает, что каталог /usr/games могут монтировать клиенты ballet, jazz и tap. Эти клиенты могут считывать данные и запускать программы из данного каталога, но не могут выполнять запись данных.

Вторая запись означает, что каталог /home можно смонтировать в системе ballet, и что к ней разрешен доступ с правами root.

Третья запись примера означает, что каталог /var/tmp может быть смонтирован любым клиентом. (Обратите внимание на отсутствие списка доступа.)

Четвертая запись - это список доступа для сетевой группы clients. Иначе говоря, компьютеры, объединенные в сетевую группу clients, могут монтировать с сервера каталог /usr/lib. (Сетевая группа это группа сетевых компьютеров, обладающих одинаковыми правами доступа к определенным ресурсам сети. Группа создается в организационных целях или для обеспечения необходимой защиты. Сетевыми группами можно управлять с помощью NIS или NIS+. Дополнительная информация приведена в книге AIX 5L Version 5.1 Network Information Services (NIS and NIS+) Guide.)

Файл /etc/xtab

Формат файла /etc/xtab совпадает с форматом файла /etc/exports и содержит список каталогов, экспортированных в данный момент. При каждом выполнении команды exportfs файл /etc/xtab изменяется. Это позволяет временно экспортировать каталог, не внося изменений в файл /etc/exports. Если временно экспортированный каталог удаляют, то запись каталога также удаляется из файла /etc/xtab.

Примечание: Обновление файла /etc/xtab выполняется автоматически, редактировать его не нужно.

Реализация NFS

NFS реализована для самых разнообразных типов компьютеров, операционных систем и сетевых архитектур. Подобная универсальность NFS достигается благодаря использованию протокола Вызова удаленных процедур (RPC).

Протокол Вызова удаленных процедур (RPC)

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

NFS реализована в виде набора вызовов RPC, которые сервер выполняет по запросу клиентов. В соответствии с операциями над файлами, выполняемыми процессом клиента, клиент передает необходимые запросы серверу. Таким образом, NFS можно рассматривать как приложение RPC.

Поскольку сервер и клиент могут располагаться на разных физических системах с совершенно различной архитектурой, то и способ представления данных может оказаться различным. Поэтому протокол RPC использует внешнее представление данных (XDR).

Протокол Внешнего представления данных (XDR)

XDR - это протокол стандартного представления различных типов данных. Благодаря применению этого протокола даже те данные, которые поступают от компьютеров совершенно другой архитектуры, интерпретируются программой правильно.

Однако в действительности большинство программ не используют протокол XDR непосредственно. Чаще всего программы представляют данные в формате, характерном для архитектуры своего компьютера. Если возникает необходимость во взаимодействии с какой-либо другой программой, перед передачей она преобразует данные в формат XDR. И наоборот: при получении данных извне программа преобразует их в свой тип представления.

Демон portmap

Каждому приложению RPC присвоен определенный номер программы и номер версии. Эти номера необходимы для правильного взаимодействия с приложением сервера. Для передачи запроса серверу клиент должен знать номер порта сервера. Номер этого порта связан с применяемым Протоколом пользовательских дейтаграмм (UDP) или Протоколом управления передачей (TCP). Клиенту известны номер программы, номер версии и имя системы (имя хоста), на которой находится нужная служба. Клиент должен связать номера программы и версии с номером порта приложения сервера. Эту задачу выполняет программа-демон portmap.

Демон portmap и приложение NFS работают в одной системе. При запуске сервер регистрируется у демона portmap. При этом сервер передает демону данные о номере программы, номере версии, и номере порта UDP или TCP. Программа-демон portmap хранит таблицу приложений сервера. Когда клиент пытается передать серверу запрос, он сначала обращается к демону portmap и получает у него номер порта сервера. Демон portmap возвращает клиенту номер порта запрашиваемого сервера. После получения номера порта клиент может общаться непосредственно с приложением сервера.

Управление NFS

Демонами NFS, NIS и NIS+ управляет Контроллер системных ресурсов (SRC). Это означает, что для запуска, останова и получения состояния демонов NFS, NIS и NIS+ должны применяться команды SRC, такие как startsrc , stopsrc и lssrc.

Некоторыми демонами NFS, а именно rpc.rexd, rpc.rusersd, rpc.rwalld и rpc.rsprayd, нельзя управлять с помощью SRC. Эти программы запускает и завершает демон inetd.

В следующей таблице приведен список демонов и подсистем, которыми можно управлять с помощью SRC.
Программы-демоны и их подсистемы
Каталог файла Имя подсистемы Имя группы
/usr/sbin/nfsd nfsd nfs
/usr/sbin/biod biod nfs
/usr/sbin/rpc.lockd rpc.lockd nfs
/usr/sbin/rpc.statd rpc.statd nfs
/usr/sbin/rpc.mountd rpc.mountd nfs
/usr/lib/netsvc/yp/ypserv ypserv yp
/usr/lib/netsvc/yp/ypbind ypbind yp
/usr/lib/netsvc/rpc.yppasswdd yppasswdd yp
/usr/lib/netsvc/rpc.ypupdated ypupdated yp
/usr/sbin/keyserv keyserv keyserv
/usr/sbin/portmap portmap portmap

Демоны NIS+ описаны в руководстве AIX 5L Version 5.1 Network Information Services (NIS and NIS+) Guide. Любой из них можно указать в команде SRC по имени подсистемы или по имени группы. Эти демоны не поддерживают ни функцию полного списка, ни команды трассировки SRC.

Дополнительная информация о SRC приведена в разделе Контроллер системных ресурсов - Обзор книги Принципы управления системой AIX 5L версии 5.1: Операционная система и устройства.

Измените число демонов biod и nfsd

Команда chnfs позволяет изменить число демонов biod и nfsd, работающих в системе. Например, для выбора числа демонов nfsd равным 10, а числа демонов biod равным 4, введите команду:

chnfs -n 10 -b 4

Эта команда временно останавливает работающие в системе демоны, изменяет код базы данных SRC в соответствии с новым значением и перезапускает демоны.

Примечание: В данной реализации NFS число демонов biod задается отдельно для каждой точки монтирования опцией biod -o. Стандарт chnfs сохраняется только в целях совместимости и реально никак на влияет на количество нитей ввода/вывода.

Параметры командной строки для демонов, управляемых SRC

Многие демоны NFS, NIS и NIS+ допускают указание при запуске различных параметров. Поскольку сами эти демоны нельзя запустить непосредственно из командной строки, для их правильной работы необходимо обновить базу данных SRC. Для этого предназначена команда chssys. Команда chssys имеет следующий формат:

chssys -s демон -a 'новый-параметр'

Например:

chssys -s nfsd -a '10'

Эта команда изменяет подсистему nfsd таким образом, чтобы команда запуска демона выглядела следующим образом: nfsd 10. Изменения, внесенные с помощью команды chssys, вступают в силу только после завершения работы и перезагрузки системы.

Запуск демонов NFS при загрузке

По умолчанию демоны NFS не запускаются во время установки. После установки все необходимые файлы уже находятся в системе, но запуск NFS не выполняется. Запустить демоны NFS при загрузке системы можно с помощью:

В любом случае в файл inittab добавляется запись, указывающая, что сценарий /etc/rc.nfs должен запускаться при каждой загрузке системы. Этот сценарий, в свою очередь, запускает все необходимые в данной системе программы-демоны NFS.

Запустите демоны NFS

Значение максимального размера файла на сервере NFS определяется параметрами среды, действовавшими на момент запуска nfsd. Для указания другого значения измените файл /etc/rc.nfs и добавьте командой ulimit необходимое ограничение перед запуском команды startsrc с параметром nfsd.

Запускать демоны NFS можно как по одному, так и все сразу. Для запуска отдельного демона NFS:

startsrc -s демон

где демон - любой демон, управляемый SRC. Например, для запуска демонов nfsd введите:

startsrc -s nfsd

Команда одновременного запуска всех демонов NFS:

startsrc -g nfs

Примечание: Если файл /etc/exports отсутствует, то демоны nfsd и rpc.mountd запущены не будут. С помощью команды touch /etc/exports можно создать пустой файл /etc/exports. Эта операция позволит запустить демоны nfsd и rpc.mountd, хотя никакие файловые системы при этом экспортированы не будут.

Завершение работы демонов NFS

Завершить работу демонов NFS можно как по одному, так и всех вместе. Для останова отдельного демона NFS:

stopsrc -s демон

где демон - любой демон, управляемый SRC. Например, команда завершения работы демона rpc.lockd выглядит так:

stopsrc -s rpc.lockd

Команда завершения работы всех демонов NFS одновременно:

stopsrc -g nfs

Определение текущего состояния демона NFS

Вы можете узнать текущее состояние отдельного демона NFS или всех демонов сразу. Для выяснения текущего состояния одного демона NFS предназначена команда:

lssrc -s демон

где демон - любой демон, управляемый SRC. Например, для выяснения текущего состояния демона rpc.lockd нужно ввести следующую команду:

lssrc -s rpc.lockd

Для выяснения текущего состояния всех демонов NFS введите следующую команду:

lssrc -a