Установка и настройка 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 - запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.
О других опция можно почитать здесь.
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 коммент.:
А в Ubuntu hosts.allow настраивать не надо?!
А в Ubuntu надо запускать только один демон? Или просто тема запуска portmap не раскрыта? :)
В простейшем случае (как описано здесь) hosts.allow настраивать не обязательно. Будет работать и без этого. В случае же настроек с большей защитой, все немного усложняется. Да и вообще, тогда нужно рассматривать и тунелирование NFS через SSH...
В Ubuntu все просто. Запускаешь один демон, а он уже запустит все что надо.
пользуюсь nfs-kernel-server еще с potato,
после обновления до Etch nfs-kernel-server при старте стал писать предупреждения о том что не указаны опции subtree_check или no_subtree_check - рекомендуется указать первую из них - она активирует дополнительные проверки наличия файла по переданному file handle.
и еще, при монтировании nfs-раздела лучше указать soft-монтирование (опция 'soft' вместо 'hard') - при этом linux не будет так сильно ругаться если nfs-сервер пропадет (например при проблемах с сетью) и позволит отмонтировать его.
Спасибо. Следуя Вашему совету изменил на 'soft'. Нужно будет лучше разобраться со всеми этими опциями.
Как всё в 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)
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.*
Но я не захотел добавлять эту информацию в статью. Если честно, то в моем случае (когда сеть за семью замками с закрытым доступом извне почти ко всему) я думаю это даже не нужно.
У меня следующий вопрос: возможно ли каким-нибудь образом примонтировать через NFS директории, у которых хозяин root?
Честно сказать - не знаю. Никогда даже не думал об этом. А зачем?
Дело в том, что мой десктоп приходиться делить с Windows и моим братом младшим, который упорно не хочет менять среду обитания. В мои до "линуксовые" времена был выделен больший раздел в NTFS для хранения всего, начиная от музыки и заканчивая видео и фото.
Недавно приобрел laptop и захотелось иметь доступ к папкам с музыкой. Но с помощью NFS они не монтируются, пишет что не удалось смонтировать по следующей причине: failed, reason given by server: Permission denied.
Потыкав настройки на десктопе и на ноутбуке пришел к выводу, что это из-за того, что хозяином раздела является root.
UPD: домашнюю папку рута спокойно монтирует :/
Ага. Ну так бы сразу и сказали, раздел то NTFS, вот в нем то и проблема. С чего вы взяли, что виндовс раздел можно примонтировать по NFS? По моему нельзя. Советую воспользоваться Samba.
P.S. рут разделы оказывается можно монтировать, люди монтируют всю корневую систему /.
Разделы NTFS монитруются в режим read-only. И только с теми драйверами, которые идут по умолчанию.
До этого, я монтировал раздел, который на сервере монтировался с помощью ntfs-3g для записи на него.
До этого, я монтировал раздел, который на сервере монтировался с помощью ntfs-3g для записи на него.
Монтировали через NFS или на локальном компьютере?
на десктопе (сервере так сказать) раздел ntfs монтируется с помощью ntfs-3g, а потом через NFS я монтирую его на ноутбуке и получаю ошибку, о том, что Permission denied.
Если же использовать ntfs драйвер, который идет в системе изначально, то все хорошо монтируется на ноутбуке в режиме read-only
Если я Вас правильно понял, то в режиме read only вы всетаки примонтировали ntfs раздел через nfs, а если с драйвером ntfs-3g - выдает ошибку. Вообще странно. Я специально поискал в инете и нашел только то что ntfs разделы по nfs монтироваться вообще не могут. Так что я думаю режим read only это уже хорошо. А как сделать так, чтобы еще и писать можно было, я не знаю :(. Если решите эту задачу, напишите пожалуйста, интересно бы было посмотреть.
Почитав readme к ntfs-3g я так же узнал, что можно монитровать разделы ntfs с помощью nfs на удаленном компе, но для этого нужно пересобирать ядро, что мне очень лениво делать :)
а по поводу ntfs в режиме ro я прочитал тут
Спасибо. Теперь немного разобрался. Нужно еще будет почитать readme к ntfs-3g.
а у меня вот постоянно это вылезает при попытке загрузить станцию
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 на сервере?
Отправить комментарий