TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Шрифт:
■ Нужно ли периодически возобновлять попытки монтирования в фоновом режиме при неудаче монтирования во время запуска системы.
■ Требуется ли прерывать выполнение запроса RPC к NFS при длительном ожидании ответа.
■ Реализована ли в NFS одна из версий системы безопасности RPC.
Команда mount приводит к отправке на сервер запроса RPC с именем Add Mount Entry (добавить точку монтирования). В ответе на это сообщение протокол монтирования возвращает описатель файла, который клиент будет использовать для идентификации каталога в последующих запросах. Вспомним, что описателем является строка, содержащая идентификатор сервера и соответствующего каталога или файла. Например, когда происходит монтирование /users как локального каталога /usr, в ответе на запрос монтирования будет возвращен описатель файла для каталога /users.
15.15.1
Процедуры, поддерживающие программу mount на сервере, показаны в таблице 15.4.
Таблица 15.4 Процедуры монтирования
Процедура | Описание |
---|---|
0 | Null (пустая): Ответ указывает на активность программы. |
1 | Add Mount Entry (добавить точку монтирования): В список команды mount добавляется элемент для монтируемого удаленного каталога. |
2 | Return Mount Entries (возвратить точку монтирования): Возвращение клиенту текущего пути монтируемого каталога. |
3 | Remove Mount Entry (удалить точку монтирования): Удалить сведения о заданном каталоге. |
4 | Remove All Mount Entries (удалить все точки монтирования): Удалить всю информацию о монтировании удаленных каталогов. |
5 | Return Export List (возвратить список экспортируемых каталогов): Получить список каталогов и хостов, к которым разрешен доступ. |
15.16 Особенности NFS
В NFS требуется как можно большая независимость сервера. Сервер NFS должен хранить как можно меньше сведений о клиенте, чтобы при крахе клиента или сервера восстановление было простым и безболезненным.
Клиент знает, что сервер NFS берет на себя всю работу по обслуживанию запроса и выводу ответа. Однако часто NFS работает поверх протокола UDP, не обеспечивающего целостности информации. Что делать, если на запрос не приходит ответ? NFS просто повторяет запрос после интервала тайм-аута.
Иногда случается так, что исходный запрос попадает на сервер, но ответ на этот запрос теряется. Для таких случаев сервер NFS не придерживается полной независимости от клиента и кеширует самые последние ответы для вывода их на дублированные запросы.
На какие из запросов следует кешировать ответы? Некоторые операции (например, чтение или просмотр) являются равномощными (idempotent), т.е. при многократном выполнении они формируют тот же самый результат. Другие операции (например, удаление файла или создание каталога) — не являются равномощными. При потере исходного результата выполнение повторного запроса на операцию приведет только к бессмысленному сообщению об ошибке. Понятно, что кешировать следует операции, не являющиеся равномощными: это позволит NFS формировать корректный ответ на повторные запросы.
15.17 Протокол NFS
Последней реализацией NFS является версия 3, хотя продолжают успешно применяться реализации версии 2. Программа NFS сервера имеет номер 100003 и, по соглашению, NFS захватывает при инициализации порт 2049.
15.17.1 Описатели файлов
Когда клиент монтирует каталог, протокол возвращает ему описатель файла (file handle), который должен идентифицировать данный каталог в последующих запросах клиента. Монтируемый каталог может содержать подкаталоги, имеющие, в свою очередь, собственные подкаталоги, и т.д. Возможно, путь к файлу будет содержать несколько уровней вложенности. Например, перед тем как клиент сможет изменить файл:
необходимо получить описатель данного файла с сервера. Для этого NFS выполняет последовательный поиск (одно перемещение по дереву за каждый запрос). Для нашего файла клиент должен:
■ Послать на сервер запрос на просмотр описателей файлов каталога /users и указать имя John. В ответе будет возвращен описатель каталога /users/john.
■ Послать на сервер запрос на просмотр описателей файлов каталога /users/john и указать имя book. Сервер возвратит описатель для /users/john/book.
■ Послать на сервер запрос на просмотр описателей файлов каталога /users/john/book и указать имя chapter3. В ответе будет содержаться описатель нужного файла.
Таким образом, для получения описателя файла клиент NFS должен отправить несколько запросов.
15.17.2 Процедуры NFS
Существуют процедуры NFS, обеспечивающие клиенту доступ, чтение или запись удаленного файла. Клиент может узнать структуру и реальную емкость удаленной файловой системы либо запросить атрибуты удаленного файла. Допустимо удалять и переименовывать файлы. Некоторые процедуры специфичны для файловой системы Unix (например, связывание с именем псевдонима файла). Процедуры NFS версий 2 и 3 кратко представлены в таблице 15.5.
Таблица 15.5 Процедуры NFS версий 2 и 3
Процедура | Версия 2 | Версия 3 |
---|---|---|
0 | Пустая процедура для тестирования | Пустая процедура для тестирования. |
1 | Получить атрибуты файла | Получить атрибуты файла. |
2 | Установить атрибуты файла | Установить атрибуты файла. |
3 | Устаревшая процедура | Просмотр имени файла. По описателю файла для каталога и имени подкаталога или файла возвратить описатель файла для подкаталога или файла. |
4 | Просмотр имени файла | Проверка полномочий доступа. |
5 | Чтение информации о связанной с файлом символьной ссылке | Чтение информации о связанной с файлом символьной ссылке. |
6 | Чтение данных из файла | Чтение данных из файла |
7 | Не используется | Записать данные в файл. Запрос может указывать, будет ли кешироваться операция записи и будет ли результат операции фиксироваться в устойчивом состоянии до отправки ответа. |
8 | Записать данные в файл | Создать файл. |
9 | Удалить файл | Создать каталог. |
10 | Создать файл. | Создать символьную ссылку (symbolic link). |
11 | Переименовать файл | Создать узел (например, специальное устройство). |
12 | Создать ссылку на файл | Удалить (стереть) файл. |
13 | Создать символьную ссылку | Удалить каталог. |
14 | Создать каталог | Переименовать файл или каталог. |
15 | Удалить каталог | Создать ссылку на объект. |
16 | Прочитать имя файла или файлов из каталога | Прочитать имя файла или файлов из каталога. |
17 | Получают информацию о файловой системе (например, о размере блока и количестве свободных блоков) | Прочитать имена файлов, поля, атрибуты и описатели из каталога. |
18 | Получить динамическую информацию от файловой системы (например, об общем размере и объеме свободного пространства). | |
19 | Получить статическую информацию от файловой системы (например, о максимальном размере для запросов чтения и записи). | |
20 | Извлечение информации POSIX (например, об атрибутах и максимальной длине имени файла). | |
21 | Фиксация (commit): перенос предварительно размещенных в кеше данных на устройство постоянного хранения. |
15.17.3 Специальные утилиты
В идеале NFS должна быть прозрачна для пользователей. Файлы сервера должны открываться, читаться, записываться и закрываться так же, как локальные файлы, а применяться для этого должны обычные локальные команды.
Когда клиент и сервер имеют одинаковые операционные системы, проблем не возникает. Иногда для NFS требуется только несколько дополнительных команд для согласования различных типов операционных систем клиента и сервера. Рассмотрим конкретный пример.
Когда клиент DOS обращается к файловому серверу Unix, создаваемые и именуемые клиентом файлы должны соответствовать требованиям DOS и являться реальной частью клиентской файловой системы.