NFS (Русский) - ArchWiki

# NFS (Русский)

Эта страница нуждается в сопроводителе

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

Информация в этой статье или разделе устарела

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

## Введение

Цель этой статьи - настройка 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% - директория куда оно будет монтироваться.

Categories:

- Русский
- Networking (Русский)