Опубликован: 04.07.2008 | Уровень: специалист | Доступ: свободно | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 7:

Настройка сервера и клиента NFS

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Задачи NFS

Сетевая файловая система (Network File SystemNFS) служит для обеспечения доступа компьютерам сети к общим каталогам на сервере. Централизованное хранение файлов на сервере облегчает организацию работы в большой сети, особенно там, где один и тот же пользователь может работать в разное время на разных компьютерах. С помощью файлового сервера решается сразу несколько задач:

  1. регулярное резервное копирование всех данных: нереально выполнять регулярное копирование данных с нескольких десятков или сотен компьютеров, но вполне реально – с единственного сервера или нескольких серверов;
  2. повышение надежности хранения данных: глупо в каждый компьютер в сети устанавливать RAID-массив, ведь подавляющее большинство файлов в компьютере, таких, как установленные пакеты программ, проще установить заново, чем защищать их от сбоя; но совершенно разумно укомплектовать файловый сервер аппаратным RAID-массивом или организовать там программный RAID-массив, хотя бы простое зеркалирование дисков;
  3. уменьшение стоимости хранения данных: дорого и неэффективно в каждый компьютер устанавливать огромный диск на случай, если потребуется хранить много данных, но на сервере вполне можно установить масштабируемую дисковую подсистему большого объема;
  4. обеспечение доступа к одним и тем же данным с любого компьютера.

Описание NFS

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

Версии NFS

NFS была разработана компанией Sun Microsystems и оказалась настолько удачной, что ее реализации были воплощены разными компаниями почти для всех операционных систем. Существует несколько принципиально разных реализаций NFS. Достаточно распространена версия NFS 2.0, хотя уже в Solaris 2.5 была введена NFS 3.0. В последующих версиях Solaris, включая Solaris 9, в NFS были внесены существенные дополнения, но сам протокол остался совместимым с реализацияим NFS 3.0 в других системах. Начиная с NFS 3.0, поддерживается передача пакетов посредством TCP и UDP, ранее поддерживался только UDP.

Будьте внимательны! В сети следует использовать клиентов и серверы NFS одной и той же версии. NFS 2.0 можно встретить в старых системах, например, в HP-UX 10.0. Совместная работа систем, использующих разные версии NFS, нежелательна.

Совместимость NFS и других служб разделяемых каталогов

NFS по смыслу и по организации работы похожа на разделяемые каталоги (shared folders) в системах Windows, но в этих службах используются совершенно разные протоколы работы и между собой они не совместимы. Однако, существует несколько программных продуктов, которые устанавливают поддержку NFS в системах Windows, поэтому применение NFS в сети с различными операционными системами не представляет проблемы, надо только помнить о необходимости использовать одинаковые версии NFS.

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

Поскольку компьютеры на рабочих местах сотрудников в России обычно управляются Windows-системами, в качестве файловых серверов часто используются также Windows-системы. Однако, нередко возникает желание установить UNIX на файл-сервер, чтобы повысить надежность, сократить затраты на оборудование или использовать этот же сервер для ряда других корпоративных нужд: веб-сервера, сервера баз данных и т.п. Чтобы не устанавливать дополнительное ПО для поддержки NFS в таком случае, достаточно установить пакет samba на UNIX-машину. Он позволит ей "прикинуться" Windows NT сервером так, чтобы все клиентские компьютеры воспринимали его как самый обычный файл-сервер или принт-сервер Windows-сети. Пакет samba умеет обеспечивает поддержку "родного" для Windows-сетей протокола SMB.

В тех случаях, когда в сети работают несколько UNIX-компьютеров и им нужно обращаться к одному файл-серверу, имеет смысл использовать механизм NFS (network file system).

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

Терминология NFS

После настройки NFS-сервера UNIX-компьютер будет предоставлять доступ внешним пользователям к некоторым каталогам своей файловой системы. Такое предоставление доступа называется "экспортом": говорят, что система экспортирует свои каталоги. Как именно каталоги будут экспортироваться, определяется списком, который задает системный администратор. В большинстве систем UNIX этот список содержится в файле /etc/exports, но в Solaris он находится в другом файле – /etc/dfs/dfstab.

NFS работает посредством механизма удаленного вызова процедур (RPC – Remote Procedure Call).

Что такое RPC

Идеология RPC очень проста и привлекательна для программиста. Как обычно работает сетевое приложение? Оно следует некоему протоколу (например, HTTP): формирует пакет с запросом, вызывает системную функцию установления соединения, затем функцию отправки пакета, затем ждет ответного пакета и вызывает функцию закрытия соединения. Это значит, что вся работа с сетью является заботой программиста, который пишет приложение: он должен помнить о вызове функций сетевого API системы, думать о действиях в случае сбоев сети.

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

Для того, чтобы обеспечить прозрачность пересылки данных через сеть, придумана двухступенчатая процедура. На сервере любое приложение, которое хочет предоставлять свой сервис через RPC, регистрируется в программе, которая называется транслятором портов (port mapper). Функция этой программы – устанавливать соответствие между номером процедуры RPC, которую запросил клиент, и номером TCP или UDP порта, на котором приложение сервера ждет запросов. Вообще говоря, RPC может работать не только с TCP или UDP, в Solaris как раз реализована работа на базе механизма TI (Transport-Independent), поэтому в Solaris транслятор портов называется rpcbind, а не portmap, как в Linux или FreeBSD.

Приложение, которое регистрируется у транслятора портов, сообщает ему номер программы, номер версии и номера процедур, которые могут обрабатываться данной программой. Эти процедуры будут впоследствии вызываться клиентом по номеру. Кроме этого, приложение сообщает номера портов TCP и UDP, которые будут использоваться для приема запросов на выполнение процедур.

Клиент, желающий вызвать выполнение процедуры на сервер, сначала отправляет запрос транслятору портов на сервер, чтобы узнать, на какой TCP или UDP порт надо отправить запрос. Транслятор портов запускается при старте системы и всегда работает на стандартном порте 111. Получив ответ от него, клиент отправляет запрос на тот порт, который соответствует требуемому приложению. Например, сервер NFS работает на порту 2049.

Процедура монтирования общего каталога через NFS

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

Клиент NFS посылает запрос на монтирование удаленному компьютеру, который предоставляет свою файловую систему (обычно – некоторую ее часть) для общего пользователя. При этом говорят, что сервер NFS "экспортирует" тот или иной каталог (подразумевается – с подкаталогами). Запрос от клиента NFS попадает на обработку демону mountd. Тот выдает клиенту NFS специальный ключ. Этот ключ является идентификатором, который однозначно идентифицирует каталог, смонтированный по сети.

По NFS можно смонтировать как целые файловые системы, так и отдельные каталоги. Из соображений безопасности запрещено монтировать каталоги "через раздел". Это означает, что если каталог /var расположен на одном разделе диска, а каталог /var/adm – на другом, то при монтировании каталога /var каталог /var/adm не будет автоматически смонтирован. Если требуется монтировать те подкаталоги экспортируемого каталога, которые расположены в другой файловой системе (на другом разделе), следует экспортировать их отдельно и указывать в /etc/dfs/dfstab еще один разделяемый каталог – тот самый подкаталог с другого раздела.

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

После монтирования файловой системы через NFS клиент посылает серверу запросы на передачу и прием файлов, эти запросы обрабатывает демон nfsd.

Демонтирование файловой системы выполняется также, как и демонтирование любой другой файловой системы – командой umount.

Ниже будут обсуждены следующие аспекты настройки службы клиент-сервер в сети:

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

Настройка NFS-сервера

Для настройки NFS сервера нам потребуется выполнить настройку как минимум трех приложений: rpcbind, mountd и nfsd. Прежде всего, создадим файл /etc/dfs/dfstab, в котором опишем экспортируемые каталоги; в отличие от других систем UNIX, Solaris требует указать здесь не просто список каталогов с параметрами монтирования, а набор команд share, которые фактически и запускают экспорт каталогов. Таким образом, получается, что /etc/dfs/dfstab – это скрипт, который выполняется для того, чтобы сделать общие каталоги доступными для монтирования через сеть.

rpcbind: объявление служб RPC

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

Когда клиент деалет RPC-вызов, сперва происходит выяснение требуемого номера порта на машине сервера у rpcbind.

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

Для проверки готовности всех служб NFS к работе через rpcbind используется команда rpcinfo -p:

rpcinfo -p
program vers proto port service
100000 4 tcp 111 rpcbind
100000 3 tcp 111 rpcbind
100000 2 tcp 111 rpcbind
100000 4 udp 111 rpcbind
100000 3 udp 111 rpcbind
100000 2 udp 111 rpcbind
100232 10 udp 32772 sadmind
100083 1 tcp 32771
100221 1 tcp 32772
100068 2 udp 32773
100068 3 udp 32773
100068 4 udp 32773
100068 5 udp 32773
100229 1 tcp 32773 metad
100230 1 tcp 32774 metamhd
100242 1 tcp 32775 metamedd
100001 2 udp 32774 rstatd
100001 3 udp 32774 rstatd
100001 4 udp 32774 rstatd
100002 2 udp 32775 rusersd
100002 3 udp 32775 rusersd
100002 2 tcp 32776 rusersd
100002 3 tcp 32776 rusersd
100008 1 udp 32776 walld
100012 1 udp 32777 sprayd
100011 1 udp 32778 rquotad
100024 1 udp 32779 status
100024 1 tcp 32777 status
100133 1 udp 32779
100133 1 tcp 32777
100021 1 udp 4045 nlockmgr
100021 2 udp 4045 nlockmgr
100021 3 udp 4045 nlockmgr
100021 4 udp 4045 nlockmgr
100021 1 tcp 4045 nlockmgr
100021 2 tcp 4045 nlockmgr
100021 3 tcp 4045 nlockmgr
100021 4 tcp 4045 nlockmgr
300598 1 udp 32784
300598 1 tcp 32781
805306368 1 udp 32784
805306368 1 tcp 32781
100249 1 udp 32785
100249 1 tcp 32782
1289637086 5 tcp 32787
1289637086 1 tcp 32787
100005 1 udp 32814 mountd
100005 2 udp 32814 mountd
100005 3 udp 32814 mountd
100005 1 tcp 33201 mountd
100005 2 tcp 33201 mountd
100005 3 tcp 33201 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl

При запуске системы в многопользовательском режиме 3 rpcbind запускается автоматически, а службы NFS – в случае, если существует файл /etc/dfs/dfstab.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Равиль Латыпов
Равиль Латыпов
Россия, Казань, Казанский Национальный Исследовательский Технический Университет