RFS


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.

Имя ресурса связывается с ресурсом сервером, который его эк-
спортирует. Клиент монтирует ресурс, обозначаемый своим име-
нем.
+
----------------¬
Монтирует ¦ ПЕРВИЧНЫЙ ¦ Экспортирует
ресурсы --->¦ СЕРВЕР ИМЕН ¦<---¬ ресурсы
------------+-¬ L------T--------- -+------------¬
¦ КЛИЕНТ ¦ ¦ ¦ ¦ СЕРВЕР ¦
¦ ¦ Обновление ¦ ¦
L------T------- ¦ ¦ L------T-------
----------+-----T---------+-------------------+-------
¦ ¦
¦ V
------+--------¬
¦ ВТОРИЧНЫЙ ¦
¦ СЕРВЕР ИМЕН ¦
L---------------

Рисунок 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.

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

1
¦ 7
2
-------------T-----------¬ -------------------------------¬
¦ ---v-----¬ ¦ ¦ ¦
¦ ¦ 3 ¦ ¦ ¦ ¦
¦ L--------- ¦ ¦ ¦
¦ / ¦ ¦ -------------¬ ¦
¦ v v ¦ ¦ ¦ v ¦
¦ --------¬ --------¬¦ ¦ ----+---¬ ---------¬ ¦
¦ ¦ 4 ¦ ¦ 5 ¦¦ ¦ ¦ 8 ¦ ¦ 4 ¦ ¦
¦ L---T---- L---T----¦ ¦ L-------- L--------- ¦
¦ ¦ ¦ ¦ ¦ ^ / ¦
¦ ¦ ¦ ¦ ¦ ¦ / v ¦
¦ v v ¦ ¦ ¦ v ------¬ ¦
¦ ------¬ --------¬¦ ¦ ---+----¬ -----¬ ¦ 11 ¦ ¦
¦ ¦ 11 ¦ ¦ 6 ¦¦ ¦ ¦ 6 ¦ ¦ 9 ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ L----- L------ ¦
¦ L------ L--T-----¦ ¦ L-------- ¦
¦ ¦ ¦ ¦ ^ ¦
L------------------+------ L-------+-----------------------
¦ ¦
v ¦
-------------------------+--------¬
¦ 10 ¦
L----------------------------------

Рис. 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
----------------¬
¦ 3 ¦
1 --->¦ ¦<---¬ 4
------------+-¬ L------T--------- -+------------¬
¦ 2 ¦ ^ ¦ ¦ 5 ¦
¦ ¦ ¦ ¦ ¦ ¦
L------T------- ¦ ¦ L------T-------
----------+-----T-----+---+-------------------+-------
¦ 6
¦ ¦
------+-----+--¬
¦ 7 ¦
¦ ¦
L---------------

Рис. 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 */ ¦
¦ ¦
L--------------------------------------------------------------

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

В таблице 7.1. сравниваются характеристики NFS и RFS в соответ-
ствии с некоторыми критериями.

Обозначения :
+ : означает, что продукт превосходит своего конкурента
= : означает, что оба продукта одинаково хороши или плохи
- : означает, что продукт хуже своего конкурента

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

RFS NFS
Управление удаленными файлами = =
Управление удаленными пери- + -
ферийными устройствами (Не управляет)
Управление именованными каналами + -
(Не управляет)
Экспортирование смонтирован- + -
ных ресурсов (Не управляет)
Семантика UNIX + -
(Не управляет
одноврменным доступом)
Опции монтирования - +
(Только мягкое - soft (Мягкое и жесткое
монтирование) монтирование)
Поддержка символических - +
связей (Не управляет)
Автомонтирование - +
(Не управляет)
Восстановление в случае сбоя = =
(См. далее)
Механизмы обеспечения безопас- + -
ности (Несколько возможностей)
Обозначение ресурсов + -
(Сервер имен) (Обозначение адресом)
Поддержка бездисковых станций - +
(Не управляет)
Производительность - +
(См. далее)
Совместимость с не-UNIX системами - +
(Функционирует (Поддерживается
только в UNIX) несколькими ОС)
Доступность - +
(Доступна на (Доступна всюду)
Sun и AT&T)

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

Что касается производительности, то следующие результаты
(таблица 7.2.) были получены с помощью двух станций Sun для
операций чтения и записи в одной и той же файловой системе.

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

NFS RFS
Скорость при чтении (К/сек) между 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. Эти два продукта могут сосуществовать в одной системе.


БИБЛИОГРАФИЯ

Описание установки RFS, приведенное в настоящей главе, взято
из [Sun 90a].
[TONG TONG 91],а также [KOCHAN], содержат основные концепции
и принципы управления RFS на системах AT&T.

Обновлено: 12.03.2015