next up previous contents index
Next: Обобщение Up: NFS Previous: Установка сервера NFS   Contents   Index

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

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

Теперь Вы можете, в командной строке администратора, ввести соответствующую команду монтирования и требуемая файловая система появится. Продолжая пример из предыдущего раздела мы можем смонтировать /mn/eris/local с машины eris. Это делается с помощью команды:

mount -o rsize=1024,wsize=1024 eris:/mn/eris/local /mnt

Файловая система теперь доступна в /mnt и Вы можете перейти туда и выполнить команду ls, просмотреть отдельно взятые файлы. Вы заметите, что операция выполняется не так быстро, как в случае с локальной файловой системой, но более удобно чем при использовании ftp. Если вместо монтирования файловой системы команда mount выдаст сообщение об ошибке mount: eris:/mn/eris/local failed, reason given by server: Permission denied

то файл exports является неправильным или Вы забыли запустить exportfs после редактирования файла exports. Если команда сообщит mount clntudp_create: RPC: Program not registered

- это означает, что nfsd или mountd не запущены на сервере или у Вас проблема с hosts(allow,deny), о которой упомянуто выше.

Чтобы прекратить пользоваться файловой системой Вы можете запустить команду: umount /mnt

Чтобы выполнялось автоматическое монтирование файловой системы nfs при загрузке, Вам необходимо отредактировать файл /etc/fstab, как это обычно делается. Для нашего примера требуется строка:

# device mountpoint fs-type options dump fsckorder ... eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0 ...

Это почти все, что необходимо сделать.

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

  1. ``soft''. NFS клиент будет сообщать об ошибке программе, которая пытается получить доступ к файлу расположенному на файловой системе, смонтированной через NFS. Некоторые программы довольно хорошо обрабатывают такого рода ошибки, но большинство программ не делают этого. Не рекомендуется использование этой опции, так как она может привести к появлению испорченных файлов и потерянных данных. Особенно осторожно нужно использовать эту опцию для дисков при работе с почтовыми протоколами.
  2. ``hard''. Программа, осуществляющая доступ к файлу на смонтированной по NFS файловой системе просто приостановит выполнение при разрыве связи с сервером. Процесс не может быть прерван или ``убит'' до тех пор, пока Вы явно не укажите опцию intr. Когда сервер NFS будет запущен заново, то программа будет ``безмятежно'' продолжать работу с прерванного места. Этот вариант - скорее всего тот, который понадобится. Рекомендуется использовать опции intrhard,intr для всех файловых систем смонтированных через NFS.

Для предыдущего примера теперь в файле fstab запись будет выглядеть так:

# device mountpoint fs-type options dump fsckorder ... eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0 ...

Обычно, если не заданы опции rsize и wsize, то NFS будет читать и писать блоками по 4096 или по 8192 байтов. Некоторые комбинации ядер Linux и сетевых карт не могут эффективно обрабатывать такие большие блоки. Так что нужно поэкспериментировать и найти оптимальные значения rsize и wsize, которые бы позволили работать настолько быстро, насколько это возможно. Вы можете протестировать скорость передачи при заданных опциях при помощи нескольких простых команд. Выполнив вышеприведенную команду монтирования и получив доступ с правом записи на диск, Вы можете выполнить тестирование производительности следующим образом:

time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

Эта команда создает 64Mb файл, заполненный нулевыми значениями (файл должен быть достаточно большим - настолько большим, чтобы кэширование не сыграло значительную роль в увеличении производительности; используйте больший размер файла, если у вас достаточно много памяти). Проделайте эту операцию несколько раз (5- 10?) и усредните полученные результаты. Полученное значение - это время ``прохода'' - величина, наиболее интересующая нас в эксперименте. Затем можно измерить производительность чтения, считав файл обратно на исходную машину:

time dd if=/mnt/testfile of=/dev/null bs=16k

Выполните и эту операцию несколько раз и усредните результат. Затем размонтируйте файловую систему и смонтируйте ее заново, с увеличенными значениями rsize и wsize. Вероятно, значения должны быть кратными 1024, и не больше чем 16384 байтов, поскольку это максимальный размер блока данных в NFS версии 2. Прямо после монтирования с увеличенными значениями, перейдите к смонтированной файловой системе и выполните пробную команду ls, исследуйте файловую систему, чтобы убедиться в том, что все в порядке. Если значения rsize/wsize слишком большие, то симптомы этого очень необычны и не на все 100 процентов очевидны. Типичный симптом выражается в неполном списке файлов при выполнении команды ls и отсутствии сообщений об ошибках. Или чтение файлов внезапно срывается без вывода сообщения об ошибке. После того, как Вы установите, что заданные значения rsize/wsize оптимальны, можете продолжить тестировать производительность другими способами. Различные серверные платформы вероятно имеют различные оптимальные размеры блоков. SunOS и Solaris, по общему мнению, работают намного быстрее при размере блока равном 4096 байт, чем при других значениях.

Новые ядра Linux (с версии 1.3) ``предваряющее'' чтение при значениях rsize, больших или равных размеру страницы машины. Для процессоров Intel размер страницы равен 4096 байтам. Предваряющее чтение значительно увеличивает производительность NFS при чтении. Так что на машинах с процессором Intel Вы можете смело использовать значение rsize, равное 4096 байтам. Помните, что нужно отредактировать /etc/fstab для использования найденных значений rsize/wsize. Прием, позволяющий увеличить производительность NFS при записи, заключается в запрещении синхронной записи на сервер. Спецификация NFS требует, чтобы запросы NFS на запись не считались законченными до осуществления реальной записи данных на носитель (обычно диск). Это ограничивает производительность при записи в то время, как асинхронная запись значительно увеличивает скорость NFS. Демон nfsd никогда не выполняет синхронную запись, поскольку реализация файловой системы Linux сама не дает сделать это на серверах, работающих под управлением отличных от Linux систем. Вы можете увеличить производительность таким способом, поместив в файл exports:

/dir -async,access=linuxbox

или что-то подобное. Посмотрите справочную страницу exports, но помните, что это увеличивает риск потери данных.



Alex Otwagin 2002-12-16