NFS (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

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

Tango-dialog-warning.pngИнформация в этой статье или разделе устарелаTango-dialog-warning.png

Причина: пожалуйста, используйте первый аргумент шаблона для указания причины. (Обсудить)

Введение

Цель этой статьи - настройка NFS сервера для разделения файлов в сети. Будем придерживаться принципа KISS в статье, поэтому всё должно быть довольно понятно.

Установка

Для установки как сервера так и клиента достаточно установить пакет nfs-utils.

Настоятельно рекомендуется на всех узлах (клиентских и серверных) использовать системы синхронизации времени, такие как ntp. Без точной синхронизации системного времени, в процессе функционирования NFS возможно возникновение дополнительных нежелательных задержек.

Note: Пакет nfs-utils для архитектуры ARM, начиная с версии 1.3.2-4 (а возможно и с более ранних версий) имеет некоторые отличия в функционировании от версий для архитектур x86_64 или i686. Более детальную информацию о монтировании клиентских узлов можно найти на странице обсуждения dicsussion

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

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

Файлы

/etc/exports

Этот файл (/etc/exports) содержит различные разделяемые каталоги и права на них на сервере.
Несколько примеров:

/files *(ro,sync) # Только чтение для всех access to anyone
/files 192.168.0.2(rw,sync) # Чтение и запись для клиента с IP 192.168.0.2
/files 192.168.1.1/24(rw,sync) # Чтение и запись для всех клиентов с 192.168.1.1 по 192.168.1.255

Чтобы изменения вступили в силу без перезапуска демона, выполните команду:

# exportfs -arv


Если вы хотите сделать ваш разделённый NFS каталог открытым и с правом записи, вы можете использовать опцию all_squash в комбинации с опциями anonuid и anongid.

Например, чтобы установить права для пользователя 'nobody' в группе 'nobody', вы можете сделать следующее:

; Доступ на чтение и запись для клиента на 192.168.0.100, с доступом rw для пользователя 99 с gid 99
/files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Это также означает, что если вы хотите разрешить доступ к указанной директории, nobody.nobody должен быть владельцем разделённой директории:

# chown -R nobody.nobody /files

Подробнее - читайте man exports.

/etc/hosts.allow

Чтобы разрешить доступ по сети к nfs серверу для IP 192.168.0.101, вам надо добавить следующие строчки в /etc/hosts.allow:

nfsd: 192.168.0.101/255.255.255.255
rpcbind: 192.168.0.101/255.255.255.255
mountd: 192.168.0.101/255.255.255.255

Что разрешить доступ всем из подсети 192.168.0.*, необходмио добавить:

nfsd: 192.168.0.0/255.255.255.0
rpcbind: 192.168.0.0/255.255.255.0
mountd: 192.168.0.0/255.255.255.0

Чтобы все машины могли иметь доступ, напишите в файл /etc/hosts.allow следующие строчки:

nfsd: ALL
rpcbind: ALL
mountd:ALL

Подробнее про настройку файла /etc/hosts.allow, смотрите, например, http://www.die.net/doc/linux/man/man5/hosts.allow.5.html

Демоны

Для запуска nfs сервера, вам требуется запустить несколько демонов:

# /etc/rc.d/rpcbind start (или: /etc/rc.d/portmap start)
# /etc/rc.d/nfs-common start (или: /etc/rc.d/nfslock start)
# /etc/rc.d/nfs-server start (или: /etc/rc.d/nfsd start)

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

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

/etc/hosts.allow

Вам необходимо разрешить rpcbind для IP сервреа:

 rpcbind: 192.168.0.100/255.255.255.255

Демоны

Запустите rpcbind и nfslock демоны:

/etc/rc.d/rpcbind start (or: /etc/rc.d/portmap start)
/etc/rc.d/nfs-common start (or: /etc/rc.d/nfslock start)

Заметьте, что демоны должны запускать именно в этом порядке, или только nfs-common, тогда rpcbind будет запущен автоматически как зависимость.

Для автоматического запуска демонов при загрузке системы добавьте их в файл /etc/rc.conf.

Монтирование удалённых директорий

Монтирование удалённых каталогов происходит так же, как и локальных (предположим, что точка монтирование /mnt/home существует):

# mount 192.168.0.1:/home /mnt/home

Отмонтировать можно так же, как и локальный каталог:

# umount /mnt/home

Запись в /etc/fstab

Файловые системы NFS могут быть добавлены в файл /etc/fstab так же, как и локальные, но существует некоторые отличия: тип файловой системы должен быть nfs и значения dump и fsck order (последние две записи в строчке) должны быть равны 0. Итак, вот пример записи в файле /etc/fstab:

# device           mountpoint     fs-type     options      dump fsckorder
...
192.168.0.1:/home    /mnt          nfs          rw          0       0
...

soft или hard монтирование

nfs клиент может обрабатывать сбои сервера в работе. Есть две опции монтирования: hard и soft.

soft:

Если запрос на получение файла не выполнен, NFS клиент сообщит об ошибке процессу, который пытается получить доступ к файлу. Некоторые программы умеют это обрабатывать, большая же часть - нет. Разработчики nfs не рекомендуют использовать эту опцию; это прямой путь к повреждённым данным и потере информации.

hard:

Программа, осуществляющая доступ к файлу повиснет при смерти сервера. Процесс не может быть прерван или убит (только "sure kill"), пока вы не укажете опцию intr. Когда NFS сервер вернётся к работе, программа продолжит работу с того места, где остановилась. Разработчики NFS рекомендуют использование опций hard,intr со всеми монтируемые NFS файловые системы.

Смотрите man mount для подробной информации об опциях монтирования.

Монтирование NFS и networkmanager

Автоматическое монтирование nfs при появлении сети и автоматическое её отмонтирование при её отсутствии. Для этого создадим файл /etc/NetworkManager/dispatcher.d/01ifupdown, в него запишем:

#!/bin/bash
      if [ `nm-tool|grep State|cut -f2 -d' '` == "connected" ]; then
              mount -t nfs %server%:%server_dir% %local_dir%
      else
              umount %local_dir%
      fi

Где %server% - ip адрес сервера nfs, %server_dir% - директория на сервере, которую требуется подмонтировать и %local_dir% - директория куда оно будет монтироваться.