Навожу инструкцию по установке и настройке 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.
- /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.
Все доступные опции и синтаксис записи хостов, групп хостов и т.п. можно почитать в мануале
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).
Далее нужно смонтировать диск. Для этого можно использовать командную строку или же просто щелкнуть правой кнопкой мыши на Мой компьютер и выбрать Подключение сетевого диска. И ввести строку \\192.168.2.213\home\alex\nfs_dir1. Это IP сервера и путь к папке (рис. 2).
Если все ок, мы увидим диск (рис. 3).
То же можно проделать, используя командную строку (рис. 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. О чем пойдет речь в следующей статье.
А если нужно наоборот? чтобы в роли сервера был windows,а клиентом linux.
Ну тогда все также, только на оборот 🙂
Не подскажете NFS клиент под Windows 8?
Дело в том что встоэнный NFS есть только в редакцыях Enterprise и Ultimate. Теперь этот пункт меню установки удаления компонентов называется «Services for Unix-based applications (DEPRECIATED)»
А эсли на Ubuntu уже есть Samba Server то NFS будет работать?
Не будут ли виндовые клиэнты видеть только SMB шары с этой машыны?
P.S.
К предыдущем своему коментарию: там есть ещё пукт NFS Client такчто ничего оно не устаревшее (Depricated).
Небольшое уточнения по статьи: посл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 папку, то нужно знать к ней путь, чтобы примаунтить или же маунтить все дерево, к которому есть доступ
Благодарю за ответы.
По поводу 2 ответа, то на видео от Yuriy Lebedev — Клиент NFS в Windows 8.1 ( https://youtu.be/SAgbiX4kuz8?t=249 ) на 4:07 он вводит сетевое имя NFS сервера и видит предоставляемые шары.
Во-первых — это шара между видновс-подобными машинами, а во-вторых это не сетевое обнаружение — он напрямую подключился к серверу NFS, так как настроил клиент.
1 — имеется ввиду что он NFS шару завернул в SMB?
2 — но я и не говорил об автоматическом отображении шар в сетевом обнаружении (посредством Network Doscovery или без такового), а как раз о том что он вбил имя NFS сервера и увидел шары.
Я тоже так делал к Ubuntu с NFS и Samba, только видны после этого лишь SMB шары.
А как именно настроил клиент? Судя по видео он лишь установил недостающий компонент и более никаких настроек не предпринимал.
А как использовать 4ю версию NFS сервера,
если глянуть то sudo nfsstat -4 у меня все по нулям и используется в основном 3й протокол.
как понять какая версия у меня используется?
Добрый день.
Маунтить так:
Узнать какая: