Библиотека сайта rus-linux.net
Цилюрик О.И. 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 |