Настройка NFS-сервера на Debian

Список разделов:

NFS была разработана в те времена, когда мы не могли открывать доступ к своим диска так как мы можем делать это сегодня - в windows окружении. NFS предоставляет возможность открывать доступ к дисковому пространству большого сервера маленьким клиентским системам. В то время как сегодня это выглядит стандартной возможностью, были времена, когда клиенты и серверы не могли разделять между собой дисковое пространство.

"Тонкие" клиенты не имеют жестких дисков и им требуется виртуальный жесткий диск. NFS монтирует их жесткие диски с сервера и в то время как пользователь думает, что сохраняет файлы на локальный жесткий диск, он сохраняет файлы на сервер. В "тонком" пользовательском окружении, разделы root, usr и home предлагаются клиенту с сервера посредством NFS.

Основные плюсы использования NFS.

  • локальные рабочие станции используют меньше дискового пространства потому что часто используемые данные могут храниться на сервере и другие пользователи имеют к ним доступ по сети,
  • пользователям нет необходимости иметь раздельные домашние директории на каждой сетевой машине. Домашние директории могут быть созданы на NFS-сервере и открыты для доступа по сети,
  • устройства хранения, такие как флоппи-диски, устройства Zip и CDROM могут использоваться другими машинами в сети. Это уменьшает количество устройств чтения внешних носителей информации в сети.

Установка NFS-сервера.

Небольшое замечание. Если вы используете ядро 2.2.13 и выше, вы можете использовать  nfs-kernel-server. Кроме него можно использовать nfs-user-server. Этот пакет более медленный, но имеет больше функций и его легче дебажить, чем nfs-kernel-server.

Установка осуществляется следующей командой:

# aptitude install nfs-kernel-server nfs-common portmap

После установки нужно указать, доступ к каким директориям мы предоставляем. Для этого правим файл /etc/exports. Для NFSv3 и ранее содержимое файла будет выглядеть примерно так:

/mnt/movie 192.168.0.0/24(rw,async,no_subtree_check)
/mnt/user 192.168.0.41(rw,async,no_subtree_check)

В NFSv4 предоставляется доступ к главной директории и ее поддиректориям. Таким образом в первой строке описывается главная директория, а в последующих - поддиректории, с отдельной строки:

/mnt 192.168.0.0/24(ro, fsid=0, async, no_subtree_check)
/mnt/movie 192.168.0.0/24(rw, async, no_subtree_check)
/mnt/user 192.168.0.41(rw, async, no_subtree_check)

В этом примере директория /mnt/movie будет доступна всем в сети 192.168.0.0/24, а /mnt/user - только с компьютера с адресом 192.168.0.41 при этом можно указать несколько конкретных адресов в одной строке разделив блоки описания пробелом.

Пояснения к параметрам в строке:

/mnt/movie - путь к директории, доступ к которой необходимо предоставить.
192.168.1.0/24 - описание сети, из которой можно получить доступ к директории. Также можно указать конкретный адрес, к примеру, 192.168.0.41. Кроме того, NFS понимает шаблоны с применением символов * и ?.
rw - говорит о том, что предоставляются права как на чтение, так и на запись. Если нужно разрешить только читать из директории, то следует указать параметр ro.
async - включает возможность обслуживания клиентов еще до окончания действия предыдущей команды на запись. Это может значительно увеличить быстродействие при большом количестве пользователей, но снижает надежность. По умолчанию, включена опция sync.
no_subtree_check - отключает проверку вложенных директорий.

Прочие опции:

secure - при включении данной опции для соединения будут использоваться порты с номером ниже 1024. Эта опция включена по умолчанию, чтобы её отключить, используйте параметр insecure.
no_wdelay - эта опция не действует при включенной опции async. В нормальном состоянии NFS-сервер немного задерживает запись на диск, если уже ведется запись или ожидается поступление запроса на запись. Это позволяет запустить несколько процессов записи на диск с помощью одной команды, что увеличивает производительность. Однако, если NFS-сервер получает в основном мелкие, не связанные между собой, запросы, то стандартное поведение может снизить производительность, поэтому доступна опция no_wdelay чтобы отключить задержку перед записью.
nohide - в случае когда экспортируются две директории, одна из которых вложенная, при монтировании только родительской директории вложенная будет видна как пустая. Чтобы предотвратить такой эффект, можно использовать данный параметр. Стоит учесть, что данный параметр работает только для экспортирования по конкретному ip-адресу. Обратным параметром является параметр hide.
crossmnt - данный параметр похож на параметр nohide, но дделает возможным для клиентов переходить из файловой системы помеченой параметром crossmnt в экспортированную файловую систему смонтированную в ней. То есть когда вложенная файловая система "B" смонтирована внутри файловой системы "A", установка параметра crossmnt для "A" имеет тот же эффект, как установка параметра nohide для "B".
fsid=num|root|uuid - NFS необходимо идентифицировать каждую файловую систему, которую она экспортирует. Обычно используется UUID. Однако ядра Linux ниже 2.6.20 не понимают UUID, поэтому необходимо устанавливать данный параметр, к примеру fsid=root или fsid=0.

Опции подмены идентификатора пользователя:

nfsd основывает свой доступ к файлами на сервере на gid и uid, предоставляемых в каждом NFS RPC запросе. По привычке пользователь будет ожить что он может получить доступ к своим файлам на сервере, как к обычной файловой системе. Это требует того, чтобы одни и те же gid и uid использовались на клиентской и серверной машинах. Это не всегда верно или не всегда желательно.

Очень часто не желательно, чтобы пользователь root на клиентской машине также воспринимался как root при доступе к файлам на NFS-сервере. Чтобы это предотвратить uid 0 обычно подменяется другим id: так называемым "анонимом" или nobody. Этот тип поведения (называемый "root squashing") применяется по умолчанию и может быть отключен параметром no_root_squash.

По умолчанию, exportfs использует uid/gid с номером 65534 для доступа с подменой. Эти значения могут быть изменеы параметрами anonuid и anongid. Наконец, вы можете подменить все пользовательские запросы на анонимные с помощью параметра all_squash.

Вот полный список параметров для подмены идентификаторов:

root_squash - подменяет запросы от uid/gid 0 (root) на анонимыне uid/gid.
no_root_squash - выключает подмену uid/gid для root. Эта опция используется в основном для бездисковых клиентских машин.
all_squash - используется обычно для публичного экспорта директорий. Обратный параметр - no_all_squash.
anonuid и anongid - применяется для указания uid/gid для анонима. Это может быть полезно, если какая либо директория экспортируется для конкретного пользователя, заведенного в системе.

После описания всех директорий, к которым предоставляем доступ, сохраняем файл и перезапускаем NFS-сервер, так как после установки он запускается автоматически:

# /etc/init.d/nfs-kernel-server restart

Полезные утилиты.

Чтобы не передергивать сервис, можно мягко применить измененные настройки командой:

# exportfs -ra

Где параметр -a говорит о том, что нужно экспортировать все директории из файла /etc/exports, а параметр -r заставляет реэкспортировать список всех директорий очистив текущий список. Вообще говоря, если нужно пополнить список экспортированных директорий, то нужно использовать параметр -a, а если нучно убрать все текущие и добавить только те, что есть в /etc/exports, то следует использовать параметр -r. Также может быть полезен параметр -u, который позволяет отменить экспорт определенных директорий и параметр -f, который очищает текущую таблицу экспорта ядра и все активные пользователи при последующем запросе получат новый список экспортируемых директорий.

Узнать различную информацию об экспорте можно с помощью утилиты showmount:

showmount без параметров отображает список подключенных клиентов,
-a или --all - показывает все используемые точки монтирования с ip-адресами и директориями. Так можно узнать, какие машины пользуются NFS-сервером и какие директории на них смонтированы.
-d - отображает только список директорий смонитированных клиентами.
-e - выводит список экспорта NFS-сервера.

Утилита nfsstat отображает диагностическую информацию об активности как NFS-сервера, так и клиента.

Параметры команды nfsstat:

-s - вывести только серверную статистику. По умолчанию выводится как серверная, так и клиентская информация.
-c - вывести только клиентскую статистику.
-n - вывести только статистику NFS. По умолчанию, выводится как NFS, так и RPC статистика.
-2 - вывести данные только по NFS v2. По умолчанию, выводится информация обо всех версиях имеющих не нулевую статистику.
-3 - вывести данные только по NFS v3.
-4 - вывести данные только по NFS v4.
-m - отобразить информацию о всех смонтированных NFS файловых системах. Если указан данный параметр, то все остальные игнорируются.
-r - вывести только статистику NFS.
-l - отобразить информацию в виде списка.

Монтирование на клиентской машине.

При необходимости устанавливаем пару пакетов:

# aptitude install nfs-common portmap

Теперь создаем директории для монтирования, к примеру:

# mkdir -p /home/movie /home/user

Затем просто монтируем в них директории, экспортируемые с NFS-сервера:

# mount -t nfs 192.168.0.2:/mnt/movie /home/movie
# mount -t nfs 192.168.0.2:/mnt/user /home/user

Монтирование при использовании NFSv4:

mount -t nfs4 192.168.0.2:/ /home/mnt

То есть при монтировании экспортируемых директорий по NFSv4 необходимо указывать путь на сервере относительно основной директории.

Размонтирование делается как обычно, к примеру:

# umount /home/movie

Настройка автоматического монтирования.

Для того, чтобы на клиентской машине экспортируемые директории монтировались автоматически вносим следующие строки в файл /etc/fstab:

192.168.0.2:/mnt/movie /home/movie nfs rw,async
192.168.0.2:/mnt/user /home/user nfs rw,async

Порядок элементов строки: что, куда, тип файловой системы, параметры.

Бывают следующие параметры:

soft/hard - определяет поведение после превышения количества запросов на подключение. Если ничего не указано или указан параметр hard, то запросы будут отправляться бесконечно. Если задан параметр soft, то после таймаута быдет выдана ошибка. Параметр soft может привести к порче данных, поэтому его следует использовать в случаях когда больше требуется отзывчивость, чем надежность. Увеличение значения параметра retrans может снизить риск порчи данных.
timeo=n - время (в десятках секунд) которое NFS-клиент ждет ответа перед повтором запроса.
retrans=n - сколько раз NFS-клиент повторяет запрос перед тем как перейти к дальнейшим действиям. По умолчанию, запрос повторяется три раза.
rsize=n - максимальное количество байт в каждом сетевом запросе на чтение, которое NFS-клиент может получить когда читает из файла на NFS-сервере. Должно быть кратно 1024. Если параметр не указан, то используется максимальное значение поддерживаемое клиентом и сервером.
wsize=n - максимальное количество байт в каждом сетевом запросе на запись. Условия работы те же, что и для rsize.
ac/noac - определяет будет или нет использоваться кеширование атрибутов файлов. Если ни одна опция не будет установлена (или будет установлена опция ac), то клиент будет кешировать атрибуты файлов.
bg/fg - определяет то, каким образом поведет себя утилита mount если попытка смонтировать nfs-экспорт не удастся. fg (по умолчанию) заставляет mount выйти с ошибкой, а bg заставляет mount в случае таймаута создавать потомка и продолжать попытки смонтировать в то время как родительский процесс будет закрыт.
sharecache/nosharecache - определяет использовать ли один кеш данных в случае если монтируется одна и та же экспортируемая директория в несколько точек монтирования. По умолчанию кеш включен.
intr/nointr - выбирает можно ли применять сигналы на прерывание файловых операций на этой точке монтирования. По умолчанию используется nointr. Использовании опции intr предпочтительно при указании опции soft, так как это сильно снижает вероятность порчи данных. В версиях ядра 2.6.25 и выше данные опции не применяются и при их указании будут проигнорированы.

P.S. Одной из причин, почему я взялся за NFS, было желание смотреть фильмы прямо с домашнего сервера. Вначале запустил samba, что, конечно, удобнее, но при просмотре фильмов раз где-то в 8 минут происходило подвисание, которое отвисало еще минуты через 2. Так жить было не возможно и пришлось запустить NFS-сервер. Однако на домашней машине у меня установлен Windows 7 Pro, в котором нет встроенного NFS-клиента. Поэтому пришлось искать сторонние NFS-клиенты под Windows.

Наверх

Опубликовано