Настройка и монтирование NFS


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

В роли сервера возьмем Ubuntu 12.04.
В качестве клиентов будем использовать и тестировать Centos и Winows 7.

Master server: 192.168.2.213 (Ubuntu)

Clients: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

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

Для начала нужно настроить сервер. Так как мы будем использовать Ubuntu в роли сервера, нужно установить соответствующий пакет

root@ubuntu:~# apt-get install nfs-kernel-server

После установки нужного пакеты у нас создались два файла конфигураций. Из лога установки:

…
Creating config file /etc/idmapd.conf with new version
Creating config file /etc/default/nfs-common with new version
…

В первом файле описан user (созданный при установке пакета) и group , для участия в mapping-e (идентификации пользователей).

root@ubuntu:~# cat /etc/idmapd.conf
[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Как мы знаем, в Linux каждый файл принадлежит конкретному пользователю, у которого есть свой (UID,GID), но у Windows системах схема немного другая. И в связи с этим был придуман механизм mapping, который делает трансляцию разных пользователей с различных ОС в понятный для файловой системы Linux вид.
Второй файл нужен для настройки идентификации Kerberos и настройке нестандартного порта, на котором будет слушаться демон. Он пока нам не нужен. Об настройке Kerberos речь пойдет в следующей статье.

root@ubuntu:~# cat /etc/default/nfs-common
# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=

# Options for rpc.statd.
#   Should rpc.statd listen on a specific port? This is especially useful
#   when you have a port-based firewall. To use a fixed port, set this
#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
#   For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS
STATDOPTS=

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=

Теперь продолжим настройку.
Все директории для шаринга нужно прописывать в файле /etc/exports. Для начала создадим 2 папки в домашней директории и закинем в них файлы. Дерево каталогов и файлов для экспорта:

root@ubuntu:~# tree /home/alex/
/home/alex/
├── nfs_dir1
│   ├── file1_dir1
│   ├── file2_dir1
│   └── file3_dir1
├── nfs_dir2
├── file1_dir2
├── file2_dir2
└── file3_dir2

Теперь нужно присвоит юзера и группу для этих каталогов (берем с файла /etc/idmapd.conf ).

root@ubuntu:~# chown –R nobody:nogroup nfs_dir1/
root@ubuntu:~# chown –R nobody:nogroup nfs_dir2/

Для начала сделаем экспорт директории nfs_dir1 для конкретного IP. Редактируем файл /etc/exprots.

root@ubuntu:~# vim /etc/exports
# Для конкретного хоста (Windows)
/home/alex/nfs_dir1     192.168.2.180(rw,sync,all_squash,no_subtree_check,insecure)
# Для  любого хоста подсети
/home/alex/nfs_dir2     192.168.2.0/24(rw,no_root_squash,sync,no_subtree_check)

Здесь наведен минимальный набор опций для корректной работы хранилища с ОС Windows.

Популярные опции:

Все доступные опции и синтаксис записи хостов, групп хостов и т.п. можно почитать в мануале

root@ubuntu:~# man exports

Далее нужно применить настройки

root@ubuntu:~# exportfs –a

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

root@ubuntu:~# exportfs -v
/home/alex/nfs_dir1        192.168.2.180(rw,wdelay,all_squash,no_subtree_check,insecure)
/home/alex/nfs_dir2        192.168.2.0/24(rw,wdelay,no_root_squash,no_subtree_check)

Сервер настроен.

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

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

Если не было сообщений об ошибке. Можно приступить к монтирование на клиентской стороне.
Для начала, нужно добавить сервис (службу-клиента) NFS. Для этого переходив в Пуск —> Панель управления —> Программы и компоненты и нажимаем на пункт меню слева Включение или отключение компонентов Windows. В появившимся окне выбираем Клиент для NFS и жмем ОК(рис. 1).


Рисунок 1

Далее нужно смонтировать диск. Для этого можно использовать командную строку или же просто щелкнуть правой кнопкой мыши на Мой компьютер и выбрать Подключение сетевого диска. И ввести строку \\192.168.2.213\home\alex\nfs_dir1. Это IP сервера и путь к папке (рис. 2).


Рисунок 2

Если все ок, мы увидим диск (рис. 3).


Рисунок 3

То же можно проделать, используя командную строку (рис. 4).


Рисунок 4

Возможные ошибки:

Вы не сможете подключить сетевой NFS диск к Windows OS (рис. 5), если
1. Не установлен клиент NFS
2. Включен (не настроен) фаэрвол
3. Нет сетевого доступа к серверу
4. Неверно введены параметры монтирования
5. Не настроен (не применены настройки) экспорт на сервере.
6. Добавить опцию insecure в настройках экспорта


Рисунок 5 – Ошибка подключения сетевого NFS диска

Вы не сможете добавить файл в смонтированную файловую систему (рис. 6) , если:
1. На сервере не выставлены права на папку (nobody:nogroup)
2. Не выставлена опция all_squash в настройках экспорта
3. Не выставлена опция rw в настройках экспорта


Рисунок 6 – Ошибка при добавлении файла на NFS диска

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

Настройка линукс систем довольно проста и безболезненна. Нужно просто установить нужные пакеты и смонтировать диск. Для Centos нужны следующие пакеты

[root@centos ~]# yum install nfs-utils nfs-utils-lib

Далее создаем папку и монтируем NFS раздела

[root@centos ~]# mkdir -p /mnt/nfs
[root@centos ~]# mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/nfs
[root@centos ~]# mount
/dev/mapper/vg_slave-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.2.213:/home/alex/nfs_dir1 on /mnt/nfs type nfs (rw,vers=4,addr=192.168.2.213,clientaddr=192.168.2.72)

В данном случае мы можем добавлять любой файл и директорию в смонтированную nfs_dir1 папку от имени любого пользователя системы (all_squash). Но если мы смонтируем вторую папку nfs_dir2, то в нее может записывать ТОЛЬКО root, так как там стоит опция no_root_squash. Проверяем.

[root@centos ~]# mkdir /mnt/dir1
[root@centos ~]# mkdir /mnt/dir2
[root@centos ~]# mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/dir1
[root@centos ~]# mount 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2
или
[root@centos ~]# mount -t nfs4 -o rw,hard,intr,bg 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2
[root@centos ~]# echo "Hello" > /mnt/dir1/file1
[root@centos ~]# echo "Hello" > /mnt/dir2/file1
[root@centos ~]# su alex
[alex@centos root]$ echo "Hello" > /mnt/dir1/file1
[alex@centos root]$ echo "Hello" > /mnt/dir2/file1
bash: /mnt/dir2/file1: Permission denied

Возможные флаги монтирования.

Флаг Описание
rw Монтирование файловой системы для чтения/записи (она должна экспортировать­ся сервером в режиме чтения/записи)
го Монтирование файловой системы только для чтения
bg Если смонтировать файловую систему не удается (сервер не отвечает), следует перевести операцию в фоновый режим и продолжить обработку других запросов на монтирование
hard Если сервер отключился, операции, которые пытаются получить к нему доступ, блокируются до тех пор, пока сервер не включится вновь
soft Если сервер отключился, операции, которые пытаются получить к нему доступ, завершаются выдачей сообщения об ошибке. Этот флаг полезно устанавливать для того, чтобы предотвратить зависание процессов в случае неудачного монтирова­ния не очень важных файловых систем
intr Позволяет прерывать с клавиатуры заблокированные операции (будут выдаваться сообщения об ошибке)
nointr Не позволяет прерывать с клавиатуры заблокированные операции
retrans=n Указывает, сколько раз нужно повторить запрос, прежде чем будет выдано со­общение об ошибке (для файловых систем, смонтированных с флагом soft)
timeo=n Задает интервал тайм-аута для запросов (в десятых долях секунды)
rsize=n Задает размер буфера чтения равным n байт
wsize=fl Задает размер буфера записи равным n байт
sec=режим Задает режим безопасности
vers=n Задает версию протокола NFS
proto = протокол Выбирает транспортный протокол; им должен быть протокол tcp для версии NVS 4

Так же можно проверить с консоли, правильно ли сервер экспортировал файловую систему.

root@centos ~# showmount -e 192.168.2.213
Export list for 192.168.2.213:
/home/alex/nfs_dir2 192.168.2.0/24
/home/alex/nfs_dir1 192.168.2.180

Добавляем монтирование в автозагрузку

[root@centos ~]# cat /etc/fstab
...
192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 nfs4 rw,bg,intr,hard,nodev,nosuid 0 0

Чтобы проверить правильно ли добавили запись в fstab — смонтируем ФС.

root@centos  ~# mount -a -t nfs4

Возможные ошибки.

root@centos  ~# mount -a -t nfs4
mount.nfs4: mount point /mnt/dir2 does not exist

 

root@centos  ~# mount -a -t nfs4
mount.nfs4: remote share not in 'host:dir' format

В первом случаи нужно создать папку. Во втором — синтаксические ошибки в fstab.
Если возникли ошибки при монтировании NFS разделов – пройдитесь по списку Возможные ошибки из предыдущего раздела.
Для монтирования NFS разделов можно также использовать autofs. О чем пойдет речь в следующей статье.

Автор: admin, 6 ноября 2013
Рубрики: Linux
Метки: , ,
11 комментариев к сообщению: “Настройка и монтирование NFS”
  1. Егор:

    А если нужно наоборот? чтобы в роли сервера был windows,а клиентом linux.

  2. Guest:

    Не подскажете NFS клиент под Windows 8?
    Дело в том что встоэнный NFS есть только в редакцыях Enterprise и Ultimate. Теперь этот пункт меню установки удаления компонентов называется «Services for Unix-based applications (DEPRECIATED)»

  3. Guest:

    А эсли на Ubuntu уже есть Samba Server то NFS будет работать?
    Не будут ли виндовые клиэнты видеть только SMB шары с этой машыны?

    P.S.
    К предыдущем своему коментарию: там есть ещё пукт NFS Client такчто ничего оно не устаревшее (Depricated).

  4. Guest:

    Небольшое уточнения по статьи: послe комманд (для Ubuntu)
    sudo exportfs -a
    sudo exportfs -v
    нужно выполнить комманду
    sudo service nfs-kernel-server start
    так как при установки список пустой, что соотвественно, и сервис сервера NFS не запущен.
    P.S.
    К своэму предыдущему коментарию: видовые клиэнты в експлорере вмдят конечно SMB шары с той машыны где помимо Samba Server размещён и NFS Server, однако консольная комманда mount, устанавливается с компонентом системы NFS Client, предкасно монтируэт эти невидимые в експлорере шары.

    • Здравствуйте. По-порядку:
      1. Встроенная поддержка NFS доступна в Windows 8 Enterprise (на официально сайте так и написано — support.microsoft.com/en-us/kb/2769923). Значит нужно использовать сторонние инструменты (NekoDrive, nfsAxe).
      2. SMB и NFS работают на разных портах, так что будут работать вместе. В Windows нет обнаружения NFS шар через експлорер.
      3. После установки NFS-kernel стартует с пустым списком шар, и когда что-то добавляется — можно делать рестарт или exportfs -ar.
      Если клиенту разрешено маунтить NFS папку, то нужно знать к ней путь, чтобы примаунтить или же маунтить все дерево, к которому есть доступ

      • Guest:

        Благодарю за ответы.
        По поводу 2 ответа, то на видео от Yuriy Lebedev — Клиент NFS в Windows 8.1 ( https://youtu.be/SAgbiX4kuz8?t=249 ) на 4:07 он вводит сетевое имя NFS сервера и видит предоставляемые шары.

        • visitor:

          Во-первых — это шара между видновс-подобными машинами, а во-вторых это не сетевое обнаружение — он напрямую подключился к серверу NFS, так как настроил клиент.

          • Guest:

            1 — имеется ввиду что он NFS шару завернул в SMB?
            2 — но я и не говорил об автоматическом отображении шар в сетевом обнаружении (посредством Network Doscovery или без такового), а как раз о том что он вбил имя NFS сервера и увидел шары.
            Я тоже так делал к Ubuntu с NFS и Samba, только видны после этого лишь SMB шары.

            А как именно настроил клиент? Судя по видео он лишь установил недостающий компонент и более никаких настроек не предпринимал.

  5. dima:

    А как использовать 4ю версию NFS сервера,

    если глянуть то sudo nfsstat -4 у меня все по нулям и используется в основном 3й протокол.

    как понять какая версия у меня используется?

Написать комментарий

Последние статьи

Яндекс.Метрика
?>