Проблемы наименования файлов NFS

Одна из проблем, с которой вы можете столкнуться при интеграции файловых систем UNIX и NT с помощью NFS, состоит в способе управления алфавитным набором в именах файлов. Файловые системы UNIX полностью чувствительны к регистру. Это означает, что файлы TEST, test и Test могут одновременно существовать в одном и том же директории. Эти имена относятся к трем разным отдельным файлам.

IT, для сравнения, сохраняет регистр файлового имени, но не распознает различия в регистре. Таким образом, если бы вы сохранили файл с именем TEST, он был бы записан на диск как TEST. Однако при этом вы могли обратиться к этому файлу в программе как к test, и NT открыло бы файл TEST. Это предохраняет вас от присутствия в одном директории нескольких файлов с одним и тем же именем, отличающимся только регистром. В действительности некоторые программы NT будут менять регистр имени файла при сохранении этого файла на диске.

Так как UNIX чувствителен к регистру, a NT нет, могут возникнуть проблемы при попытке обратиться к файлам через NFS. Клиенты UNIX, двигаясь UNIX-серверам, могут изменить, а могут и не менять регистр имени файла прежде, чем посылать его в систему UNIX в качестве запроса. Разные NFS программы NT управляют регистром имени файла по-разному.

NFS на UNIX

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

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

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

Экспорт файловых систем

Фактически все версии UNIX используют текстовый файл конфигурации для задания файловых систем, которые будут доступны через NFS. В большинстве случаев этот файл называется /etc/exports. Большинство версий UNIX устанавливается так, чтобы автоматически стать сервером NFS, если они будут иметь файловые системы, сконфигурированные для экспорта. Поэтому, когда загружается система UNIX, она, как правило, ищет файл /etc/exports и, если находит его, становится сервером NFS.

Для Sun Solaris некоторые из имен файлов и команд отличаются от перечисленных здесь. Последние даны только в качестве примеров, хотя они и работают в широком диапазоне систем UNIX.

В файле /etc/exports перечислены файловые системы, которые система UNIX делает доступными через NFS. В дополнение к списку этот файл включает также полномочия и ограничения на доступ к указанным файловым системам. NFS не рекламирует свои экспортируемые файловые системы, как это делают некоторые другие операционные системы. Вместо этого он устанавливает список текущих экспортируемых файловых систем, используемых для ответа на запросы от клиентов NFS.

Большинство файловых систем или поддиректориев UNIX могут быть экспортированы (при двух исключениях) через NFS. Только локальные файловые системы могут быть экспортированы; вы не можете экспортировать удаленные файловые системы через NFS. Кроме того, если вы пытаетесь экспортировать поддиректорий или родительский директорий файловой системы, которые уже экспортированы, экспортируемая файловая система должна находиться на другом физическом сегменте или устройстве. Таким образом, если /usr/local экспортирован через NFS, вы не сможете экспортировать /usr/local/bin, если только он не существует на другом сегменте или устройстве.

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

Экспорт файловых систем через NFS в действительности представляет собой двух шаговый процесс. Сначала необходимо создать в файле /etc/exports соответствующие элементы, а затем дать UNIX указание фактически сделать файловые системы доступными. Синтаксис файла /etc/exports не очень сложный. Рассмотрим пример:

      # Пример файла /etc/exports
      /projects -access=ivanova:sheridan,rw=ivanova: sheridan
      /usr/local/bin -ro, anon=nobody
      /home/biff -access=wks03,rw=wks03
      /home/security hole

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

Возвращаясь к нашему примеру, видим, что мы экспортируем четыре файловых системы.
Первая строка

      /projects  -access=ivanova:sheridan,rw=ivanova:sheridan
Делает доступной файловую систему по имени /projects. Доступ к ней ограничен рамками рабочих станций "ivanova" и "sheridan". Кроме того, только эти две рабочие станции могут производить запись в указанную файловую систему.
Вторая строка экспорта
      /usr/local/bin -ro, anon=nobody
Открывает доступ к директорию /usr/local/bin. Ее опции ограничивают ее использование только чтением и отображают любых анонимных пользователей в идентификатор пользователя (UID) nobody. Так как в списке обращений никакие хосты не перечисляются, то все хосты на Internet могут монтировать эту файловую систему, хотя и только для чтения.
Третий компонент в примере файла /etc/exports
      /home/biff -access=wks03,rw=wks03
Очень похож на первый. Директорий /home/biff экспортируется с доступом и привилегиями чтения/записи, предоставляемыми только для хоста "wks03".

Распространенные опции экспорта для файла /etc/exports
Опция
Описание
-access=host:host...Позволяет установить доступ только к хостам из списка доступа. Все остальные хосты не смогут установить эту файловую систему
-anon=uidОтображает анонимных пользователей, т. е. тех, которые не представлены в серверной базе данных паролей, в этот пользовательский ID. Эта опция используется для ограничения обращений анонимных пользователей. Большинство систем устанавливает анонимного пользователя как системного пользователя nobody
-roДелает файловую систему доступной только для чтения. Никто не сможет вести запись в файловую систему с установленным флагом ro
-rw=host:host...Разрешает обращение по чтению и записи только для хостов из списка доступа. Все другие хосты не смогут вести запись в эту файловую систему. Если имена хостов вообще не заданы, то это означает, что всем хостам будет предоставлен доступ на запись в эту файловую систему
-root=host:host...Разрешает рассматривать корневого пользователя по определенной файловой системе как корневого по экспортируемой файловой системе. Используйте эту опцию осторожно

Четвертая строка в нашем примере
      /home/security hole
Не имеет опций по доступу и делает директорий /home/security_hole доступным для всех.

Поведение NFS по умолчанию состоит в предоставлении доступа на чтение-запись и в отсутствии ограничений по доступу, если не заданы никакие опции доступа. Это означает, что директорий /home/security_hole может быть установлен любым пользователем на Internet и при этом доступен для записи. Это плохой способ! Всегда следует контролировать доступ к своим экспортируемым файловым системам, особенно по доступу на чтение/запись. Для сравнения, директорий /usr/local/bin может быть смонтирован всеми, но только для чтения. Если на вашем узле используется Network Information Service (NIS), вы можете установить сетевые группы рабочих станций, чтобы ограничить доступ к файловым системам через NFS.

Как только вы ввели свои файловые системы в файл /etc/exports, вам необходимо сделать их доступными через NFS. Многие системы для выполнения этого используют команду exportfs. Другие разновидности UNIX используют демон nfsd, чтобы непосредственно экспортировать файловые системы. Для нашего примера предположим, что вы используете команду exportfs.

На Solaris такой командой будет share и синтаксис несколько отличается.

Команду exportfs можно использовать для экспорта всех файловых систем из файла /etc/exports, только выбранной или для повторного экспорта всех файловых систем. Чтобы экспортировать все не экспортированные файловые системы, просто задайте команду

      # exportfs
Если вы хотите повторно экспортировать все файловые системы из своего файла /etc/exports, используйте опцию "", как в:
      # exportfs -a
Это заставит демона nfsd заново экспортировать все файловые системы, включая и те, что уже были экспортированы.

Монтирование файловых систем

Теперь, когда вы экспортировали файловые системы со своего сервера NFS, необходимо смонтировать их у клиентов NFS. Так как этот раздел главы относится к UNIX, то давайте потратим некоторое время на разговор о том, как монтировать эти экспортированные файловые системы клиенту UNIX. Напоминаем, что сервер NFS, который экспортировал эти файловые системны, мог быть либо операционной системой UNIX, либо операционной системой NT. Для монтирования файловых систем это значения не имеет.

В системе UNIX существует два способа монтирования файловой системы NFS. Для долговременных установок, которые вы хотите переустанавливать каждый раз при загрузке своей системы, можно разместить элемент в файле файловых систем по умолчанию, как правило, называемом /etc/fstab. При загрузке системы UNIX команда mount прочтет этот файл и затем попытается монтировать каждую файловую систему из него. Ниже приведены две строки из обобщенного файла /etc/fstab, показывающие как перечислять файловые системы NFS для автоматического монтирования. Не забудьте, что синтаксис этого конфигурационного файла будет несколько различаться в зависимости от версий UNIX.

      server: /home/marcus          home/marcus    nfs     rw,hard      0    0
      zippy:/pub                    pub            nfs     rw,hard      0    0
Первый элемент в каждой строке, такой как "server: /home/marcus", определяет имя сервера NFS, за которым следует двоеточие, затем имя экспортируемой файловой системы. Второй элемент в строке, "/home/marcus", сообщает команде mount где мы хотим локально установить файловую систему. Третий элемент, "nfs", дает mount указание на обработку этой файловой системы. Четвертый элемент, "rw,hard", представляет список установочных опций, по которым mount делает файловую систему доступной для чтения/записи и жестко установленной. Последние элементы, "0 0" - это числа, используемые утилитой fsck операционной системы UNIX, которая автоматически проверяет файловые системы. Установки NFS всегда должны иметь этот элемент установленным в "0 0".

Второй способ монтирования экспортируемых файловых систем NFS состоит в установке их непосредственно командой mount. Например, чтобы смонтировать первый элемент файловой системы из предыдущего примера, мы зададим команду:

     #  mount  -t  nfs  -о  rw,hard   server:/home/marcus   /home/marcus
Мы видим, что большая часть информации из строки "/etc/fstab" используется в команде mount. Опция "-t nfs" говорит mount, что это файловая система NFS. Опция "-о rw,hard" указывает mount установить файловую систему в режим чтения/записи и жестко. Следующие пункты в строке - это соответственно информация о сервере, файловой системе и месте установки. Если вы используете команду mount, то установка новой файловой системы сохраняется до тех пор, пока вы не демонтируете ее или не перезагрузите систему. Если вы проведете загрузку системы заново, то новая файловая система не будет переустанавливаться, если только вы не определите соответствующий элемент в файле /еtс/fstab.

Жесткое и мягкое монтирование

Вы, возможно, уже размышляете об опции "жесткого" (hard) монтирования из предыдущего раздела. NFS может устанавливать файловые системы одним из двух способов, известных как "жесткое монтирование" (hard mount) и "мягкое монтирование" (soft mount). При жестком монтировании NFS обрабатывает файловую систему как локальное устройство. Если сервер NFS теряет свое положение или сетевая связь между сервером и клиентом становится недоступной, любые процессы, которые пытаются обратиться к ресурсам NFS, "зависают" во время попытки клиента NFS повторно обратиться к ресурсу. Это известно под названием блокирования процесса (process blocking). Для клиента это выглядит так, как если бы локальный диск сломался. Когда экспортируемая файловая система сервера снова станет доступной, NFS разрешит заблокированным процессам возобновлять операции, гарантируя таким образом целостность данных, записанных в жестко монтируемую файловую систему.

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






Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости