NFS (Русский)
Contents
Введение
Цель этой статьи - настройка NFS сервера для разделения файлов в сети. Будем придерживаться принципа KISS в статье, поэтому всё должно быть довольно понятно.
Установка
Для установки как сервера так и клиента достаточно установить пакет nfs-utils.
Настоятельно рекомендуется на всех узлах (клиентских и серверных) использовать системы синхронизации времени, такие как ntp. Без точной синхронизации системного времени, в процессе функционирования NFS возможно возникновение дополнительных нежелательных задержек.
Настройка сервера
Можно приступать к правке некоторых конфигурационных файлов и запускать нужные демоны. Вам требуется быть рутом для выполнения следующих команд.
Файлы
/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% - директория куда оно будет монтироваться.