Все о компьтерах

Для раздачи файлов внутри локальной сети можно выделить такие технологии (рассматриваются системы на базе Linux):

  • - протокол сетевого доступа к файловым системам;
  • - сетевой протокол который использует или RSH для передачи файлов между компьютерами;
  • - клиент файловой системы для монтирования дисковых устройств на удаленных системах для взаимодействия с удаленной системой используется SFTP;
  • - пакет программ которые позволяют обращаться к сетевым дискам и принтерам на различных операционных системах по протоколу SMB/CIFS;

В данной заметке речь пойдет про NFS.

NFS (Network File System) полезна когда нужно раздать файлы/директории всем внутри сети. Прозрачность доступа с помощью NFS позволяет клиентам подключить удаленную файловую систему как локальную директорию причем файловые системы могут быть разных типов. Это означает что любое приложение клиента которое может работать с локальным файлом с таким же успехом может работать и с файлом подключенным по NFS без каких либо модификаций самой программы.

К преимуществам NFS можно отнести:

  • равномерная загрузка сети;
  • уменьшение нагрузки на процессор;
  • отображение совместно используемых ресурсов как обычных директорий в системе;

На данный момент доступна NFS v4.1 в которой ввели новую возможность pNFS позволяющей распараллелить реализацию общего доступа к файлам. Также есть расширение для NFS 2 и 3 - WebNFS которое позволяют легче интегрироваться в веб-браузеры и дает возможность работать через брандмауэр.

NFS базируется на .

Схема работы NFS протокола.

Установка и настройка NFS-сервер под Linux

Проверим поддерживает ли система NFS

cat /proc/filesystems | grep nfs

Под Arch Linux сервер и клиент находиться в одном пакете

yaourt -S nfs-utils 

Для установки сервера (nfs-kernel-server) и клиента (nfs-common) под Ubuntu необходимы пакеты

sudo apt-get install nfs-kernel-server nfs-common portmap

Дальше в заметке для сервера будет использоваться IP 192.168.1.100. Для того что бы за сервером всегда был закреплен один и тот же IP необходимо в DHCP-сервере (чаще всего роутер) указать раздачу конкретного IP конкретному MAC-адресу. Или поднять свой локальный DNS-сервер. Например или .

MAC-адрес можно узнать с помощью ifconfig (поле ether в Arch Linux).

NFSv4 предполагает что есть корневая директория внутри которой уже расположены файлы для раздачи. Например /srv/nfs - корень /srv/nfs/audio - директория для раздачи музыки. Если не следовать этому новому указанию в версии 4 то можно получить ошибку при подключении клиентом:

mount.nfs: access denied by server while mounting 192.168.1.100:/home/proft/torrents

Если все же хочется использовать на сервере подход без корневой-директории для NFS то при монтировании клиентом надо явно указать версию 3

# для команды mountmount -o "vers=3" 192.168.1.100:/home/proft/torrents /home/proft/nfs/torrents# для fstab192.168.1.100:/home/proft/torrents /home/proft/nfs/torrents nfs softnfsvers=3 0 0

Я буду использовать NFSv4 с root-директорией в /srv/nfs/ и монтированием вложенных директорий с помощью mount --bind.

Предположим что мы хотим

  • раздавать директорию ~/torrents с rw доступом для всех внутри локальной сети;
  • раздавать директорию ~/photos с ro доступом для хоста с IP 192.168.1.101;

Для начала создадим корневую директорию и необходимые вложенные.

sudo mkdir -p /srv/nfs/{torrentsphotos}

Примонтируем существующие директории torrents photos в /srv/nfs.

# sudo vim /etc/fstab/home/proft/torrents /srv/nfs/torrents none bind 0 0/home/proft/photos /srv/nfs/photos none bind 0 0

Отредактируем /etc/exports в котором описываются все директории для совместного доступа

# sudo vim /etc/exports# формат файла: directory allowed-hosts(options)/srv/nfs/torrents 192.168.1.1/24(rwasync)/srv/nfs/photos 192.168.1.101(roasync)

Обратите внимание на отсутствие пробела между allowed-hosts и (options). Наличие пробела вводит другую трактовку правил.

Доступные опции:

  • ro (rw) - разрешить доступ только на чтение (чтение/запись);
  • subtree_check (no_subtree_check)- в некоторых случаях приходится экспортировать не весь раздел а лишь его часть. При этом сервер NFS должен выполнять дополнительную проверку обращений клиентов чтобы убедиться в том что они предпринимают попытку доступа лишь к файлам находящимся в соответствующих подкаталогах. Такой контроль поддерева (subtree checks) несколько замедляет взаимодействие с клиентами но если отказаться от него могут возникнуть проблемы с безопасностью системы. Отменить контроль поддерева можно с помощью опции no_subtree_check. Опция subtree_check включающая такой контроль предполагается по умолчанию. Контроль поддерева можно не выполнять в том случае если экспортируемый каталог совпадает с разделом диска;
  • sync (async) - указывает что сервер должен отвечать на запросы только после записи на диск изменений выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск что повышает производительность но понижает надежность т.к. в случае обрыва соединения или отказа оборудования возможна потеря данных;
  • noaccess — запрещает доступ к указанной директории. Может быть полезной если перед этим был задан доступ всем пользователям сети к определенной директории и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям;
  • no_root_squash – по умолчанию пользователь root на клиентской машине не будет обладать теми же правами к директории на сервера. Эта опция снимает это ограничение;
  • nohide - NFS автоматически не показывает нелокальные ресурсы (например примонтированые с помощью mount --bind) эта опция включает отображение таких ресурсов;
  • insecure - использование непривилегированных портов (> 1024);

Запускаем NFS-сервер

# под archlinuxsudo systemctl start rpc-idmapd.service rpc-mountd.service# под ubuntusudo /etc/init.d/nfs-kernel-server start

В дальнейшем при изменении конфигурационного файла достаточно его перечитать командой:

sudo exportfs -rav

Команда rpcinfo -p | grep nfs позволяет проверить успешность запуска сервера.

Клиент под Linux

Установка

# под archlinuxyaourt -S nfs-utils# под ubuntusudo apt-get install portmap nfs-common

Создадим директории для монтирования сетевых ресурсов torrents и photos

mkdir -p ~/nfs/{torrentsphotos}

Для ручного монтирования выполним

sudo mount -t nfs -o rwsoft 192.168.1.100:/srv/nfs/torrents /home/proft/nfs/torrentssudo mount -t nfs -o rwsoft 192.168.1.100:/srv/nfs/photos /home/proft/nfs/photos

Опция soft указывает тихо отменить попытки подключить шару после определенного количества времени (время задается опцией retrans). Подробнее в man nfs.

Данный способ не очень удобен так как каждый раз после перезагрузки придется выполнять эти команды. Сделаем монтирование автоматическим.

Для автоматического монтирования редактируем файл /etc/fstab

# sudo vim /etc/fstab192.168.1.100:/srv/nfs/torrents /home/proft/net/torrents nfs rwsoft 0 0192.168.1.100:/srv/nfs/photos /home/proft/net/photos nfs rosoft 0 0

Но и у этого способа есть свои недостатки например если сервер не доступен то загрузка клиента может подвиснуть из-за попыток подключиться к NFS-серверу. Для исправления этого см. ниже про AutoFS.

AutoFS - автоматическое подключение сетевых ресурсов

Есть возможность монтировать удаленный ресурс с помощью AutoFS при первом обращении и автоматически отмонтировать при отсутствии активности.

AutoFS использует для настройки шаблоны расположенные в /etc/autofs. Основной шаблон называется auto.master он может указывать на один или несколько других шаблонов для конкретных типов носителей.

Установка

# под archlinuxyaourt -S autofs# под ubuntusudo apt-get install autofs

Существует несколько способов указать способы автомонтирования. Я использую такой: в /home/proft/nfs автоматически создается директория с именем NFS-сервера в которой автоматически создаются доступные директории на сервере.

# sudo vim /etc/autofs/auto.master/home/proft/nfs /etc/autofs/auto.nfs --timeout=60

Дополнительный параметр timeout устанавливает количество секунд после которых устройство будет размонтировано. Параметр ghost указывает что сконфигурированные ресурсы будут отображаться всегда а не только тогда когда они доступны (эта опция включена по умолчанию в AutoFS 5)

Опишем в /etc/autofs/auto.nfs NFS-сервер и root-директорию.

# sudo vim /etc/autofs/auto.nfsnfsserver 192.168.1.100:/srv/nfs

Теперь при первом обращении /home/proft/nfs/torrents произойдет автоматическое монтирование NFS-ресурса.

Перезапустим службу autofs:

# под archlinuxsudo systemctl restart autofs# под ubuntusudo /etc/init.d/autofs restart

Еще можно указать время ожидания доступности NFS-ресурса. Для этого необходимо изменить значения MOUNT_WAIT.

# под archlinux# sudo vim /etc/conf.d/autofsMOUNT_WAIT=5# под ubuntusudo /etc/default/autofsMOUNT_WAIT=5

Форсирование использования NFS v3

В некоторых случаях NFSv4 может работать медленно. Для исправления этого можно принудительно указать использовать третью версию.

#sduo vim /etc/nfsmount.confDefaultvers=3Nfsvers=3

На клиенте если используется AutoFS тоже надо указать NFSv3

# sudo vim /etc/conf.d/autofsMOUNT_NFS_DEFAULT_PROTOCOL=3

После этого надо перезапустить сервер NFS и AutoFS.

Мониторинг ресурсов NFS

nfsstat -s (на сервере) - выводит полезную статистику например если badcalls больше 0 то есть проблемы с передачей файлов.

showmount -e (на сервере) - выводит список расшариваемых ресурсов.

showmount -e 192.168.1.100 (на клиенте) - выводит список расшариваемых ресурсов на сервере 192.168.1.100.

nfsstat -c (на клиенте) - выводит полезную статистику.

nfsstat -m (на клиенте) - выводит информацию о подключенных NFS-ресурсах.

Клиент под Windows

А вот тут начинаются приключения :). NFS-клиент под Windows 7 есть но по-умолчанию не установлен.

Для включения NFS-клиента идем в Панель управления > Программы и компоненты > Установка и удаление программ > Включение или отключение компонентов Windows > Службы для NFS и выбираем Клиент для NFS и Администрирование.

Если окно пустое как в моем случаи было читаем или .

Если получилось включить NFS-клиент выше описанным способом то теперь осталось подключить шары с помощью команды mount.

mount 192.168.1.100:/srv/nfs/torrents z:

где

  • 192.168.1.100 – адрес NFS-сервера;
  • /srv/nfs/torrents – общий ресурс на сервере;
  • z: – незанятая буква диска в Windows к которой будет подключен ресурс;

Если выше описанный способ не заработал то воспользуемся . Для этого установим:

Запускаем NekoDrive вводим IP сервера монтируем ресурс.

Дополнительное чтиво


Оригинал статьи