NFS (настройка)

Материал из Wiki семьи Белых
Перейти к: навигация, поиск

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

Небольшое замечание. Если вы используете ядро 2.2.13 и выше, вы можете использовать nfs-kernel-server. Кроме него можно использовать nfs-user-server. Этот пакет более медленный, но имеет больше функций и его легче дебажить, чем nfs-kernel-server.

Установка в Debian/Ubuntu осуществляется следующей командой:

Code:
# aptitude install nfs-kernel-server nfs-common portmap 

После установки нужно указать, доступ к каким директориям мы предоставляем. Для этого правим файл /etc/exports. Для NFSv3 и ранее содержимое файла будет выглядеть примерно так:

Файл: /etc/exports
/mnt/movie 192.168.0.0/24(rw,async,no_subtree_check)
/mnt/user 192.168.0.41(rw,async,no_subtree_check)

В NFSv4 предоставляется доступ к главной директории и ее поддиректориям. Таким образом в первой строке описывается главная директория, а в последующих - поддиректории, с отдельной строки:

Файл: /etc/exports
/mnt 192.168.0.0/24(ro, fsid=0, async, no_subtree_check)
/mnt/movie 192.168.0.0/24(rw, async, no_subtree_check)
/mnt/user 192.168.0.41(rw, async, no_subtree_check)

В этом примере директория /mnt/movie будет доступна всем в сети 192.168.0.0/24, а /mnt/user - только с компьютера с адресом 192.168.0.41 при этом можно указать несколько конкретных адресов в одной строке разделив блоки описания пробелом.

Пояснения к параметрам в строке

  • /mnt/movie - путь к директории, доступ к которой необходимо предоставить.
  • 192.168.1.0/24 - описание сети, из которой можно получить доступ к директории. Также можно указать конкретный адрес, к примеру, 192.168.0.41. Кроме того, NFS понимает шаблоны с применением символов * и ?.
  • rw - говорит о том, что предоставляются права как на чтение, так и на запись. Если нужно разрешить только читать из директории, то следует указать параметр ro.
  • async - включает возможность обслуживания клиентов еще до окончания действия предыдущей команды на запись. Это может значительно увеличить быстродействие при большом количестве пользователей, но снижает надежность. По умолчанию, включена опция sync.
  • no_subtree_check - отключает проверку вложенных директорий.

Прочие опции

  • secure - при включении данной опции для соединения будут использоваться порты с номером ниже 1024. Эта опция включена по умолчанию, чтобы её отключить, используйте параметр insecure.
  • no_wdelay - эта опция не действует при включенной опции async. В нормальном состоянии NFS-сервер немного задерживает запись на диск, если уже ведется запись или ожидается поступление запроса на запись. Это позволяет запустить несколько процессов записи на диск с помощью одной команды, что увеличивает производительность. Однако, если NFS-сервер получает в основном мелкие, не связанные между собой, запросы, то стандартное поведение может снизить производительность, поэтому доступна опция no_wdelay чтобы отключить задержку перед записью.
  • nohide - в случае когда экспортируются две директории, одна из которых вложенная, при монтировании только родительской директории вложенная будет видна как пустая. Чтобы предотвратить такой эффект, можно использовать данный параметр. Стоит учесть, что данный параметр работает только для экспортирования по конкретному ip-адресу. Обратным параметром является параметр hide.
  • crossmnt - данный параметр похож на параметр nohide, но дделает возможным для клиентов переходить из файловой системы помеченой параметром crossmnt в экспортированную файловую систему смонтированную в ней. То есть когда вложенная файловая система "B" смонтирована внутри файловой системы "A", установка параметра crossmnt для "A" имеет тот же эффект, как установка параметра nohide для "B".
  • fsid=num|root|uuid - NFS необходимо идентифицировать каждую файловую систему, которую она экспортирует. Обычно используется UUID. Однако ядра Linux ниже 2.6.20 не понимают UUID, поэтому необходимо устанавливать данный параметр, к примеру fsid=root или fsid=0.

Опции подмены идентификатора пользователя

nfsd основывает свой доступ к файлами на сервере на gid и uid, предоставляемых в каждом NFS RPC запросе. По привычке пользователь будет ожить что он может получить доступ к своим файлам на сервере, как к обычной файловой системе. Это требует того, чтобы одни и те же gid и uid использовались на клиентской и серверной машинах. Это не всегда верно или не всегда желательно.

Очень часто не желательно, чтобы пользователь root на клиентской машине также воспринимался как root при доступе к файлам на NFS-сервере. Чтобы это предотвратить uid 0 обычно подменяется другим id: так называемым "анонимом" или nobody. Этот тип поведения (называемый "root squashing") применяется по умолчанию и может быть отключен параметром no_root_squash.

По умолчанию, exportfs использует uid/gid с номером 65534 для доступа с подменой. Эти значения могут быть изменеы параметрами anonuid и anongid. Наконец, вы можете подменить все пользовательские запросы на анонимные с помощью параметра all_squash.

Вот полный список параметров для подмены идентификаторов:

  • root_squash - подменяет запросы от uid/gid 0 (root) на анонимыне uid/gid.
  • no_root_squash - выключает подмену uid/gid для root. Эта опция используется в основном для бездисковых клиентских машин.
  • all_squash - используется обычно для публичного экспорта директорий. Обратный параметр - no_all_squash.
  • anonuid и anongid - применяется для указания uid/gid для анонима. Это может быть полезно, если какая либо директория экспортируется для конкретного пользователя, заведенного в системе.

Запуск NFS-сервера

После описания всех директорий, к которым предоставляем доступ, сохраняем файл и перезапускаем NFS-сервер, так как после установки он запускается автоматически:

Code:
# /etc/init.d/nfs-kernel-server restart

Чтобы не передергивать сервис, можно мягко применить измененные настройки командой:

Code:
# exportfs -ra

Где параметр -a говорит о том, что нужно экспортировать все директории из файла /etc/exports, а параметр -r заставляет реэкспортировать список всех директорий очистив текущий список. Вообще говоря, если нужно пополнить список экспортированных директорий, то нужно использовать параметр -a, а если нучно убрать все текущие и добавить только те, что есть в /etc/exports, то следует использовать параметр -r. Также может быть полезен параметр -u, который позволяет отменить экспорт определенных директорий и параметр -f, который очищает текущую таблицу экспорта ядра и все активные пользователи при последующем запросе получат новый список экспортируемых директорий.

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

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

При необходимости устанавливаем пару пакетов:

Code:
# aptitude install nfs-common portmap

Монтирование NFS разделов

Ручной режим

NFS в ручном режиме монтируется:

Code:
mount shadowman.example.com:/misc/export /misc/local

Предупреждение: К моменту выполнения этой команду уже должен существовать каталог точки монтирования на локальном компьютере (в приведённом выше примере /mnt/local).

В этой команде shadowman.example.com — имя узла файлового сервера NFS, /misc/export — каталог, который экспортирует shadowman, а /misc/local — размещение монтируемой файловой системы на локальном компьютере. Выполнив команду mount (и имея необходимые разрешения на NFS-сервере shadowman.example.com), клиент может запустить команду ls /misc/local и получить список файлов в каталоге /misc/export на компьютере shadowman.example.com.

Подключение файловых систем NFS с помощью /etc/fstab

Также можно подключить NFS-ресурс другого компьютера, добавив строку в файл /etc/fstab. В этой строке указывается имя NFS-сервера, каталог, экспортируемый этим сервером, и каталог локального компьютера, в который будет смонтирован этот NFS-ресурс. Чтобы изменить файл /etc/fstab, вы должны быть пользователем root.

Типичная запись в файле /etc/fstab выглядит следующим образом:

Файл: /etc/fstab
server:/usr/local/pub    /pub   nfs    rsize=8192,wsize=8192,timeo=14,intr,noauto

К моменту выполнения этой команды, каталог /pub уже должен существовать на клиентском компьютере. Добавив эту строку в файл /etc/fstab на клиентском компьютере, введите в приглашении оболочки команду

Code:
# mount /pub

Каталог /pub будет смонтирован с сервера.

Монтирование файловых систем NFS с помощью autofs

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

Autofs анализирует главный файл сопоставлений /etc/auto.master для определения точек монтирования. Затем запускается процесс автоматического монтирования каждой точки с указанными параметрами. Каждая строка в главном файле сопоставлений определяет точку монтирования, а отдельный файл сопоставлений определяет, какие файловые системы должны быть смонтированы в эту точку. Например, файл /etc/auto.mnt может определять точки монтирования для каталога /mnt, и эта связь будет определяться в файле /etc/auto.master.

Каждая запись в auto.master имеет три поля. В первом поле указывается точка монтирования. Во втором поле определяется размещение файла сопоставлений, а третье поле является необязательным. Третье поле может содержать дополнительную информацию, например значение таймаута.

Например, чтобы смонтировать каталог /proj52 удалённого компьютера penguin.example.net в точку монтирования /mnt/myproject на вашем компьютере, добавьте в файл auto.master следующую строку:

/misc   /etc/auto.misc --timeout 60

Затем, добавьте в файл /etc/auto.mnt следующую строку:

myproject  -rw,soft,intr,rsize=8192,wsize=8192 penguin.example.net:/proj52

Первое поле в файле /etc/auto.mnt содержит имя подкаталога в /misc. Этот подкаталог динамически создаётся демоном automount. Он не должен существовать на клиентском компьютере. Второе поле содержит параметры подключения, например, параметр rw разрешает доступ на чтение и запись. В третьем поле определяется размещение NFS-экспорта, включая имя компьютера и каталога.

Замечание: Каталог /misc должен уже существовать в локальной файловой системе. При этом в локальном каталоге /misc не должно быть подкаталогов.

Чтобы запустить службу autofs, введите в приглашении оболочки следующую команду:

/sbin/service autofs restart

Чтобы просмотреть активные точки монтирования, введите в приглашении оболочки следующую команду:

/sbin/service autofs status

Если вы измените файл конфигурации /etc/auto.master во время работы autofs, вы должны указать демону automount перегрузить его, выполнив следующую команду в приглашении оболочки:

/sbin/service autofs reload

Использование UDP

Транспортным протоколом в NFSv4 по умолчанию является TCP; однако, ядро Red Hat Enterprise Linux 4 также поддерживает NFS поверх UDP. Чтобы использовать NFS поверх TCP, при подключении экспортированной файловой системы NFS на клиентском компьютере передайте параметр -o udp команде mount.

Подключить экспорт файловой системы NFS можно тремя способами. По требованию, в командной строке (на стороне клиента), автоматически, с помощью файла /etc/fstab (на стороне клиента) и автоматически, с помощью файлов конфигурации autofs, например, /etc/auto.master и /etc/auto.misc (на стороне сервера с использованием NIS).

Например, чтобы настроить экспорт в командной строке (на стороне клиента):

Code:
mount -o udp shadowman.example.com:/misc/export /misc/local

Когда NFS-монтирование указано в /etc/fstab (на стороне клиента):

Файл: /etc/fstab
server:/usr/local/pub    /pub   nfs    rsize=8192,wsize=8192,timeo=14,intr,udp

Когда NFS-монтирование указано в файле конфигурации NIS-сервера (для рабочих станций, поддерживающих NIS):

myproject  -rw,soft,intr,rsize=8192,wsize=8192,udp penguin.example.net:/proj52

Так как по умолчанию используется TCP, если параметр -o udp не указан, клиент обращается к экспортированной файловой системе NFS по протоколу TCP.

Использование TCP даёт в частности следующие преимущества:

  • Повышенная прочность соединения, то есть меньше сообщений NFS stale file handles.
  • Выигрыш в скорости в сильно загруженных сетях, так как TCP подтверждает каждый пакет, в отличие от UDP, который подтверждает только завершение всей операции.
  • TCP имеет лучшие средства для работы в загруженных сетях, по сравнению с UDP (у него их вообще нет). В первую очередь в сильно загруженных сетях пропадают пакеты UDP. Это значит, что если NFS пишет данные блоками по 8 Кбайт, по UDP приходится передавать повторно все 8 Кбайт. А так как TCP работает надёжно, передаются только части этих 8 Кбайт.
  • Выявление ошибок. Когда TCP-соединение разрывается (по причине недоступности сервера) клиент прекращает передачу данных и перезапускает подключение, пока сервер не будет доступен. Так как протокол UDP не контролирует подключения, сеанс продолжает забрасывать сеть данными, пока сервер не восстановит подключение.

Основным недостатком TCP является очень незначительное снижение производительности из-за накладных расходов, связанных с протоколом TCP.