Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Linux-инструменты для Windows-программистов
Назад Инструменты удалённой работы Вперед

nfs

Протокол и подсистема nfs (Network File System), и сопутствующий ему протокол nis (Network Information System) очень удобны, но в сети, состоящей только из Linux/UNIX хостов (для других систем есть реализации, но они не получили распространения). Протокол позволяет монтировать поддеревья файловой системы удалённого хоста в дерево локальной файловой системы, и далее работать с ними как со своими собственными. Сама подсистема nfs достаточно громоздкая:

$ uname -r 

2.6.35.11-83.fc14.i686

$ lsmod | grep nfs 
nfsd                 201440  13 
lockd                 56070  1 nfsd 
nfs_acl                1951  1 nfsd 
auth_rpcgss           28808  1 nfsd 
exportfs               2923  1 nfsd 
sunrpc               165546  17 nfsd,lockd,nfs_acl,auth_rpcgss 

$ ps -Af | grep nfs 
root     1421     2  0 Mar22 ?        00:00:00 [nfsd4] 
root     1422     2  0 Mar22 ?        00:00:00 [nfsd4_callbacks] 
root     1423     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1424     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1425     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1426     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1427     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1428     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1429     2  0 Mar22 ?        00:00:00 [nfsd] 
root     1430     2  0 Mar22 ?        00:00:00 [nfsd] 

Видно, что подсистема nfs продолжает активно претерпевать изменения, и в последних ядрах реализована на потоках ядра Linux ([...] в выводе утилиты ps). Сетевая система требует проведения кропотливой настройки, но удобства её использования того стоят. В общих чертах это выглядит так:

1. Проверяем, что наше ядро вообще скомпилировано с поддержкой nfs (но обратное бывает редко) :

$ cat /proc/filesystems | grep nfs 

nodev	nfsd 

И убеждаемся в том, что у нас запущены службы протокола RPC и сам демон nfsd (как показано было выше):

# ps -A | grep rpc 

 1278 ?       00:00:00 rpcbind 
 1333 ?       00:00:00 rpc.statd
 1369 ?       00:00:00 rpciod/0 
 1370 ?       00:00:00 rpciod/1 
 1379 ?       00:00:00 rpc.idmapd 
 1738 ?       00:00:00 rpc.rquotad
 1753 ?       00:00:00 rpc.mountd 

Кроме того, убеждаемся что порты сетевой системы не запрещены файерволом, часто для управления этими настройками используются GUI скрипты вида: /usr/bin/system-config-firewall. Проверки этого пункта могут и не проверяться изначально, но если экспортирование каталогов не удастся, то к ним придётся вернуться. Проверить, какие службы (из которых нас в первую очередь интересует nfs) RPC запущены на хосте (в данном случае хост home):

$ rpcinfo -p home 

   program vers proto   port  service 
    100000   2   tcp    111  portmapper 
    100000   2   udp    111  portmapper 
    100024   1   udp   1008  status 
    100024   1   tcp   1011  status 
    100011   1   udp    740  rquotad 
    100011   2   udp    740  rquotad 
    100011   1   tcp    743  rquotad 
    100011   2   tcp    743  rquotad 
    100003   2   udp   2049  nfs 
    100003   3   udp   2049  nfs 
    100003   4   udp   2049  nfs 
    100021   1   udp  32808  nlockmgr 
    100021   3   udp  32808  nlockmgr 
    100021   4   udp  32808  nlockmgr 
    100003   2   tcp   2049  nfs 
    100003   3   tcp   2049  nfs 
    100003   4   tcp   2049  nfs 
    100021   1   tcp  52742  nlockmgr 
    100021   3   tcp  52742  nlockmgr 
    100021   4   tcp  52742  nlockmgr 
    100005   1   udp    767  mountd 
    100005   1   tcp    770  mountd 
    100005   2   udp    767  mountd 
    100005   2   tcp    770  mountd 
    100005   3   udp    767  mountd 
    100005   3   tcp    770  mountd 

2. Логика сетевой системы nfs состоит в том, что каждый разделяемый данным хостом каталог должен быть экспортирован в списках экспорта, описан в файле /etc/exports. Для каждого экспортируемого каталога заводится одна строка запись, запись достаточно сложная, описывающая список (разделяемый пробелами) хостов и прав доступа, имеющих место при доступе из этих хостов. Это могут быть групповые адреса, определяющие условия доступа из целых подсетей. Доступ с хостов, не представленных в списках доступа — не разрешён. Пример такой строки списков доступа относительно одного из каталогов:

/home/olej *(rw,insecure,sync,no_root_squash) 192.168.0.0/16(rw,insecure,sync,no_root_squash)

Заполнять (и проверить корректность) файла экспорта позволяют GUI скрипты вида, подобного: /usr/bin/system-config-nfs, но такие скрипты конфигурации могут конфликтовать с ручным заполнением /etc/exports, что нужно тщательно выверить.

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

# showmount -e home 

Export list for home: 
/home/olej(everyone) 

# showmount -e notebook 
Export list for notebook: 
/home/olej (everyone) 

3. Далее, мы можем по общим правилам выполнения команды mount (монтирование, выполняемое от имени root, к существующим заранее точкам монтирования, с указанием типа монтируемой файловой системы nfs, ...) выполнять монтирование в свою файловую систему сколь угодно многих каталогов, экспортируемых с различных хостов сети:

# mount -t nfs notebook:/home/olej /mnt/home1
$ du -hs /mnt/home1 
16G	/mnt/home1 

Особенностью для системы есть то, что тип монтируемой системы (-t nfs) можно опускать в виду специфического синтаксиса указания монтируемого ресурса (notebook:/home/olej), утилита mount сама распознает этот случай, поэтому предыдущее монтирование можно записать так, что полностью эквивалентно:

# mount notebook:/home/olej /mnt/home1

4. Смонтированных в разные точки монтирования каталогов nfs может быть достаточно много, чтобы диагностировать что и куда смонтировано, используем:

# mount -t nfs 

home:/home/olej on /mnt/home type nfs (rw,addr=192.168.1.7) 
notebook:/home/olej on /mnt/home1 type nfs (rw,addr=192.168.1.9) 

Такого же сорта дополнительную информацию мы можем получить и утилитой df:

# df -t nfs  

Файловая система     1K-блоков      Исп  Доступно  Исп% смонтирована на 
home:/home/olej        7640640   6705824    540416  93% /mnt/home 
notebook:/home/olej   43135744  32713472   8231168  80% /mnt/home1 

5. Так же, как мы монтируем каталог, обратным образом, мы его можем и отмонтировать когда он не нужен:

# umount /mnt/home1 

$ du -hs /mnt/home1 
4,0K	/mnt/home1

6. Наконец, сетевые каталоги, которые мы часто используем, мы можем сделать постоянно смонтированными в своей файловой системе. Для этого в /etc/fstab пропишем строку (по строке для каждого из монтируемых каталогов):

# device             directory       type    options     dump    fsckorder
notebook:/home/olej  /mnt/home1      nfs     defaults    0       0

В дополнение к монтированию при загрузке, при создании такой записи монтирование и размонтирование каталога записывается командой ещё проще:

# mount notebook:/home/olej

Записи списков экспорта (/etc/exports) и параметры команд монтирования допускают большое множество опций и параметров, переопределяющих параметры сетевого соединения (таких, например, как реакция на временную потерю связи). Все эти параметры полно описаны в справочной системе и литературе.

Подсистема nfs может представить активный интерес в ходе разработок в области встраиваемого и мобильного Linux, переносимости системы на новые аппаратные платформы: в таких работах nfs является одним их протоколов, часто используемым для объединения целевой и инструментальной машин.


Предыдущий раздел: Оглавление Следующий раздел:
ftp / tftp   Удалённые сессии в mc