ГЛАВА 7 R F S

7.1. ВВЕДЕНИЕ

Созданная в 1986 году фирмой AT&T одновременно с ОС UNIX System V Release 3, система RFS (Remote File Sharing) предс- тавляет собой средство, предназначенное для управления распре- деленными файлами. Назначение системы - обеспечить прозрачное разделение дисковых ресурсов и периферийных устройств между машинами UNIX, объединенными в локальную сеть.

Несмотря на все усилия AT&T, RFS не получила большого расп- ространения. В настоящий момент эта система используется в SVR4 и SunOS.

7.2. ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ

7.2.1. Предлагаемый сервис

RFS обеспечивает прозрачный доступ к удаленным файловым системам и устройствам (кассетным устройствам, магнитофонам, мо- демам, принтерам),а также к специальным файлам UNIX (pipe).

RFS разрабатывалась фирмой AT&T со следующими целями :
- независимость по отношению к транспортной сети ;
- сохранение семантики UNIX при обращении к файлам ;
- прозрачный доступ к файлам и периферийным устройствам ;
- несколько уровней безопасности : пароль, выбор клиентов, таблицы соответствия, стандартные права доступа UNIX ;
- удовлетворительная производительность.

RFS управляет одновременным доступом к файлам со стороны нескольких пользователей. В сети используются примитивы управ- ления замками UNIX (lockf(),fcntl()).

Каждый пользователь RFS должен принадлежать некоторой области. Область - это административная единица, которая управляет именами ресурсов, а также обеспечивает безопасность доступа к этим ресурсам. Управление именами берет на себя машина области,именуемая первичным сервером имен, которую поддерживает, в случае необходимости вторичный сервер имен. Первичный сервер имен выполняет следующие функции :
- запоминает имена и адреса всех ресурсов области ;
- в случае необходимости хранит имена и адреса других областей ;
- обеспечивает безопасность доступа к ресурсам области.
Вторичный сервер имен (можно объявить один или несколько вторичных серверов - но это не обязательно) обеспечивает функцию замены первичного сервера в случае, если последний попал в аварию.

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

Возможность разделения именованного канала позволяет исполь- зовать этот механизм для коммуникации между отделенными процессами.

7.2.2. Механизмы реализации

Модель клиент-сервер

RFS использует модель клиент-сервер.Машина,подсоединенная к сети, является сервером RFS, если она способна предоставить свою файловую систему другим машинам; говорят, что она "экспортирует" свою файловую систему.

Машина является клиентом RFS, если она использует файловую систему, экспортируемую сервером ; говорят, что она "монтирует" файловую систему.

Рисунок 7.1. иллюстрирует соотношения между компонентами RFS. Имя ресурса связывается с ресурсом сервером, который его экспортирует. Клиент монтирует ресурс, обозначаемый своим именем.

Рисунок 7.1 - Область RFS.
Сервер может экспортировать :
- полностью всю свою файловую систему
- каталоги (которые могут содержать специальные файлы UNIX)
- каталоги, уже смонтированные NFS или RFS (таким образом, машина без диска может быть сервером RFS).

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

Система виртуальных файлов

RFS использует систему управления виртуальными файлами,которая приводится в соответствие ("mapping") с системой управления реальными файлами, в случае, если файл является локальным. Эта система управления виртуальными файлами встраивается в ядро UNIX (рисунок 7.2.)

Протокол

RFS разрабатывался так, чтобы быть независимым от транспортного протокола, при условии, что транспорт происходит в режиме коммутации пакетов (например, TCP). Внутри RFS использует механизм STREAMS. RFS использует протокол с сохранением состояния : сервер запоминает то,что сделал клиент. Благодаря этой возможности RFS полностью поддерживает семантику файловой системы UNIX и в частности возможность управления периферийными устройствами, а также, множественным доступом к файлам и записям (замки на фай- лах и записях). В файле (/usr/nserve/fmaster) сохраняется имя первичного и вторичного серверов имен каждого сервера и каждого клиента. Это позволяет избежать механизма "широковещания" Ethernet.

Сократить пересылку информации в сети позволяют механизмы кэширования.

Рис. 7.2. - Внутренние механизмы RFS.
1 - клиент
2 - Обращение к системе
3 - FFS (File System Switch - Переключатель файловой системы)
4 - Локальная файловая система UNIX
5 - Клиент RFS
6 - Модули STREAMS
7 - Сервер
8 - сервер RFS
9 - периферийное устройство
10 - Сеть
11 - Данные

Безопасность

RFS обеспечивает несколько механизмов, ответственных за безопасность :
- пароль : пароли можно связать с ресурсами. Они управляются сервером имен (файл auth.info/domain/passwd) ;
- ограничения доступа : ресурсы доступны только для некоторых клиентов и только в режиме чтения ;
- соответствие между пользователями и локальными и удаленными группами : можно определить соответствие между UID (User ID) и GID (Group ID) двух рабочих мест на сервере, который обеспечивает ресурс, в файлах auth.info/uid.rules и auth.infogid.rules. Это позволяет определить права доступа к локальным ресурсам для удаленных пользователей. Если соответствие не обеспечено, удаленные пользователи получают максимальный идентификатор MAXUID+1 (где MAXUID - последний номер UID, присвоенный на сервере). Принцип со- ответствия состоит в том, что идентификаторы связываются либо пара на пару (локальный и удаленный UID для каждого пользователя), либо в соответствии с более сложными правилами, простейшее из которых было воспринято NFS : один и тот же пользователь использует на разных машинах один и тот же UID.

7.3. АДМИНИСТРАТИВНЫЕ ФУНКЦИИ И ЭКСПЛУАТАЦИЯ

7.3.1 Административные функции

Ниже приведены примеры административных функций на станциях Sun. Следует активировать несколько отслеживающих программ :
- listen : отслеживающая программа "listener" (аналог inetd в UNIX SVR4) ;
- rfdaemon : отслеживающая программа RFS ;
- recovery : сервисная программа, обеспечивающая восстановле- ние после сбоев ;
- server (можно запустить несколько отслеживающих программ server) : сервисная программа, используемая для уп- равления кэшированием при вводе-выводе ;
- nserve : отслеживающая программа, используемая для поиска адреса ресурса по его имени ;
- rfudaemon : отслеживающая программа, используемая при обработке сбоев. Рассмотрим пример области, которую назовем rfstpt, состоящей из (рис. 7.3.) :
- имени области : rfstpt ;
- ресурсов,разделяемых RFS :
- онлайновое руководство на машине ordinan
- кассетный считыватель на машине ordinb
- машины - первичного сервера имен области ordinfm
- машины - вторичного сервера имен области ordinan
- машин - клиентов, претендующих на :
- всю совокупность ресурсов :ordinfn - на руковожство : ordinfm,ordinnb - на считыватель : ordinan и ordinfm.

Установка первичного сервера имен

После определения области следует создать файл rfmaster. Этот файл должен находиться в каталоге /usr/nserve машины-сервера области.

Этот файл определяет первичный и вторичный сервер имен. Он содержит по две строки на каждую машину :

Область Тип Область.машина Область.машина А АдресIP где :
Область - имя области
Тип - Тип, который может принимать следующие значения :
P - для первичного сервера
S - для вторичного сервера
Область.машина - имя области, за которым следует имя машины (первичного или вторичного сервера)
АдресIP - адрес IP машины, в шестнадцатиричном виде. Формат адреса приведен ниже.Адрес начинается со следующих символов : \x00021450. Эти символы обозначают семейство IP (0002) и порт 1450 - стандартный порт для RFS. Для того, чтобы конвертировать адрес IP в формат файла rfmaster, следует использовать коман- ду hostrfs. Файл rfmaster области rfstpt выглядит следующим образом :

rfstpt P rfstpt.ordinfm rfstpt.ordinfm A \x0002145089322C58000000000000000 rfstpt S rfstpt.ordinan rfstpt.ordinfm A \x0002145089323E46000000000000000 При этом RFS можно запустить с помощью следующих команд :

#dorfs init имя_области tcp [N_порта]
#dorfs start
Команду dorfs init не следует запускать более одного раза на одной машине с одним и тем же именем области. Таким образом, для того, чтобы организовать область rfstpt, надо ввести следующие команды :
#dorfs init rfstpt tcp
#dorfs start

Рис. 7.3. - Область rfstpt (все машины являются также клиентами)

1 - Монтирует каталог man и кассетный считыватель
2 - клиент ordinfm
3 - Первичны сервер имен ordinfm
4 - Экспортирует кассетный считыватель
5 - сервер ordinnb
6 - Экспортирует каталог man
7 - сервер и вторичный сервер имен ordinan

Установка вторичного сервера имен

Убедившись, что на данной машине доcтупна RFS, выполните следующие операции :
- скопируйте файл rfmaster с сервера области
- инициализируйте RFS командой : #dorfs init "имя области" tcp [N порта]
- запустите RFS командой : #dorfs start

Таким образом, в нашем примере Вы должны выполнить команды : #dorfs init rfstpt tcp #dorfs start

Установка серверов

Скопировав файл rfmaster с первичного сервера, объявите те локальные ресурсы машины, которые она будет разделять с машинами области. Перед выполнением этой операции необходимо присвоить стандартные права доступа этим ресурсам путем редактирования фай-лов auth.info/uid.rules и auth.info/gid.rules. В приведенном здесь примере можно действовать также, как это принято в NFS - т.е. присвоить каждому пользователю одинаковые UID и GID на всех машинах области : global default transparent Далее, можно инициализировать и запустить RFS - также, как и на вторичном сервере. Осталось объявить разделяемые ресурсы машины с помощью команды adv. Экпорт ресурсов осуществляется следующим образом : #adv [-d "описание"] имя_ресурса путь где :
- описание : общее описание ресурса - в свободном формате
- имя_ресурса : имя, присваиваемое ресурсу и используемое машинами-клиентами - путь - полный путь (от корневого каталога) разделяемого каталога.

Таким образом, для того, чтобы разделить manuel машины ordinan, следует ввести команду : #adv -d "Руководство по OS 4.1" MANUEL /usr/share/man Для того,чтобы разделить периферийное устройство, ленточный или дисковый накопитель, надо выполнить несколько дополнительных команд :
1) создать каталог rdev в каталоге /dev #mkdir rdev
2) создать связь с локальным периферийным устройством (в нашем случае с накопителем на кассетах) : #cd /dev/rdev #ln /dev/rst8 rst8
3) объявить каталог /dev/rdev разделяемым : #adv -d "периферийные устройства" имя /dev/rdev Таким образом, чтобы разделить периферийные устройства машины ordinb, надо ввести следующую команду : #adv -d "периферийные устройства" PERIFS /dev/rdev Обратите внимание на то,что экспортируется каталог,содержа- щий "устройства" ("devices") разделяемых периферийных устройств (peripheriques), а не сами "устройства" ("devices").

Установка клиентов

Для инициализации машин-клиентов области надо выполнить ту же процедуру, что и для инициализации вторичного сервера имен. Далее, перед использованием ресурса необходимо "смонтировать" этот ресурс на машине-клиенте. Для того,чтоюы получить список разделяемых ресурсов области, надо ввести команду : #nsquery Выбрав разделяемые ресурсы :
- выберите каталог, который будет являться точкой монтирования для распределенного ресурса
- выполните команду mount, формат которой описан ниже : #mount [-r] -d ресурс точка_монтирования где :
- -r : ресурс используется только в режиме чтения
- -d ресурс : указывает на монтирование RFS и задает имя монтируемого ресурса
- точка_монтирования : полный путь монтируемого катало-га.

В нашем примере, если машина ordinnb собирается использовать все разделяемые ресурсы области, администратор этой машины должен выполнить приведенные ниже команды : #cd /dev #mkdir rdev #mount -d PERIFS /dev/rdev #mount -r -d MANUEL /usr/share/man Если все пройдет нормально, команда mount выдаст на экран : MANUEL on /usr/share/man type rfs (ro) PERIFS on /dev/rdev type rfs

Инициализация пролграммного обеспечения при запуске станции

В этом случае,помимо модификации файла /etc/rc для активизации отслеживающих программ RFS,следует отредактировать файл /etc/rstab - для экспортирования ресурсов и файл /etc/fstab -для монтирования ресурсов. Для серверов следует создать командный файл /etc/rstab, который должен содержать команды, необходимые для объявления экспортируемых ресурсов. Таким образом,для сервера ordinnb этот файл должен содержать следующий текст : # !/bin/sh (эта строка обязательна и должна быть первой) adv -d "периферийные устройства" PERIFS /dev/rdev Для машин-клиентов надо отредактировать файл /etc/fstab (ис- пользуемый также для локальных монтирований и для монтирований NFS), который имеет следующий формат : ресурс точка_монтирования rfs опции 0 0 где опции :
- ro,rw : только чтение или чтение-запись
- bg,fg : монтирование в режиме "фона" или "переднего пла-на" - retry=n : число попыток монтирования перед отказом. В нашем примере файл /etc/fstab, расположенный на машине клиенте ordinnb, будет содержать следующую информацию : PERIFS /dev/rdev rfs rw,bg,retry=3 0 0 MANUEL /usr/share/man rfs rw,bg,retry=3 0 0

Операции сопровождения

Остановка RFS
Следует ввести команду : #dorfs stop

- Отказ от экспорта ресурса (на сервере)
Следует ввести команду : #unadv имя_ресурса

- Ресурсы, используемые клиентами (на сервере)
Следует ввести команду : #rmntstat [имя_ресурса]

- Демонтирование ресурса
На машине-клиенте следует ввести команду : #umount -d имя_ресурса На сервере следует ввести команду : #fumount имя_ресурса
Команда fuser позволяет определить текущих пользователей ресурса.

7.3.2. Эксплуатация

Как и в случае NFS использование системы прозрачно для пользователей. Все происходит так, как если бы экспортируемые ресурсы были локальными. В распоряжении пользователя находятся команды, которые позволяют ему осуществлять некоторый контроль :
- вывод списка экспортруемых ресурсов : #nsquery
- вывод списка файлов, смонтированных на машине-клиенте : #mount
- вывод имени текущей области : #dname
- вывод имени текущего сервера области : #rfadmin
- вывод таблицы текущих соответствий UID GID между клиентами и сервером для пользователей : #idload-n

7.3.3. Взаимодействие между процессами с помощью именованного канала

RFS позволяет использовать именованный канал для организации взаимодействия между двумя удаленными процессами. Для этого достаточно, чтобы именованный канал был создан в каталоге, разделяемом с помощью RFS между двумя машинами. Если вспомнить функцию echo, приведенную в 3 главе в качестве примера использования именованных каналов, то ,в данном случае, для того, чтобы программа, использующая именованные каналы, могла работать в сети, достаточно изменить включаемый файл fif.h (/home/testrfs - это каталог, экспортируемый сервером и смонтированный клиентом) :

ПРОГРАММА 44
/*Файл fif.h **********************************************/
#include "commun.h"
#define nomfifo1 "home/testrfs/fifo1" /*имя fifo1 */
#define nomfifo2 "home/testrfs/fifo2" /*имя fifo2 */

7.4. СРАВНЕНИЕ С NFS

В таблице 7.1. сравниваются характеристики NFS и RFS в соответствии с некоторыми критериями. Обозначения :
+ : означает, что продукт превосходит своего конкурента
= : означает, что оба продукта одинаково хороши или плохи
- : означает, что продукт хуже своего конкурента

Таблица 7.1 Сравнение NFS и RFS

RFS NFS

Управление удаленными
файлами

=

=

Управление удаленными
периферийными устройствами

+

-

Управление именованными
каналами

+

-

Экспортирование смонтированных
ресурсов

+

-

Семантика UNIX

+

-

Опция монтирования

-

+

Поддержка символических
связей

-

+

Автомонтирование

-

+

Восстановление в случае сбоя

=

=

Механизмы обеспечения безопасности

+

-

Обозначение ресурсов

+

-

Поддержка бездисковых станций

-

+

Производительность

-

+

Совместимость с не UNIX системами

-

+

Доступность

-

+

Уточним, что :
- управление одновременным доступом возможно в NFS при активации следящей программы lockd ;
- что касается символических связей : нельзя символически связаться с файлом, принадлежащим разделу, смонтированному в RFS ;
- в случае аварии сервера, RFS делает несколько попыток восстановить связь с сервером, а затем снимает запрос.
При этом отслеживающая программа rfudaemon активирует командный файл rfuadmin, который выдает на консоль сообщение (resource has been disconnected), а затем пытается демонтировать ресурс и смонтировать его в фоновом режиме. Этот механизм является довольно сложным и в некоторых реализациях функционирует неправильно. Что касается производительности, то следующие результаты (таблица 7.2.) были получены с помощью двух станций Sun для операций чтения и записи в одной и той же файловой системе.

Таблица 7.2 Сравнение производительности NFS и RFS

NFS

RFS

Скорость при чтении(K/сек) между 300 и 600 между 110 и 150
Скорость при записи(К/сек) между 80 и 90 между 112 и 150

Отсюда следует, что RFS имеет почти одинаковую скорость при чтении и при записи (в среднем 140 К/сек) - и ее производительность несколько выше, чем производительность NFS при записи, но значительно ниже, чем производительность RFS при чтении. В любом случае, RFS может служить хорошим дополнением к NFS при разделении периферийных устройств и именованных каналов -поскольку эти два продукта вполне могут мирно сосуществовать. В ОС UNIX System V Release 4, административные команды и файлы NFS и RFS приведены "к общему знаменателю" :
- команда share позволяет разделять ресурсы (заменяет adv и exportfs). Ассоциированным с ней файлом является файл /etc/ dfs/dfstab ;
- команда mount используется с опцией -F - для указания, что речь идет о монтировании NFS или RFS. Ассоциированным фай- лом является файл /etc/vfstab ;
- команды showmount и nsquery заменены на dfshares и dfmounts.

7.5. ИТОГИ

RFS (Remote File Sharing) - система разделения ресурсов, разработанная AT&T и используемая, в частности, фирмой Sun. RFS позволяет обрабатывать файлы и/или периферийные устройства (кассетные накопители,принтеры,модемы ...), расположенные на удаленных машинах так, как если бы они были локальными. Кроме того, RFS позволяет разделять специальные файлы UNIX (именованные каналы), которые можно использовать для взаимодействия двух удаленных процессов в сети. По сравнению с NFS, RFS имеет то преимущество, что позволяет разделять периферийные устройства и специальные файлы. Кроме того, RFS, в отличие от NFS, адресует устройства не физически, а по имени. Сервер имен преобразует имя в адрес. С другой стороны, восстановление в случае сбоя является менее тонким, а производительность более низкой (при чтении), чем у NFS. RFS, таким образом, можно использовать в качестве дополнения к NFS. Эти два продукта могут сосуществовать в одной системе