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

Лезем в репозитарий Убунты и смотрим чего там есть полезного:

  1. $ aptitude search nfs
  2. v   nfs-client                  -
  3. i   nfs-common              - NFS support files common to client and server
  4. i   nfs-kernel-server        - support for NFS kernel server
  5. v   nfs-server                 -

Это именно то, что нужно, ставим (и на клиенте и на сервере):

  1. $ sudo aptitude isntall  nfs-server nfs-kernel-server nfs-common nfs-client

Настройка сервера

Создаем папку которую будем расшаривать (если еще нет)

  1. user@server:$ mkdir share

Правим файл /etc/exports:

  1. user@server$ sudo nano /etc/exports
  2. /home/user/share/ 192.168.1.102(rw,sync,no_subtree_check)

Опции доступа:
/home/user/share/ – расшариваемая папка на сервере
192.168.1.102 – IP адрес компьютера которому будет предоставлен доступ к шаре.

Открыть доступ всем машинам в сети:

  1. /home/user/share/ *(rw,sync,no_subtree_check)

Открыть доступ нескольким машинам в сети:

  1. /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 только на чтение.

Можно пойти еще дальше и дать доступ к шаре целой сети:

  1. /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

  1. user@server$ sudo nano /etc/hosts.allow
  2. portmap: 192.168.1.102/24
  3. lockd:   192.168.1.102/24
  4. rquotad: 192.168.1.102/24
  5. mountd:  192.168.1.102/24
  6. statd:   192.168.1.102/24

Рестартуем сервер:

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

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

  1. $ sudo exportfs -avr

и новые настройки вступят в силу.

Настройка клиента

Настройка клиента заключается по сути в том, что бы создать точку монтирования удаленной файловой системы и правильно выполнить монтирование.

Создаем точку монтирования:

  1. user@client$ mkdir /home/user/data/

Монтируем удаленную файловую систему:

  1. 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 запущена можно командой:

  1. rpcinfo -p
  2.    program vers proto   port
  3.     100000    2   tcp    111  portmapper
  4.     100000    2   udp    111  portmapper
  5.     100024    1   udp  41419  status
  6.     100024    1   tcp  47959  status
  7.     100021    1   udp  39786  nlockmgr
  8.     100021    3   udp  39786  nlockmgr
  9.     100021    4   udp  39786  nlockmgr
  10.     100021    1   tcp  39968  nlockmgr
  11.     100021    3   tcp  39968  nlockmgr
  12.     100021    4   tcp  39968  nlockmgr
  13.     100003    2   udp   2049  nfs
  14.     100003    3   udp   2049  nfs
  15.     100003    4   udp   2049  nfs
  16.     100003    2   tcp   2049  nfs
  17.     100003    3   tcp   2049  nfs
  18.     100003    4   tcp   2049  nfs
  19.     100005    1   udp  59137  mountd
  20.     100005    1   tcp  53161  mountd
  21.     100005    2   udp  59137  mountd
  22.     100005    2   tcp  53161  mountd
  23.     100005    3   udp  59137  mountd
  24.     100005    3   tcp  53161  mountd

Если вам надо, чтобы УФС монтировалась автоматически после загрузки системы правим /etc/fstab
Сделать это можно вот так:

  1. # device       mountpoint     fs-type     options      dump fsckorder
  2. ...
  3. /home/user/   /mnt                nfs          rw            0           0
  4. ...

Или вот так:

  1. # device             mountpoint  fs-type    options    dump fsckord
  2. ...
  3. /home/user/        /mnt/home   nfs      rw,hard,intr      0     0
  4. ...

Второй вариант использует опцию hard, с ней надо быть поосторожней, так как это «жесткое» монтирование. Отвалиться сервак = зависнет клиент.

Проверить качество соединения:

  1. tracepath 192.168.1.100
  2.  1:  alexlinux.local (192.168.1.100)                        0.192ms pmtu 16436
  3.  1:  alexlinux.local (192.168.1.100)                        0.084ms reached
  4.  1:  alexlinux.local (192.168.1.100)                        0.080ms reached
  5.      Resume: pmtu 16436 hops 1 back 64

Где 192.168.1.100 IP сервера или клиента.

Просмотреть загруженность сети (полезно если много шар и большой файлообмен)

  1. sudo netstat -s

Проброс по SSH:
Первое нужно добавить localhost:

  1. user@server:$ sudo nano /etc/exports
  2. /home   127.0.0.1(rw)

Далее выполняем на клиентской машине проброс:

  1. user@client:$ ssh root@192.168.0.42 -L 250:localhost:2049  -f sleep 60m
  2. 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 минут.

Монтируем УФС на клиенте:

  1. user@client:$ sudo nano /etc/fstab
  2. localhost:/home  /mnt/home  nfs  rw,hard,intr,port=250,mountport=251  0 0

Прочесть больше о пробросе NFS через SSH можно тут


3 комментариев на запись “NFS сервер на Ubuntu 9.10”

  1. 1 Kehaт сказала в 6:50, 10.12.2009:

    а как насчет монтирования по имени тачки, а не по ip? и какая скорость передачи данных по NFS-протоколу?

  2. 2 Zend сказала в 13:17, 10.06.2010:

    прописываете тачку в DNS и монтируете по имени, а не по IP/

  3. 3 Dmitry сказала в 22:10, 20.10.2011:

    тут еще можно посмотреть по поводу статьи
    http://www.itexp.org/nfs/


Оставить комментарий

  • Доступные теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">

  • *