Настройка и монтирование 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 в роли сервера, нужно установить соответствующий пакет
1
root@ubuntu:~# apt-get install nfs-kernel-server
После установки нужного пакеты у нас создались два файла конфигураций. Из лога установки:
1
2
3
4
Creating config file /etc/idmapd.conf with new version
Creating config file /etc/default/nfs-common with new version
В первом файле описан user (созданный при установке пакета) и group , для участия в mapping-e (идентификации пользователей).
1
2
3
4
5
6
7
8
9
10
11
12
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 речь пойдет в следующей статье.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 папки в домашней директории и закинем в них файлы. Дерево каталогов и файлов для экспорта:
1
2
3
4
5
6
7
8
9
10
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 ).
1
2
root@ubuntu:~# chown –R nobody:nogroup nfs_dir1/
root@ubuntu:~# chown –R nobody:nogroup nfs_dir2/
Для начала сделаем экспорт директории nfs_dir1 для конкретного IP. Редактируем файл /etc/exprots.
1
2
3
4
5
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.
  • /home/alex/nfs_dir1 – путь к папке, для которой раздается доступ;
  • 192.168.2.180 – IP-адрес, которому раздается доступ к папке(можно указать всю сеть, тогда запись примет вид 192.168.2.0/24)
  • (rw,sync,all_squash,no_subtree_check) – набор опций.
Популярные опции:
  • rw –чтение/запись(может принимать значение ro-только чтение);
  • no_root_squash – по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;
  • sync – синхронный режим доступа(может принимать обратное значение – async);
  • noaccess – запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.
  • all_squash– подразумевает, что все подключения будут выполнятся от анонимного пользователя (нужно для Windows клиента)
  • anonuid=1000 – привязывает анонимного пользователя к «местному» пользователю;
  • anongid=1000 – привязывает анонимного пользователя к группе «местного» пользователя.
  • no_subtree_check(subtree_check) –если экспортируется подкаталог файловой системы, но не вся файловая система, сервер проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Отключение проверки уменьшает безопасность, но увеличивает скорость передачи данных.
  • Обычно, Linux (и другие Unix-подобные операционные системы) резервируют TCP и UDP порты от 1-1023 (так называемые безопасные порты) для использования процессами пользователя root. Чтобы удостовериться, что именно root инициировал удаленное подключение NFS, сервер NFS обычно требует, чтобы удаленные клиенты использовали безопасные порты. Это соглашение, однако, не соблюдается некоторыми операционными системами (например Windows). В таких случаях опция insecure позволяет клиенту NFS использовать любой порт TCP/UDP. Обычно она требуется при обслуживании клиентов Windows.
Все доступные опции и синтаксис записи хостов, групп хостов и т.п. можно почитать в мануале
1
root@ubuntu:~# man exports
Далее нужно применить настройки
1
root@ubuntu:~# exportfs –a
Теперь проверяем что у нас экспортировалось.
1
2
3
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 нужны следующие пакеты
1
[root@centos ~]# yum install nfs-utils nfs-utils-lib
Далее создаем папку и монтируем NFS раздела
1
2
3
4
5
6
7
8
9
10
11
12
[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. Проверяем.
1
2
3
4
5
6
7
8
9
10
11
12
[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
Так же можно проверить с консоли, правильно ли сервер экспортировал файловую систему.
1
2
3
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
Добавляем монтирование в автозагрузку
1
2
3
[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 – смонтируем ФС.
1
root@centos  ~# mount -a -t nfs4
Возможные ошибки.
1
2
root@centos  ~# mount -a -t nfs4
mount.nfs4: mount point /mnt/dir2 does not exist
1
2
root@centos  ~# mount -a -t nfs4
mount.nfs4: remote share not in 'host:dir' format
В первом случаи нужно создать папку. Во втором – синтаксические ошибки в fstab.
Если возникли ошибки при монтировании NFS разделов – пройдитесь по списку Возможные ошибки из предыдущего раздела.
Для монтирования NFS разделов можно также использовать autofs. О чем пойдет речь в следующей статье.

Link

Комментарии

Популярные сообщения из этого блога

S.M.A.R.T. (часть 3). Расшифровка и понимание SMART атрибутов

S.M.A.R.T. (часть 2). Мониторинг BBU RAID контроллеров

Обзор системы хранения Intel SS4200-E начального уровня