NFS сервер на Ubuntu 9.10
28.11.2009, рубрики: how-to | 3 комментариев »По давней и не очень хорошей привычке (еще с тех пор когда в доме водились компьютеры с Windows системами) я использую для организации домашней сети SAMBA. Причины просты, хорошо знакомы большинство настроек, хорошая совместимость с Windows системами. Вот и на днях стала задача, быстро и без проблем расшарить несколько папок с головного компьютера. По привычки и примутил SAMBA. Но так уж получилось, что разработчики Ubuntu сейчас немного заняты и им некогда обращать внимание на такие мелочи как говёно работающая SAMBA между Linux машинами с предустановленной Ubuntu 9.10 на обоих. И если на 9.04 нареканий не было то на 9.10 мне удалось завести херова работающую Самбу после часа мучений. Я считаю это полный непорядок. Это при том, что я даже не брезговал настраивать Самбу с помощью GUI утилиты system-config-samba, которая до селе прекрасно справлялось с поставленной перед ней задачей. Короче я взбесился, накатал длиннющий bug-report разработчикам и подумал о других путях организации домашней сети. Что из этого вышло читаем ниже.
NFS – Network File System
Понятное дело, на что, стразу упал взгляд. Это NFS – Network File System, хреновена из начально придуманная Sun Microsystems. Далее как по учебнику, первым делом я полез на Википедию, почитать что за зверь такой, проникнуться историей создания и т.д. Сказать что в русской Википедии статья о NFS херовая, значит ничего не сказать. Из трёх строчек понятное дело тяжело что либо понять.
Здесь стоит сделать отступление. Я никогда не занимался настройкой сети Linux — Linux. Это всегда были сети типа Windows — Linux ну или наоборот. По этому для меня NFS штука новая и от того еще более интересная.
Далее я побрел на официальный сайт и по дороге заглянул на сайт NFS for FreeBSD. Убедившись что сайт на английском языке, а мне на тот момент было в падло изучать 100 страничный мануал, нужно было просто папку расшарить. И я начал искать что же пишут об NFS в русскоязычном интернете. По началу я обрадовался огромному количеству how to однако после посещения уже третьего сайта стало понятно весь русский инет забит скопированным было how to который даже у школьника вызовет истерический хохот. Это было уже не смешно, все, абсолютно все блоги забиты одним и тем же copy\past гавном написанным тучу лет тому назад.
Сложилось такое впечатление, что английский это язык Атлантиды и на нем говорят гумоноиды, неужели так трудно написать хоть одно человеческое how to, подробное и работающее. Пришлось возвратиться к офф. сайту и начать штудировать how to.
Установка NFS
Лезем в репозитарий Убунты и смотрим чего там есть полезного:
- $ aptitude search nfs
- v nfs-client -
- i nfs-common - NFS support files common to client and server
- i nfs-kernel-server - support for NFS kernel server
- v nfs-server -
Это именно то, что нужно, ставим (и на клиенте и на сервере):
- $ sudo aptitude isntall nfs-server nfs-kernel-server nfs-common nfs-client
Настройка сервера
Создаем папку которую будем расшаривать (если еще нет)
- user@server:$ mkdir share
Правим файл /etc/exports:
- user@server$ sudo nano /etc/exports
- /home/user/share/ 192.168.1.102(rw,sync,no_subtree_check)
Опции доступа:
/home/user/share/ – расшариваемая папка на сервере
192.168.1.102 – IP адрес компьютера которому будет предоставлен доступ к шаре.
Открыть доступ всем машинам в сети:
- /home/user/share/ *(rw,sync,no_subtree_check)
Открыть доступ нескольким машинам в сети:
- /home/user/share/ 192.168.1.101(rw,sync,no_subtree_check) 192.168.1.102(ro,sync,no_subtree_check)
Обратите внимание, что машине 192.168.1.101 достались права на чтение\запись, а машине 192.168.1.102 только на чтение.
Можно пойти еще дальше и дать доступ к шаре целой сети:
- /home/user/share/ 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)
rw – дать права на запись\чтение
ro – дать права только на чтение
no_root_squash – рут на клиентской машине имеет тот уровень доступа к файлам в расшариной паке, что и рут на сервере. По умолчанию опция отключена, так как представляет собой реальную угрозу безопасности.
no_subtree_check – если монтируется только часть тома, то сервер будет выполнять проверку принадлежности файла запрошенного клиентом, именно к той части с тома которая примонтирована. Это замедляет передачу данных, по этому зачастую данная опция включена в список параметров, как у меня выше. Т.е. эта опция блокируют проверку, за ее не надобностью.
sync – синхронное поведение файловой системы по отношению к клиенту и серверу. (грубо говоря в режиме реального времени, закинул файл в шару на серваке и вы тут же его видите на клиенте)
async – асинхронное поведение файловой системы по отношению к клиенту и серверу.
Список хостов, доступ которым разрешен к системе, обратный файл это /etc/hosts.deny
Правим файл /etc/hosts.allow
- user@server$ sudo nano /etc/hosts.allow
- portmap: 192.168.1.102/24
- lockd: 192.168.1.102/24
- rquotad: 192.168.1.102/24
- mountd: 192.168.1.102/24
- statd: 192.168.1.102/24
Рестартуем сервер:
- user@server$ sudo /etc/init.d/nfs-kernel-server restart
Если вы внесли какие либо изменения в файл /etc/exports, нет необходимости рестартовать сервер, достаточно выполнить:
- $ sudo exportfs -avr
и новые настройки вступят в силу.
Настройка клиента
Настройка клиента заключается по сути в том, что бы создать точку монтирования удаленной файловой системы и правильно выполнить монтирование.
Создаем точку монтирования:
- user@client$ mkdir /home/user/data/
Монтируем удаленную файловую систему:
- user@client$ sudo mount.nfs 192.168.1.100:/home/booch/share /home/mothes/data/ -rw
Опции монтирования:
Тут все понятно, 192.168.1.100 – адрес сервера.
/home/booch/share – папка на сервере которую надо прикрутить.
/home/mothes/data/ – папка куда монтируем на клиенте.
-rw – монтируем файловую систему с правами доступа чтение\запись.
Тут стоит обратить внимание, что даже если на серваке папка открыта с правами rw, вы из соображений безопасности можете прикрутить папку только в режиме чтения.
Готово. УФС подмантировалась успешно, можно работать.
Дополнительные опции
Проверить что NFS запущена можно командой:
- rpcinfo -p
- program vers proto port
- 100000 2 tcp 111 portmapper
- 100000 2 udp 111 portmapper
- 100024 1 udp 41419 status
- 100024 1 tcp 47959 status
- 100021 1 udp 39786 nlockmgr
- 100021 3 udp 39786 nlockmgr
- 100021 4 udp 39786 nlockmgr
- 100021 1 tcp 39968 nlockmgr
- 100021 3 tcp 39968 nlockmgr
- 100021 4 tcp 39968 nlockmgr
- 100003 2 udp 2049 nfs
- 100003 3 udp 2049 nfs
- 100003 4 udp 2049 nfs
- 100003 2 tcp 2049 nfs
- 100003 3 tcp 2049 nfs
- 100003 4 tcp 2049 nfs
- 100005 1 udp 59137 mountd
- 100005 1 tcp 53161 mountd
- 100005 2 udp 59137 mountd
- 100005 2 tcp 53161 mountd
- 100005 3 udp 59137 mountd
- 100005 3 tcp 53161 mountd
Если вам надо, чтобы УФС монтировалась автоматически после загрузки системы правим /etc/fstab
Сделать это можно вот так:
- # device mountpoint fs-type options dump fsckorder
- ...
- /home/user/ /mnt nfs rw 0 0
- ...
Или вот так:
- # device mountpoint fs-type options dump fsckord
- ...
- /home/user/ /mnt/home nfs rw,hard,intr 0 0
- ...
Второй вариант использует опцию hard, с ней надо быть поосторожней, так как это «жесткое» монтирование. Отвалиться сервак = зависнет клиент.
Проверить качество соединения:
- tracepath 192.168.1.100
- 1: alexlinux.local (192.168.1.100) 0.192ms pmtu 16436
- 1: alexlinux.local (192.168.1.100) 0.084ms reached
- 1: alexlinux.local (192.168.1.100) 0.080ms reached
- Resume: pmtu 16436 hops 1 back 64
Где 192.168.1.100 IP сервера или клиента.
Просмотреть загруженность сети (полезно если много шар и большой файлообмен)
- sudo netstat -s
Проброс по SSH:
Первое нужно добавить localhost:
- user@server:$ sudo nano /etc/exports
- /home 127.0.0.1(rw)
Далее выполняем на клиентской машине проброс:
- user@client:$ ssh root@192.168.0.42 -L 250:localhost:2049 -f sleep 60m
- user@client:$ ssh root@192.168.0.42 -L 251:localhost:32767 -f sleep 60m
192.168.0.42 – IP адрес сервера.
250 – порт на клиенте
2049 – порт на сервера
Вы можете менять порты, поставив свои.
-f sleep 60m – хитрючая команда, которая позволяет присоединиться к серверу в режиму background, т.е. не открывать там Shell и не сообщать о своем присутствии. Т.е. Shell у нас будет открыт со стороны клиента. Т.е. все команды будут выполняться в режиме background на сервере. Соединение будет удерживаться в течении 60 минут.
Монтируем УФС на клиенте:
- user@client:$ sudo nano /etc/fstab
- localhost:/home /mnt/home nfs rw,hard,intr,port=250,mountport=251 0 0
Прочесть больше о пробросе NFS через SSH можно тут


а как насчет монтирования по имени тачки, а не по ip? и какая скорость передачи данных по NFS-протоколу?
прописываете тачку в DNS и монтируете по имени, а не по IP/
тут еще можно посмотреть по поводу статьи
http://www.itexp.org/nfs/