NFS

Это старая версия документа.


NFS(Network File System) –это сетевая файловая система, позволяющая пользователям обращаться к файлам и каталогам, расположенным на удалённых компьютерах, как если бы эти файлы и каталоги были локальными. Главным преимуществом такой системы является то, что отдельно взятые рабочие станции могут использовать меньше собственного дискового пространства, так как совместно используемые данные хранятся на отдельной машине и доступны для других машин в сети. NFS – это клиент-серверное приложение. Т.е. в системе пользователя должен быть установлен NFS-клиент, а на компьютерах, которые предоставляют свое дисковое пространство – NFS-сервер.

Установка

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

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

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

Все настройки сервера хранятся в файле /etc/exports . Открываем его на редактирование

sudo nano /etc/exports

и добавляем в конец файла строки вида (строк может быть произвольное количество):

/data 192.168.1.1(rw,async,no_subtree_check,insecure,nohide,all_squash,anonuid=1000,anongid=1000)
)

, где:

  • /data –путь к папке, для которой раздается доступ;

  • 192.168.1.1 –IP-адрес, которому раздается доступ к папке(можно указать всю сеть, тогда запись примет вид 192.168.1.0/24)

  • (rw,no_root_squash,sync) –набор опций, опции могут быть:

    • rw –чтение запись(может принимать значение ro-только чтение);

    • no_root_squash –по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;

    • sync – синхронный режим доступа(может принимать обратное значение- async);

    • noaccess – запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.

    • FIXME Необходимо добавить описание опций.

    • all_squash– подразумевает, что все подключения будут выполнятся от анонимного пользователя

    • anonuid=1000– привязывает анонимного пользователя к «местному» пользователю;

    • anongid=1000– привязывает анонимного пользователя к группе «местного» пользователя.

Под «местным» пользователем понимается пользователь, который будет осуществлять запись в файлы (запускать приложения, скачивающие файлы и т.д.), поэтому значение 1000 может отличаться от вашего. Для uid пользователя воспользуйтесь командой
id <имя_пользвателя>

Перезапускаем сервер:

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

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

sudo exportfs -a

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

Для монтирования сетевой папки необходимо создать папку на локальном компьютере: <сode>mkdir ~/Общедоступная</code>

Монтирование вручную

Для монтирования папки вручную необходимо выполнить в терминале команду:

sudo mount -t nfs -o uid=1000,iocharset=utf-8 192.168.1.2:/data ~/Общедоступные

Монтирование с записью в fstab

Для большего удобства можно добавить запись с сетевой папкой в fstab. Целесообразно создать точку монтирования сетевой папки в /media, потому что папки созданные там будут отображаться в Nautilus в левой колонке и монтировать можно будет одним кликом.

sudo mkdir /media/Общедоступные

В файл /etc/fstab добавляем подобную запись:

192.168.1.1:/data /media/Общедоступная nfs user,rw,noauto 0 0

опция «noauto» запрещает автоматическое монтирование сетевого диска при старте системы.

Проблемы

Использование на ноутбуке

При монтировании удаленных папок NFS посредством fstab, в ситуации, когда сеть с сервером будет не доступна, ноутбук невозможно выключить или отправить в спящий режим. Для использования удаленных папок NFS на ноутбуке лучше воспользоваться монтированием при помощи autofs

Монтирование с помощью autofs

Данный способ монтирования позволяет автоматически монтировать папку после обращения к ней в наутилусе или в терминале, например так:

cd /nfs/Сервер/

и автоматически отмонтировать при отсутствии активности.

Установка

Для реализации данного способа необходимо доустановить пакет autofs:

sudo apt-get install autofs

Настройка

Для настройки autofsв файле /etc/auto.master необходимо добавить строку

/nfs /etc/auto.nfs --timeout=60

Здесь –timeout=60 указывает отмонтировать раздел при отсутствии активности на нём более чем 60 секунд. Создаем в корне файловой системы папку /nfs :

sudo mkdir /nfs

В файле /etc/auto.misc добавляем строку

Сервер 192.168.1.2:/

где

  • Сервер – папка, которая будет создаваться в каталоге /nfs при монтировании удаленных папок;

  • 192.168.1.2:/– IP-адрес и общая папка сервера.

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

sudo /etc/init.d/autofs restart

Проблемы

Настройка autofs на ноутбуке

Если вы настраиваете autofs на ноутбуке, то возможны проблемы в ситуации, когда недоступна сеть с сервером NFS, при которой autofs зависает и подвешивает, например Nautilus, при обращении к папке. Так же эта проблема может проявляться, как большая задержка (по умолчанию- 3 минуты) при открытии nautilus, в закладках которого находится примонтированная удаленная папка NFS.
Для решения этой проблемы необходимо уменьшить время ожидания монтирования autofs, для этого в файле /etc/default/autofs необходимо раскомментировать и добавить значение в строчке

MOUNT_WAIT=5

После этого autofs будет пытаться примонтировать удаленную папку только 5 секунд.

Использование

FIXME

Проблемы

Проблемы с гибернацией или выключением

После настройки автомонтирования сетевых папок NFS могут обнаружится некотрые проблемы с выключением или гибернацией системы. Чаще всего это проявляется как прерывающаяся гибернация (компьютер начинает уходить в гибернацию, гаснет экран, после чего экран опять загорается и работа продолжается, так же в этих случаях возможны проблемы с выключением и перезагрузкой системы. При последующих попытках отправить компьютер в гибернацию на черном экране вверрху можно наблюдать строку типа:

Freezing of tasks failed after 20.01 seconds (1 tasks refusing to freeze, wq_busy=0)

Для диагностирования смотрим лог dmesg, возможный вывод:

dmesg | grep -A 2 refuse
[32467.560058] Freezing of tasks failed after 20.01 seconds (1 tasks refusing to freeze, wq_busy=0):
[32467.560115] nfs D 0000000000000000 0 2065 1 0x00800004

или

dmesg | grep -A 2 refuse
[32467.560058] Freezing of tasks failed after 20.00 seconds (1 tasks refusing to freeze):
[32467.560115] updatedb.mloc D ffff88008e907578 0 9268 9261 0x00800004

Пакет, являющийся причиной зависания указан в начале строки, следующей после сообщения об ошибке.

Причина №1: пакет NFS

Причиной данной проблемы является скрипт прерывания работы NetworkManager, необходимо запретить его выполнение переименовав его:

 sudo mv /usr/lib/pm-utils/sleep.d/55NetworkManager /usr/libg/pm-utils/sleep.d/old.55NetworkManager

Причина №2: пакет updatedb.mloc

updatedb является частью пакета mlocate- удобного пакета для быстрого поиска файлов по системе. К сожалению, версия 0.23.1-1ubuntu21), находящаяся в репозиториях Ubuntu содержит баг, при котором возникает ситуация, когда компьютер не может выключиться или отправиться в гибернацию, когда сервер NFS выключен. Для решения данной проблемы необходимо установить пакет версии 0.23.1-1 из репозитория debian-sid:

wget http://ftp.ru.debian.org/debian/pool/main/m/mlocate/mlocate_0.23.1-1_i386.deb
sudo dpkg -i mlocate*

Ссылки

  • Источник настройки сервера и клиента NFS
  • Источник описания способа монтирования при помощи autofs.
1)
посмотреть версию пакета можно командой
dpkg -l mlocate