8 Март 2007 г.

Установка и настройка NFS сервера и NFS клиента в [K]Ubuntu.

Network File System (NFS) — это сетевая файловая система, позволяющая пользователям обращаться к файлам и каталогам, расположенным на удалённых компьютерах, как если бы эти файлы и каталоги были локальными. Главным преимуществом такой системы является то, что отдельно взятые рабочие станции могут использовать меньше собственного дискового пространства, так как совместно используемые данные хранятся на отдельной машине и доступны для других машин в сети. NFS - это клиент-серверное приложение. Т.е. в системе пользователя должен быть установлен NFS-клиент, а на компьютерах, которые предоставляют свое дисковое пространство - NFS-сервер. Здесь я хочу показать, как просто установить и настроить эти программы в [K]Ubuntu Linux. (Вся информация рассчитана для новичка в Linux. Если вы имели опыт установки NFS в Linux - ничего нового, вероятно, вы здесь не найдете. Целью статьи является, показать как легко это может быть реализовано.)

Установка и настройка NFS-сервера.

Устанавливаем NFS-сервер:

$sudo apt-get install nfs-kernel-server nfs-common portmap

Настраиваем, какие именно директории мы хотим открыть для совместного пользования и кому. Все это делается в файле /etc/exports:

$sudo vi /etc/exports

В приведенном ниже примере я выделил директорию /data (директория с данными на сервере) в совместное пользование всем компьютерам с IP - 192.168.1.1 - 192.168.1.255 с правами чтения и записи:

/data 192.168.1.1/24(rw,no_root_squash,async)

Или еще пример:

/home/serhiy/ 192.168.1.34(ro,async)

домашняя директория пользователя serhiy стала доступной в режиме только чтение для компьютера с IP 192.168.1.34. Все остальные компьютеры сети к этому разделу доступа не имеют.

Опции:
ro - права только на чтение. Можно и не указывать, так как она установлена по умолчанию.
rw - дает клиентам право на запись.
no_root_squash - по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать.
noaccess - запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.
О других опция можно почитать здесь.

Теперь нужно перезапустить nfs-kernel-server:

$sudo /etc/init.d/nfs-kernel-server restart

Если после этого вы захотите поменять что-нибудь в файле /etc/exports, то для того, чтобы изменения вступили в силу, достаточно запустить следующую команду:

$sudo exportfs -a

Все. NFS-сервер установлен и настроен. Можно переходить к настройке NFS клиента.

Установка и настройка NFS-клиента.

Установка:

$sudo apt-get install portmap nfs-common

Монтирование:

Создаем точку монтирования. Допустим, это будет папка в вашей домашней директории с названием data:

$cd ~
$mkdir data

Монтировать можно двумя способами - каждый раз вручную или прописав опции монтирования в файл /etc/fstab. Мне больше нравится второй способ:

$sudo vi /etc/fstab

и в конце дописываем следующую строку:

192.168.1.1:/data ~/data nfs rw,hard,intr 0 0

Вместо 192.168.1.1:/data впишите IP или имя сервера и путь к директории совместного пользования.
Опции монтирования можно изменить.

Записав и сохранив изменения, можно монтировать:

$sudo mount ~/data

Если все прошло успешно, то набрав в терминале

$cd ~/data
$ls

вы увидете содержимое папки /data, находящейся на NFS-сервере. Можете проверить скорость работы и запустить, например, фильм с этого раздела.

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

19 коммент.:

Igor комментирует...

А в Ubuntu hosts.allow настраивать не надо?!
А в Ubuntu надо запускать только один демон? Или просто тема запуска portmap не раскрыта? :)

serhiy cherevko комментирует...

В простейшем случае (как описано здесь) hosts.allow настраивать не обязательно. Будет работать и без этого. В случае же настроек с большей защитой, все немного усложняется. Да и вообще, тогда нужно рассматривать и тунелирование NFS через SSH...
В Ubuntu все просто. Запускаешь один демон, а он уже запустит все что надо.

shadone комментирует...

пользуюсь nfs-kernel-server еще с potato,
после обновления до Etch nfs-kernel-server при старте стал писать предупреждения о том что не указаны опции subtree_check или no_subtree_check - рекомендуется указать первую из них - она активирует дополнительные проверки наличия файла по переданному file handle.

и еще, при монтировании nfs-раздела лучше указать soft-монтирование (опция 'soft' вместо 'hard') - при этом linux не будет так сильно ругаться если nfs-сервер пропадет (например при проблемах с сетью) и позволит отмонтировать его.

serhiy cherevko комментирует...

Спасибо. Следуя Вашему совету изменил на 'soft'. Нужно будет лучше разобраться со всеми этими опциями.

Igor комментирует...

Как всё в Ubuntu странно... У меня поскольку в /etc/hosts.deny стоит ALL:ALL, то в allow надо всё-таки отметить IP клиента...
А вот разработчики NFS советуют как раз hard mount... И опцию intr к ней.
Вот оригинальный howto
http://nfs.sourceforge.net/nfs-howto/
А вчера как раз я писал статью в ArchWiki:
http://wiki.archlinux.org/index.php/Nfs_(Russian)

serhiy cherevko комментирует...

ALL:ALL стоял по умолчанию? У меня по умолчанию все закомментировано. Поэтому, думаю ничего прописывать не нужно.

Вообще у меня на NFS сервере всетаки файлы не пустые. Я туда добавил в
hosts.deny

portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
nfs:ALL

hosts.allow:

portmap: 10.52.11.*
lockd: 10.52.11.*
mountd: 10.52.11.*
rquotad: 10.52.11.*
statd: 10.52.11.*

Но я не захотел добавлять эту информацию в статью. Если честно, то в моем случае (когда сеть за семью замками с закрытым доступом извне почти ко всему) я думаю это даже не нужно.

Garfeild комментирует...

У меня следующий вопрос: возможно ли каким-нибудь образом примонтировать через NFS директории, у которых хозяин root?

serhiy cherevko комментирует...

Честно сказать - не знаю. Никогда даже не думал об этом. А зачем?

Garfeild комментирует...
Это сообщение было удалено автором.
Garfeild комментирует...

Дело в том, что мой десктоп приходиться делить с Windows и моим братом младшим, который упорно не хочет менять среду обитания. В мои до "линуксовые" времена был выделен больший раздел в NTFS для хранения всего, начиная от музыки и заканчивая видео и фото.
Недавно приобрел laptop и захотелось иметь доступ к папкам с музыкой. Но с помощью NFS они не монтируются, пишет что не удалось смонтировать по следующей причине: failed, reason given by server: Permission denied.
Потыкав настройки на десктопе и на ноутбуке пришел к выводу, что это из-за того, что хозяином раздела является root.
UPD: домашнюю папку рута спокойно монтирует :/

serhiy cherevko комментирует...

Ага. Ну так бы сразу и сказали, раздел то NTFS, вот в нем то и проблема. С чего вы взяли, что виндовс раздел можно примонтировать по NFS? По моему нельзя. Советую воспользоваться Samba.
P.S. рут разделы оказывается можно монтировать, люди монтируют всю корневую систему /.

Garfeild комментирует...

Разделы NTFS монитруются в режим read-only. И только с теми драйверами, которые идут по умолчанию.
До этого, я монтировал раздел, который на сервере монтировался с помощью ntfs-3g для записи на него.

serhiy cherevko комментирует...

До этого, я монтировал раздел, который на сервере монтировался с помощью ntfs-3g для записи на него.
Монтировали через NFS или на локальном компьютере?

Garfeild комментирует...

на десктопе (сервере так сказать) раздел ntfs монтируется с помощью ntfs-3g, а потом через NFS я монтирую его на ноутбуке и получаю ошибку, о том, что Permission denied.
Если же использовать ntfs драйвер, который идет в системе изначально, то все хорошо монтируется на ноутбуке в режиме read-only

serhiy cherevko комментирует...

Если я Вас правильно понял, то в режиме read only вы всетаки примонтировали ntfs раздел через nfs, а если с драйвером ntfs-3g - выдает ошибку. Вообще странно. Я специально поискал в инете и нашел только то что ntfs разделы по nfs монтироваться вообще не могут. Так что я думаю режим read only это уже хорошо. А как сделать так, чтобы еще и писать можно было, я не знаю :(. Если решите эту задачу, напишите пожалуйста, интересно бы было посмотреть.

Garfeild комментирует...

Почитав readme к ntfs-3g я так же узнал, что можно монитровать разделы ntfs с помощью nfs на удаленном компе, но для этого нужно пересобирать ядро, что мне очень лениво делать :)
а по поводу ntfs в режиме ro я прочитал тут

serhiy cherevko комментирует...

Спасибо. Теперь немного разобрался. Нужно еще будет почитать readme к ntfs-3g.

_NTISSC _ комментирует...

а у меня вот постоянно это вылезает при попытке загрузить станцию

ADDRCONF(NETDEV_UP):eth0: link is not ready

IP-Config: Complete:
device=eth0, addr=192.168.19.90, mask=255.255.255.0, gw=192.168.19.1,
host=www, domain=, nis-domain=aha.com,

bootserver=192.168.19.17, rootserver=192.168.19.17, rootpath=

Looking up port of RPC 100003/2 on 192.168.19.17
portmap:server 192.168.19.17 not responding, time out
Root-NFS:Unable to get nfsd port number from server, using default

Looking up port of RPC 100005/1 on 192.168.19.17
portmap:server 192.168.19.17 not responding, time out
Root-NFS: unable to get mountd port number from server, using default
mount: server 192.168.19.17 not responding , time out
Root-NFS: server returned error -5 while mounting /boot_from_net/net_root
VFS: Unable to mount root fs via NFS, trying floppy


...Не в курсе в чем проблема??

За ранее спасибо=)

Анонимный комментирует...

Спасибо. Очень доступно написано.

Если не трудно, в чём, всё таки смысл опции "no_root_squash". я правильно понял, что если из сети получить доступ к этому каталогу - права будут как у root'a на сервере?