Монтирование сетевой файловой системы (NFS)

2012-06-24
Задача:  посредством NFS экспортировать директорию /home/share с IP адреса 192.168.0.1(server) и примаунтить ее к хосту с IP 192.168.0.5 (client) в точке /media/files.
Установка ПО

Необходимое ПО для серверной части:
aptitude install nfs-kernel-server nfs-common portmap,
где         
    nfs-kernel-server - NFS демон, прослушиваемый на 2049 UDP и TCP портах,
    portmap - демон, от которого зависит установка NFS,
    nfs-common - общие файлы для клиента и сервера NFS, этот пакет нужно устанавливать на машину, которая будет работать в качестве клиента или сервера NFS. В пакет включены программы: lockd, statd, showmount, nfsstat, gssd и idmapd.
Для проверки корректной установки можно выполнить команду rcpinfo -p 

$ rpcinfo -p | grep "nfs"
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs

Кроме того, система должна поддержитвать NFS. Чтобы проверить это, можно использовать команду

$ cat /proc/filesystems | grep "nfs"
  nodev nfs
  nodev nfs4
  nodev nfsd

Если эти строки отсутствуют, значит необходимо загрузить NFS модуль в ядро системы командой

$ modprobe nfs

После установки NFS демон слушает порты 2049 UDP и TCP, a portmap должен ожидать инструкций на порту 111. Проверить можно командой

$ rpcinfo -p | grep "portmap"
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

Конфигурация серверной части

Теперь, когда все необходимое ПО установлено, можно настроить сервер. Для этого необходимо отредактировать файл /etc/exports, добавив в него строчку вида

/path/to/shared/directory allowable_hosts(options)

где 
    allowable_hosts - хосты, на которые шарится папка(* означает любой хост) 
    options - параметры экспорта. Ниже приведены некоторые из них:
ro(rw) - диск доступен для чтения(и записи).
sync(async) - указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря информации.
root_squash(no_root_squash) - при заданной опции root_squash, запросы от пользователя root отображаются на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid.
auth_nlm (no_auth_nlm) или secure_locks (insecure_locks) - указывает, что сервер должен требовать аутентификацию запросов на блокировку.
secure (insecure) - требует, чтобы запросы NFS поступали с защищенных портов (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
subtree_check (no_subtree_check) - Если экспортируется подкаталог фаловой системы, но не вся файловая система, сервер проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Отключение проверки уменьшает безопасность, но увеличивает скорость передачи данных.
wdelay (no_wdelay) - если предполагается запись нескольких блоков подряд, то физическая запист откладывается, данные собираются в больший блок и затем только происходит запись на диск. Это повышает производительность при отправке больших очередей команд на запись. no_wdelay, наоборот, указывает не откладывать выполнение команды на запись, что увеличивает производительность при записи множества маленьких команд не связанных друг с другом.
root_squash (no_root_squash) - если установлена эта опция, то запросы от пользователя root отображаются на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid.
no_all_squash (all_squash) - если установлена эта опция, то запросы от ВСЕХ пользователей (не только root) отображаются на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid.
anonuid=UID и anongid=GID - явно задает UID/GID для анонимного пользователя.
map_static=/etc/file_maps_users - задает файл, в котором можно задать сопоставление удаленных UID/GID - локальным UID/GID.

В нашем случае в файл /etc/exports следует добавить следующую строчку:

/home/share 192.168.0.5(rw,async,no_root_squash)

Если nfs-сервер запущен, следует его остановить во избежании зависения службы

service nfs-kernel-service stop

Теперь необходимо экспортировать настройки 

$ exportfs -ra

Параметры exportfs:

[клиент:имя-каталога] - добавить или удалить указанную файловую систему для указанного клиента)
-v - выводить больше информации
-r - переэкспортировать все каталоги (синхронизировать /etc/exports и /var/lib/nfs/xtab)
-u - удалить из списка экспортируемых
-a - добавить или удалить все файловые системы
-o - опции через запятую (аналогичен опциям применяемым в /etc/exports; т.о. можно изменять опции уже смонтированных файловых систем)
-i - не использовать /etc/exports при добавлении, только параметры текущей командной строки
-f - сбросить список экспортируемых систем в ядре

И запустить nfs-сервер

service nfs-kernel-server start

Конфигурация клиентской части

$ mount -t nfs 192.168.0.1:/home/share /media/files

Для автоматического маунта необходимо добавить следующуую строку в файл /etc/fstab

192.168.0.1:/home/share    /media/files    nfs    defaults    0    0

Экспорт нескольких дисков(папкок)

NFS должна иметь возможность идентифицировать каждую экспортируемую файловую систему. Обычно для файловой системы используется UUID или номер устройства(device number), если это файловая система на внешнем носителе. В случае с NFS необходимо идентификация файловой системы выполняется с помощью параметра fsid=option. Для NFSv4 существует базовая система, которая обозначается fsid=root или fsid=0. Таким образом, при экспорте нескольких дисков(папок) в файле /etc/exports необходимо указать параметр fsid=0 только для одной(базовой) файловой системы:

/home/share *(rw,async,no_root_squash,fsid=0)
/home/share/video *(rw,async,no_root_squash)
/home/documents *(rw,async,no_root_squash)

Добавить комментарий

Ваше имя

Сообщение

Подтверждение