NFS сервер на Ubuntu

NFS сервер на Ubuntu

Непрочитанное сообщение sergkax » 17 дек 2013, 01:23

По давней и не очень хорошей привычке (еще с тех пор когда в доме водились компьютеры с Windows системами) я использую для организации домашней сети SAMBA. Причины просты, хорошо знакомы большинство настроек, хорошая совместимость с Windows системами. Вот и на днях стала задача, быстро и без проблем расшарить несколько папок с головного компьютера. По привычки и примутил SAMBA. Но так уж получилось, что разработчики Ubuntu сейчас немного заняты и им некогда обращать внимание на такие мелочи как говёно работающая SAMBA между Linux машинами с предустановленной Ubuntu 9.10 на обоих. И если на 9.04 нареканий не было то на 9.10 мне удалось завести херова работающую Самбу после часа мучений. Я считаю это полный непорядок. Это при том, что я даже не брезговал настраивать Самбу с помощью GUI утилиты system-config-samba, которая до селе прекрасно справлялось с поставленной перед ней задачей. Короче я взбесился, накатал длиннющий bug-report разработчикам и подумал о других путях организации домашней сети. Что из этого вышло читаем ниже.

Понятное дело, на что, стразу упал взгляд. Это 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


Если вам надо, чтобы УФС монтировалась автоматически после загрузки системы правим /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
В начале было слово, и слово было 2 байта, а больше ничего не было.
Если что то делаешь то не останавливайся и не слушай ни кого...
большинство людей просто завидует и не хотят чтоб у тебя получилось ибо у них не получается...
Следуй своим идеям...
Если не получается то не бросай а лучше подумай почему...
Аватара пользователя
sergkax
 
Сообщения: 313
Зарегистрирован: 10 май 2012, 05:17

Вернуться в linux

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


cron