понедельник, 3 сентября 2012 г.

Развертывание NFS шары на небольшой безопасной сетке / Simple NFS filesharing

NFS встроен в любой nix, включая Linux и представляет куда более эффективную сеть, чем виндовская SMB/Samba. По моим замерам в сети 100Mbit на кабеле RJ45 Cat 6, NFS развивал скорость передачи 12МБит/c, когда как Samba только 8(нативный виндовский SMB вообще проваливался с 5Mбит/c). Поэтому, если в сети присуствие корявых окон не предвидится, можно и нужно смело пользоваться NFS. Пока статья не рассматиривает аутентификацию и разграничение доступа, поэтому применяйте данную сеть в хорошо огороженном рутером месте, или вообще вне интернета.

Настройка NFS сервера (шары)

Установить rpcbind, nfs-common и nfs-server.
Не нужно биндовать интерфейс loopback при настройке rpcbind. В старых руководствах встречается portmap, он был заменен rpcbind.

Для открытия доступа нужно править файл /etc/exports, имеющего такой синтаксис:  
[путь] [* или имя клиента или IP адрес/маска](rw/ro,async)
В этом файле, подобно /etc/fstab, указываются все расшареные точки на текущей машине.Маску можно и опустить, тогда будет задан единственный адрес.

После правки exports, нужно вызвать sudo exportfs -a
Пример конфига:
/mnt/data 192.168.10.0/24(rw,async)
будет расшарена папка /mnt/data, доступ получит подсеть 192.168.10.хх с правами чтения/записи. Здесь 24 - маска 255.255.255.0 - первые 24 бита (из 32) будут выставленны в 1, фильтруя доступ.

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

Установить rpcbind, nfs-common.
Затем нужно создать пустую папку, куда будет подсоединена шара
mkdir -p "~/Шара".
В отличии от SMB, NFS полностью использует UNIX подход (с монтированием) и гармонично вливается в среду. Никаких просмотров NFS не нужно и не предвидится.

Затем нужно определится как мы будем подсоединятся - в ручную или автоматически через fstab. Подсоединение через fstab имеет все преймущества и недостатки подсоединения любого другого раздела - если шара не планируется быть постоянно доступной, лучше это делать вручную, то есть или руками, или сделать готовый скрипт.

Подсоединение напрямик

Синтакс подсоединения напрямик:
sudo mount [IP или DNS алиас сервера]:[путь на сервере] [путь на клиенте] [опция,опция..] [-o nfs опции]
Опции:
-w разрешить запись
-r только чтение
-s подсоединить все-равно (игнорировать проверки)
NFS опции:
Эти опции используются клиентом при подсоединении - или на стадии команды mount (через -o) или в fstab. Полный список можно почитать по man nfs. Приведены наиболее значимые.
defaults - задает параметры по умолчанию. Следом за ним, можно их менять.
nfsvers=х - явно задать требуемую версию NFS протокола.
bg / fg - задать тип подсоединения. fg - foreground - прямой, команда mount заберет управление и будет подсоединять, в случае провала вывалится с ошибкой. bg - background - фоновой, команда mount сразу завершится, но будет продолжать пытаться создать соединение на фоне.
retry=х - количество попыток (сверху), перед сдаванием. Очень полезно при монтировании во время пуска, если сервер не доступен. По умолчанию - три.
port=х, proto=tcp/udp - задать порт и протокол.По умолчанию порт 2049. Если задан 0 - осуществляется опрос демона rpcbind на целевом сервере на счет порта.
timeo=x - задать интервал повтора запроса в х десятках секунд. По умолчанию 60, для протокола UDP - 1.1 c увеличением задержки в случае провала. Есть смысл менять только для сетей с долгим откликом.
retrans=х - количество попыток передачи, перед тем, как сервер сдастся. По умолчанию 3.
rsize=х, wsize=х - количество байт, кратное 1024, переданное за раз при запросах для записи и чтения соответсвенно.
Пример:
sudo mount сервер.домен.com:/mnt/data ~/Шара -w 
sudo mount 192.168.1.1:/mnt/data ~/Шара -w 

Графический скрипт, позволяющий подключать шару.
Этот примитивный скрипт позволит подключать сервер просто щелкнув и введя пароль (это требует mount).
Возможно попозже, я создам софт, который позволит легко обращаться с шарами. Сейчас это не в планах, и мне неизвестно ни одно готовое решение (потому что NFS прост?).
  • нужно заменить IP и папку на сервере, на собственную
  • если используется kde, нужно заменить gksudo на kdesu
  • шара подсоединена с стороны клиента к ~/SHARE
  • нужно поместить его в /usr/local/bin и дать ему +x
  • советую сделать к нему ярлык
  • скрипт использует gksudo и sudo таким образом, потому что стандартный вызов gksudo выдает диалог без возможности сохранить пароль на период времени. 
  • следующие после gksudo вызовы sudo будут автоматически приняты, если пароль был введен корректно.

Вот этот скрипт:
#!/bin/bash
#### This is rather primitive script to access NFS share
#### Substitute IP and folder of the server with your own (192; /home/server).
#### Share will be located at ~/SHARE on client side.
#### And finally, it uses GKSUDO. Install it, or replace with what you use.

mkdir -p ~/SHARE
gksudo -p -S -m "Введите пароль для подсоединения диска" | sudo -S -s -- mount 192.168.1.1:/home/files ~/SHARE -w -o defaults,fg,rsize=4096,wsize=4096
sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-common restart

 

Подсоединение через /etc/fstab 

[IP или DNS алиас сервера]:[путь на сервере] [путь на клиенте] nfs [nfs опция1, nfs опция2..]

Пример из /etc/fstab:
server.filetrash.com:/mnt/data_files /files nfs rsize=8192,wsize=8192,timeo=10

Завершающие действия

После подсоединения вручную рекоммендуется перезапустить демонов nfs-kernel-server и rpcbind
sudo /etc/init.d/rpcbind restart 
sudo /etc/init.d/nfs-kernel-server restart

Более серьезный разбор доступен здесь.

Комментариев нет:

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