NFS: различия между версиями

Материал из ALT Linux Wiki
 
(не показано 12 промежуточных версий 6 участников)
Строка 1: Строка 1:
{{Stub}}


== NFS ==
Важной особенностью NFS является то, что она рассчитана на использование внутри безопасной сети, рабочим станциям в которой можно доверять, поскольку авторизация доступа к файлам, смонтированным на NFS осуществляется на основании идентификатора пользователя, а подлинность пользователя каждая машина в сети проверяет самостоятельно.
Важной особенностью NFS является то, что она рассчитана на использование внутри безопасной сети, рабочим станциям в которой можно доверять, поскольку авторизация доступа к файлам, смонтированным на NFS осуществляется на основании идентификатора пользователя, а подлинность пользователя каждая машина в сети проверяет самостоятельно.
Вытекающим отсюда требованием является то, что пользователь должен быть зарегистрирован и на клиенте и на сервере NFS и иметь там одно и то же входное имя (login) и идентификатор. Это достигается использованием централизованной аутентификации (например, с помощью PAM и сервера аутентификации или NIS).
Вытекающим отсюда требованием является то, что пользователь должен быть зарегистрирован и на клиенте и на сервере NFS и иметь там одно и то же входное имя (login) и идентификатор. Это достигается использованием централизованной аутентификации (например, с помощью PAM и сервера аутентификации или NIS).


Для запуска nfs требуется, чтобы в системе были установлены следующие пакеты:
Для запуска NFS требуется, чтобы в системе были установлены следующие пакеты:
* nfs-server или unfs3 (в OpenVZ VE ядерный NFS-сервер не работает)
* {{pkgL|nfs-server}} или {{pkgL|unfs3}} (в OpenVZ VE ядерный NFS-сервер не работает)
* rpcbind (с шестой платформы; ранее нужен был portmap)  
* {{pkgL|rpcbind}} (с шестой платформы; ранее нужен был portmap)  
* nfs-clients (содержит в себе nfslock)
* {{pkgL|nfs-clients}} (содержит в себе nfslock)
некоторых системах вместо nfs-server и nfs-clients имеется пакет nfs-utils)
В некоторых системах вместо {{pkgL|nfs-server}} и {{pkgL|nfs-clients}} имеется пакет {{pkgL|nfs-utils}}.


== Сервер NFS ==


=== Настройка сервера NFS ===
=== Настройка сервера NFS ===
==== Синтаксис /etc/exports ====
Все настройки NFS-сервера хранятся в файле {{path|/etc/exports}}.


1. В файле /etc/exports указываются каталоги, которые мы экспортируем (разрешаем монтировать с других машин) (см. man exports).
Файл {{path|/etc/exports}} определяет, какие файловые системы экспортируются на удаленные узлы, и определяет параметры. Для этого файла действуют следующие синтаксические правила:
* пустые строки игнорируются;
* комментарии начинаются с символа решётки (#);
* для продолжения записи на новой строке можно использовать символ обратной косой черты (\);
* каждая экспортируемая ФС должна находиться на отдельной строке;
* списки авторизованных узлов, размещаемые после экспортированной файловой системы, должны быть разделены пробелами;
* параметры для каждого из узлов должны быть помещены в скобки непосредственно после идентификатора узла, без пробелов, разделяющих узел и первую скобку;
* если название экспортируемого каталога содержит пробелы, его следует заключить в двойные кавычки.
 
Каждая запись экспортированной файловой системы имеет следующую структуру:
export host(options)
Где:
* export — путь к экспортируемому каталогу;
* host — узел или сеть, в которую передается экспорт;
* options — параметры, которые будут использоваться для узла.
 
Можно указать несколько узлов, а также конкретные параметры для каждого узла. Для этого следует перечислить их в одной строке в виде списка, разделённого пробелами, где за каждым именем узла следуют соответствующие параметры (в скобках), например:
/mysharedir 192.168.0.100/24(no_subtree_check,rw)  192.168.10.0/24(no_subtree_check,ro)
 
Некоторые опции:
*rw/ro — установка разрешения доступа к ресурсу (чтение запись/только чтение);
*no_subtree_check/subtree_check — если экспортируется подкаталог файловой системы, но не вся файловая система, то с опцией subtree_check сервер, проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Если экспортируется вся файловая система, запрет проверки подкаталогов (no_subtree_check) может увеличить скорость передачи;
*sync/async — синхронный/асинхронный режим доступа. Опция sync указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность;
*wdelay/no_wdelay — установка задержки записи на диск (установка задержки/отключение задержки, этот параметр не действует при включенной опции async);
*hide/nohide — не отображать/отображать нелокальные ресурсы (например, примонтированые с помощью mount –bind);
*all_squash/no_all_squash — подмена запросов от ВСЕХ пользователей на анонимного uid/gid (либо на пользователя, заданного в параметре anonuid/anongid)/запрет подмены uid/gid;
*anonuid=UID и anongid=GID — (явная) установка UID/GID для анонимного пользователя (может быть полезно, если какой либо каталог экспортируется для конкретного пользователя, заведенного в системе).
 
{{note|Единственный параметр, который следует обязательно указать — это ''no_subtree_check'' или ''subtree_check''.}}
 
Имя узла (узлов) может задаваться в следующей форме:
* один узел — FQDN-имя (которое сможет разрешить сервер), имя узла (которое сможет разрешить сервер) или IP-адрес;
* IP-сеть — используется запись вида a.b.c.d/z, где a.b.c.d — адрес сети, а z — число бит в маске сети (например, 192.168.0.0/24). Также допускается формат a.b.c.d/netmask, где a.b.c.d — сеть, а netmask — маска сети (например, 192.168.100.8/255.255.255.0);
* набор узлов — узлы определяются знаками подстановки (символ * или ?) или могут содержать списки классов символов в [квадратных скобках]. Знаки подстановки не должны использоваться в IP-адресах;
* сетевые группы — задаются в виде @group-name, где group-name — имя сетевой группы NIS;
* анонимный узел — задается одним символом * и будет соответствовать всем клиентам.
 
Подробнее об опциях см. {{cmd|man exports}}.
 
Для применения изменений, внесённых в файл {{path|/etc/exports}} необходимо выполнить команду:
<syntaxhighlight lang="bash"># exportfs -ra</syntaxhighlight>
или перезапустить NFS-сервер:
<syntaxhighlight lang="bash"># systemctl restart nfs</syntaxhighlight>
 
====  Синтаксис для экспорта через NFS 3 ====


По соображениям безопасности не рекомендуется экспортировать каталоги по протоколу NFS 3.
По соображениям безопасности не рекомендуется экспортировать каталоги по протоколу NFS 3.
Рекомендуется использовать NFS 4.
Рекомендуется использовать NFS 4.
==== синтаксис для экспорта через NFS 3 ====


<pre>/mysharedir ipaddr1(rw)  ipaddr2(ro)</pre>
<pre>/mysharedir ipaddr1(rw)  ipaddr2(ro)</pre>
Например
Например:
<pre>/mysharedir 192.168.0.1/24(rw)</pre>
<pre>/mysharedir 192.168.0.1/24(rw)</pre>


В скобочках указываются дополнительные параметры:
В скобках указываются дополнительные параметры:
: rw — разрешены чтение и запись
* rw — разрешены чтение и запись;
: ro — разрешено только чтение
* ro — разрешено только чтение;
: no_root_squash — отключение ограничения прав root
* no_root_squash — отключение ограничения прав root;


По умолчанию пользователь root имеет на смонтированных ресурсах права пользователя nobody.
По умолчанию пользователь root имеет на смонтированных ресурсах права пользователя nobody.
Строка 38: Строка 81:
Подробную информацию о формате файла можно посмотреть командой <tt>man exports</tt>
Подробную информацию о формате файла можно посмотреть командой <tt>man exports</tt>


==== синтаксис для экспорта через NFS 4 ====
==== Синтаксис для экспорта через NFS 4 ====  
экспортируемые по NFS 4 каталоги имеют тот же синтаксис, что и через NFS3,
экспортируемые по NFS 4 каталоги имеют тот же синтаксис, что и через NFS3,
за исключением того, что все они должны быть в одном подкаталоге (chroot для безопасности).
за исключением того, что все они должны быть в одном подкаталоге (chroot для безопасности).
Строка 46: Строка 89:
и прописать в /etc/exports:
и прописать в /etc/exports:
отличие от NFS3 в том, что нужно будет добавить nohide к mysharedir и явно  
отличие от NFS3 в том, что нужно будет добавить nohide к mysharedir и явно  
обьявить корневой каталог экспорта с fsid=0.
объявить корневой каталог экспорта с fsid=0.
  /exports        192.168.0.1/24(fsid=0,ro,insecure,all_squash)
  /exports        192.168.0.1/24(fsid=0,ro,insecure,all_squash)
  /exports/mysharedir    192.168.0.1/24(nohide,ro,insecure,all_squash)
  /exports/mysharedir    192.168.0.1/24(nohide,ro,insecure,all_squash)


=== настройка nfs на устаревших системах, до p8 ===
=== Настройка nfs на устаревших системах, до p8 ===
 
Дополнительная настройка:


==== Настройка portmap (для p5 и ранее, устарело с p6) ====
==== Настройка portmap (для p5 и ранее, устарело с p6) ====
Строка 61: Строка 102:
Однако при этом не будет работать монтирование каталогов по nfs3.
Однако при этом не будет работать монтирование каталогов по nfs3.
Если это действительно нужно, то  
Если это действительно нужно, то  
нехотя коментируем в файле /etc/sysconfig/portmap строку PORTMAP_ARGS="-l",
нехотя комментируем в файле /etc/sysconfig/portmap строку PORTMAP_ARGS="-l",
прописываем в {{path|/etc/hosts.allow}} сеть, в которую раздаем:
прописываем в {{path|/etc/hosts.allow}} сеть, в которую раздаем:
  portmap mountd nfsd statd lockd rquotad : 192.168.ххх.0/255.255.255.0
  portmap mountd nfsd statd lockd rquotad : 192.168.ххх.0/255.255.255.0
Строка 71: Строка 112:
и использования nfs3.
и использования nfs3.


==== Настройка rpcbind, для шестой платформы====
==== Настройка rpcbind для шестой платформы====
Начиная с шестой платформы portmap заменен на rpcbind. Настраивается аналогично portmap. Конфигурационный файл /etc/sysconfig/rpcbind, для использования nfs 3, закомментировать:
Начиная с шестой платформы portmap заменен на rpcbind. Настраивается аналогично portmap. Конфигурационный файл /etc/sysconfig/rpcbind, для использования nfs 3, нужно закомментировать в этом файле строчку CONTROL_ARGS="-l"; это можно сделать не вручную, а просто выполнив команду:
<syntaxhighlight lang="bash"># control rpcbind server</syntaxhighlight>
=== Настройка kerberos ===


control rpcbind server
См. [[NFS_сервер_с_Kerberos_авторизацией]]


==== Настройка kerberos ====
=== Запуск NFS-сервера ===


Для rw каталогов желательно настроить kerberos.
==== Запуск NFS под [[systemd]] ====
 
Запустить NFS-сервер и включить его по умолчанию:
TODO
<syntaxhighlight lang="bash"># systemctl enable --now nfs.service
 
# systemctl status nfs.service</syntaxhighlight>
Для read-only можно просто закоментировать в файле /etc/sysconfig/nfs строку
SECURE_NFS=yes
 
 
=== Запуск NFS под systemd ===
 
<pre># service nfs start</pre>
<pre>systemctl status nfs.service</pre>


Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим.
Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим.
Дополнительно можно запустить команду <tt>exportfs</tt>, которая выведет текущие настройки на данный момент.
Дополнительно можно запустить команду <tt>exportfs</tt>, которая выведет текущие настройки на данный момент.
В случае нормальной работы она должна вывести на экран записи из файла /etc/exports
В случае нормальной работы она должна вывести на экран записи из файла {{path|/etc/exports}}:
 
<syntaxhighlight lang="bash"># exportfs
Для запуска сервисов при старте системы:
/home        192.168.0.0/24
<pre>systemctl enable nfs.service</pre>
/exports      192.168.0.0/2</syntaxhighlight>
 
=== Запуск NFS на устаревших системах ===
 
1. После настройки файла необходимо запустить сервис rpcbind (для p6,portmap для p5) командой:
(p5)# service portmap start
(p6)# service rpcbind start


2. Запустить непосредственно nfs-server командой:
==== Запуск NFS на устаревших системах до [[p8]] ====
# service nfs start


3. Запустить сервис блокировок командой:
# После настройки файла необходимо запустить:
# service nfslock start
#* сервис rpcbind для p6:
#*: <syntaxhighlight lang="bash"># service rpcbind start</syntaxhighlight>
#* сервис portmap для p5:
#*:<syntaxhighlight lang="bash"># service portmap start</syntaxhighlight>
# Запустить непосредственно NFS-сервер:
#:<syntaxhighlight lang="bash"># service nfs start</syntaxhighlight>
#Запустить сервис блокировок:
#:<syntaxhighlight lang="bash"># service nfslock start</syntaxhighlight>


Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим.
Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим.
Дополнительно можно запустить команду <tt>exportfs</tt>, которая выведет текущие настройки на данный момент.
Дополнительно можно запустить команду <tt>exportfs</tt>, которая выведет текущие настройки на данный момент.
В случае нормальной работы она должна вывести на экран записи из файла /etc/exports
В случае нормальной работы она должна вывести на экран записи из файла {{path|/etc/exports}}


Для запуска сервисов при старте системы:
Для запуска сервисов при старте системы:
<pre>chkconfig rpcbind on (chkconfig portmap on)
<syntaxhighlight lang="bash"># chkconfig rpcbind on (chkconfig portmap on)
chkconfig nfs on
# chkconfig nfs on
chkconfig nfslock on</pre>
# chkconfig nfslock on</syntaxhighlight>


=== проблемы с запуском nfs на p8 ===
==== Проблемы с запуском nfs на [[p8]] ====


Симптомы:
Симптомы:


# systemctl start nfs.service   
<syntaxhighlight lang="bash"># systemctl start nfs.service   
  Job for nfs-server.service failed because the control process exited with error code.
  Job for nfs-server.service failed because the control process exited with error code.
  See "systemctl status nfs-server.service" and "journalctl -xe" for details.
  See "systemctl status nfs-server.service" and "journalctl -xe" for details.


#systemctl status nfs-server.service
# systemctl status nfs-server.service
  ● nfs-server.service - NFS server and services
  ● nfs-server.service - NFS server and services
   Active: failed (Result: exit-code) since Сб 2016-11-12 14:10:48 EET; 3s ago
   Active: failed (Result: exit-code) since Сб 2016-11-12 14:10:48 EET; 3s ago
Строка 137: Строка 173:
  ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Main process exited, status=1/FAILURE
  ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Main process exited, status=1/FAILURE
  ноя 12 14:10:48 birthday.localdomain systemd[1]: Failed to start NFS server and services.
  ноя 12 14:10:48 birthday.localdomain systemd[1]: Failed to start NFS server and services.
  ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Unit entered failed state.
  ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Unit entered failed state.</syntaxhighlight>


отлаживаем rpc.nfsd (опция -d):
отлаживаем rpc.nfsd (опция -d):


# rpc.nfsd -d 8
<syntaxhighlight lang="bash"># rpc.nfsd -d 8
  rpc.nfsd: knfsd is currently down
  rpc.nfsd: knfsd is currently down
  rpc.nfsd: Writing version string to kernel: -2 +3 +4  
  rpc.nfsd: Writing version string to kernel: -2 +3 +4  
Строка 148: Строка 184:
  rpc.nfsd: Created AF_INET6 TCP socket.
  rpc.nfsd: Created AF_INET6 TCP socket.
  rpc.nfsd: writing fd to kernel failed: errno 97 (Address family not supported by protocol)
  rpc.nfsd: writing fd to kernel failed: errno 97 (Address family not supported by protocol)
  rpc.nfsd: unable to set any sockets for nfsd
  rpc.nfsd: unable to set any sockets for nfsd</syntaxhighlight>


Оказывается, включен ipv6 и включен протокол v.3 (см. version string to kernel: -2 +3 +4)
Оказывается, включен ipv6 и включен протокол v.3 (см. version string to kernel: -2 +3 +4)
который не получается повесить на ipv6 адрес.
который не получается повесить на ipv6 адрес.


* Решение1 (если nfs3 не нужен): выключить v.3 (опция -N3) в $NFSD_OPTIONS: прописываем в {{path|/etc/sysconfig/nfs}}
* Решение 1 (если nfs3 не нужен): выключить v.3 (опция -N3) в $NFSD_OPTIONS: прописываем в {{path|/etc/sysconfig/nfs}}
<source lang="bash">
<syntaxhighlight lang="text">NFSD_OPTIONS=-N3</syntaxhighlight>
NFSD_OPTIONS=-N3
</source>
после чего nfs нормально запускается.
после чего nfs нормально запускается.


* Решение2 (если нужен nfs3, не тестировал):  
* Решение 2 (если нужен nfs3, не тестировал):  
в /etc/netconfig закомментировать
в /etc/netconfig закомментировать:
#udp6      tpi_clts      v    inet6    udp    -      -
<syntaxhighlight lang="text">#udp6      tpi_clts      v    inet6    udp    -      -
#tcp6      tpi_cots_ord  v    inet6    tcp    -      -
#tcp6      tpi_cots_ord  v    inet6    tcp    -      -</syntaxhighlight>
см. [http://mindref.blogspot.com/2010/12/debian-disable-ipv6_22.html How to disable ipv6 in Debian]
см. [http://mindref.blogspot.com/2010/12/debian-disable-ipv6_22.html How to disable ipv6 in Debian]


=== Использование NFS ===
== Использование NFS ==
Подключение к nfs-серверу можно производить вручную, а можно настроить автоматическое подключение при загрузке.
Подключение к NFS-серверу можно производить вручную, а можно настроить автоматическое подключение при загрузке.


Допустим машина где запущен nfs-server называется server, и нам необходимо смонтировать с сервера каталог /myshare
===  Монтирование NFS-ресурса ===
Тогда, для ручного способа достаточно (из под пользователя root) выполнить команду:
<pre>mount -t nfs4 -o proto=tcp,port=2049 server:/myshare /mnt/myshare</pre>
или (NFS3)
<pre>mount -t nfs server:/myshare /mnt/myshare</pre>


где,
Команда монтирования:
/mnt/myshare — локальный каталог куда монтируется удалённый каталог.
<syntaxhighlight lang="bash"># mount -t nfs -o <опции> <сервер>:/remote/export /local/directory</syntaxhighlight>
Где:
*<опции> — разделённый запятыми список опций;
*<сервер> — IP-адрес или имя NFS-сервера;
/remote/export — каталог, экспортируемый с сервера (каталог, который будет примонтирован);
/local/directory — локальный каталог (каталог, в который будет примонтирован каталог, экспортируемый с сервера).


<s>Внимание: так nfs4 монтироваться не будет! ''myshare'' стоит убрать. Подробнее про nfs4 тут: http://www.altlinux.org/NFSv4#Монтирование клиентом</s>(замечание неверно/устарело,  с указанием каталога все монтируется под p8, p9, p10).
Список доступных ресурсов можно проверить, выполнив команду:
<syntaxhighlight lang="bash"># showmount -e 192.168.0.199
Export list for 192.168.0.199:
/exports 192.168.0.0/26
/home    192.168.0.0/24</syntaxhighlight>


Для автоматического монтирования к nfs-серверу при загрузке необходимо добавить следующую строку в файл <tt>/etc/fstab</tt>:
{{Note|При запуске данной команды можно получить ошибку:
<pre>server:/myshare /mnt/myshare   nfs4   proto=tcp,port=2049,intr,soft,lock,_netdev 0 0</pre>
<syntaxhighlight lang="bash"># showmount -e 192.168.0.199
или (NFS3)
clnt_create: RPC: Unable to receive</syntaxhighlight>
<pre>server:/myshare /mnt/myshare   nfs   intr,soft,lock,_netdev</pre>
Это может происходить потому что по умолчанию rpcbind слушает только локальные запросы:
<syntaxhighlight lang="bash"># ss -tnlup | grep rpcbind
udp   UNCONN 0      0          127.0.0.1:111        0.0.0.0:*    users:(("rpcbind",pid=4248,fd=6))     
udp   UNCONN 0      0              [::1]:111          [::]:*    users:(("rpcbind",pid=4248,fd=8))     
tcp   LISTEN 0      4096      127.0.0.1:111        0.0.0.0:*    users:(("rpcbind",pid=4248,fd=7))     
tcp  LISTEN 0      4096          [::1]:111          [::]:*    users:(("rpcbind",pid=4248,fd=9))</syntaxhighlight>
Разрешить rpcbind прослушивать входящие соединения из сети:
<syntaxhighlight lang="bash"># control rpcbind server
# systemctl restart rpcbind.service</syntaxhighlight>
<syntaxhighlight lang="bash"># ss -tnlup | grep rpcbind
udp   UNCONN 0      0            0.0.0.0:111        0.0.0.0:*    users:(("rpcbind",pid=4130,fd=6))     
udp   UNCONN 0      0              [::]:111          [::]:*    users:(("rpcbind",pid=4130,fd=8))     
tcp  LISTEN 0      4096        0.0.0.0:111        0.0.0.0:*    users:(("rpcbind",pid=4130,fd=7))     
tcp  LISTEN 0      4096            [::]:111          [::]:*    users:(("rpcbind",pid=4130,fd=9))</syntaxhighlight>}}


где,
Пример команды монтирования (каталог {{path|/mnt/nf}} должен существовать:
intr — позволяет прервать процесс при необходимости
<syntaxhighlight lang="bash"># mount -t nfs -o nfsvers=4  192.168.0.199:/home /mnt/nfs</syntaxhighlight>
soft — предотвращает от зависания в случае недоступности удалённой машины.
 
Для проверки успешности монтирования можно использовать команду:
<syntaxhighlight lang="bash">#
mount | grep nfs
...
192.168.0.199:/home on /mnt/nfs type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.177,local_lock=none,addr=192.168.0.199)</syntaxhighlight>
Команда выдаст строку (строки) с информацией о примонтированном ресурсе (ресурсах).
 
=== Монтирование с записью в fstab ===
Для автоматического монтирования к NFS-серверу при загрузке необходимо добавить следующую строку в файл {{path|/etc/fstab}}:
<syntaxhighlight lang="text">192.168.0.199:/home  /mnt/nfs  nfs  intr,soft,nolock,_netdev,x-systemd.automount    0 0</syntaxhighlight>
где:
*intr — позволяет прервать процесс при необходимости;
*soft — предотвращает от зависания в случае недоступности удалённой машины.


Кроме того, стоит убедиться, что сервис netfs запускается при старте системы.
Кроме того, стоит убедиться, что сервис netfs запускается при старте системы.


Прежде чем изменять /etc/fstab, попробуйте смонтировать вручную и убедитесь, что всё работает.
Прежде чем изменять {{path|/etc/fstab}}, попробуйте смонтировать вручную и убедитесь, что всё работает.


=== Автомонтирование ===
=== Автомонтирование ===
Осуществляется при помощи automount, autofs или subfs.  
Осуществляется при помощи automount, [[autofs]] или subfs.  
 
==== autofs ====
 
Данный способ монтирования позволяет автоматически монтировать папку после обращения к ней в ФМ (к примеру, через закладки) или в терминале и автоматически отмонтировать при отсутствии активности.
Для реализации данного способа необходимо:
# Установить пакет {{pkgL|autofs}} (если он ещё не установлен):
#: <syntaxhighlight lang="bash"># apt-get install autofs</syntaxhighlight>
# Для настройки autofs в файл {{path|/etc/auto.master}} необходимо добавить строку:
#: <syntaxhighlight lang="text">/mnt/nfs /etc/auto.nfs -t 60 -browse</syntaxhighlight>
#: Здесь {{path|/mnt/nfs}} — каталог, в котором будут подключаться сетевые файловые системы; {{path|/etc/auto.smb}} — файл конфигурации или скрипт (определяется правами на исполнение указанного файла); 60 — таймаут (в секундах) подключения при отсутствии обращения; browse — создать пустой каталог для точки монтирования, чтобы предотвратить тайм-ауты, если к сетевому ресурсу невозможно подключиться.
# Создать каталог {{path|/mnt/nfs}}:
#: <syntaxhighlight lang="bash"># mkdir /mnt/nfs</syntaxhighlight>
# Создать файл {{path|/etc/auto.nfs}}, в который добавить строку:
#: <syntaxhighlight lang="text">public1  -fstype=nfs,rw 192.168.0.199:/home/</syntaxhighlight>
#:где:
#* -rw,soft,intr,rsize=8192,wsize=8192 – параметры монтирования;
#* public1 – каталог, который будет создаваться в каталоге /mnt/nfs при монтировании;
#*192.168.0.199:/home/– IP-адрес и общая папка сервера.
 
{{Note|Подключаемый ресурс должен присутствовать в выводе команды:
<syntaxhighlight lang="bash"># showmount -e 192.168.0.199
Export list for 192.168.0.199:
/exports 192.168.0.0/24
/home    192.168.0.0/24</syntaxhighlight>}}


==== autofs + avahi ====
==== autofs + avahi ====
Строка 228: Строка 317:
который не поддерживается {{pkg|autofs-5.1.5-alt1}} из p9,
который не поддерживается {{pkg|autofs-5.1.5-alt1}} из p9,
что приведет к неработоспособности автомонтирования NFS.
что приведет к неработоспособности автомонтирования NFS.
До исправления можно отключить ipv6
До исправления autofs можно отключить ipv6
  sysctl -o net.ipv6.conf.all.disable_ipv6=1
  sysctl -o net.ipv6.conf.all.disable_ipv6=1
  sudo service nfs restart
  sudo service nfs restart
проверяем и если заработало, то вносим изменения на постоянной основе
проверяем и если заработало, то вносим изменения на постоянной основе
либо собрать в бранчи autofs с поддержкой ipv6
либо собрать в бранчи autofs с поддержкой ipv6.
патчи см. [https://bugzilla.redhat.com/show_bug.cgi?id=711844].
Патчи для старых версий см. [https://bugzilla.redhat.com/show_bug.cgi?id=711844 RH#711844].
 
==== systemd ====
Есть возможность использовать systemd, чтобы выполнять авто-монтирование конкретного ресурса при загрузке. Этот вариант имеет одно преимущество по сравнению с монтированием через fstab: если NFS-сервер по какой-либо причине будет недоступен, то клиент всё равно загрузится без ошибок.
 
Создаём на клиенте файл {{path|/lib/systemd/system/nfs-shared.service}} следующего содержания:
 
<syntaxhighlight lang="ini">
[Unit]
Description=Mount NFS share
Requires=network-online.target
After=network-online.target
 
 
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/mount 192.168.1.1:/home/data /mnt/shared -o fsc,hard
ExecStop=/bin/umount /mnt/shared
TimeoutStopSec=5
 
 
[Install]
WantedBy=multi-user.target
</syntaxhighlight>
 
Не забываем создать каталог, в которую будет смонтирован NFS-ресурс:
<syntaxhighlight lang="bash"># mkdir -p /mnt/shared</syntaxhighlight>
 
После этого включаем сервис в автозагрузку и запускаем его:
<syntaxhighlight lang="bash"># systemctl enable --now nfs-shared</syntaxhighlight>
 
Проверяем, смонтировался ли ресурс:
<syntaxhighlight lang="bash">$ ls /mnt/shared</syntaxhighlight>
 
Последняя команда должна выдать содержимое NFS-ресурса.


==== subfs (для p5 и ранее, устарело) ====
==== subfs (для p5 и ранее, устарело) ====
Строка 241: Строка 365:
<pre>server:/var/ftp/pub /pub subfs fs=nfs,program=/sbin/net-submountd,interval=5,soft,_netdev 0 0</pre>
<pre>server:/var/ftp/pub /pub subfs fs=nfs,program=/sbin/net-submountd,interval=5,soft,_netdev 0 0</pre>


=== Ссылки ===
== Ссылки ==
 
*[[NFS start|Данная статья простым языком]]
* [http://wiki.sisyphus.ru/net/nfs http://wiki.sisyphus.ru/net/nfs]
* [http://wiki.sisyphus.ru/net/nfs http://wiki.sisyphus.ru/net/nfs]
* [http://www.botik.ru/rented/rldp/www/ldp/nag-20/mountd.htm http://www.botik.ru/rented/rldp/www/ldp/nag-20/mountd.htm]
* [http://www.botik.ru/rented/rldp/www/ldp/nag-20/mountd.htm http://www.botik.ru/rented/rldp/www/ldp/nag-20/mountd.htm]

Текущая версия от 21:46, 13 марта 2024

Важной особенностью NFS является то, что она рассчитана на использование внутри безопасной сети, рабочим станциям в которой можно доверять, поскольку авторизация доступа к файлам, смонтированным на NFS осуществляется на основании идентификатора пользователя, а подлинность пользователя каждая машина в сети проверяет самостоятельно. Вытекающим отсюда требованием является то, что пользователь должен быть зарегистрирован и на клиенте и на сервере NFS и иметь там одно и то же входное имя (login) и идентификатор. Это достигается использованием централизованной аутентификации (например, с помощью PAM и сервера аутентификации или NIS).

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

  • nfs-server или unfs3 (в OpenVZ VE ядерный NFS-сервер не работает)
  • rpcbind (с шестой платформы; ранее нужен был portmap)
  • nfs-clients (содержит в себе nfslock)

В некоторых системах вместо nfs-server и nfs-clients имеется пакет nfs-utils.

Сервер NFS

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

Синтаксис /etc/exports

Все настройки NFS-сервера хранятся в файле /etc/exports.

Файл /etc/exports определяет, какие файловые системы экспортируются на удаленные узлы, и определяет параметры. Для этого файла действуют следующие синтаксические правила:

  • пустые строки игнорируются;
  • комментарии начинаются с символа решётки (#);
  • для продолжения записи на новой строке можно использовать символ обратной косой черты (\);
  • каждая экспортируемая ФС должна находиться на отдельной строке;
  • списки авторизованных узлов, размещаемые после экспортированной файловой системы, должны быть разделены пробелами;
  • параметры для каждого из узлов должны быть помещены в скобки непосредственно после идентификатора узла, без пробелов, разделяющих узел и первую скобку;
  • если название экспортируемого каталога содержит пробелы, его следует заключить в двойные кавычки.

Каждая запись экспортированной файловой системы имеет следующую структуру:

export host(options)

Где:

  • export — путь к экспортируемому каталогу;
  • host — узел или сеть, в которую передается экспорт;
  • options — параметры, которые будут использоваться для узла.

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

/mysharedir 192.168.0.100/24(no_subtree_check,rw)  192.168.10.0/24(no_subtree_check,ro)

Некоторые опции:

  • rw/ro — установка разрешения доступа к ресурсу (чтение запись/только чтение);
  • no_subtree_check/subtree_check — если экспортируется подкаталог файловой системы, но не вся файловая система, то с опцией subtree_check сервер, проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Если экспортируется вся файловая система, запрет проверки подкаталогов (no_subtree_check) может увеличить скорость передачи;
  • sync/async — синхронный/асинхронный режим доступа. Опция sync указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность;
  • wdelay/no_wdelay — установка задержки записи на диск (установка задержки/отключение задержки, этот параметр не действует при включенной опции async);
  • hide/nohide — не отображать/отображать нелокальные ресурсы (например, примонтированые с помощью mount –bind);
  • all_squash/no_all_squash — подмена запросов от ВСЕХ пользователей на анонимного uid/gid (либо на пользователя, заданного в параметре anonuid/anongid)/запрет подмены uid/gid;
  • anonuid=UID и anongid=GID — (явная) установка UID/GID для анонимного пользователя (может быть полезно, если какой либо каталог экспортируется для конкретного пользователя, заведенного в системе).
Примечание: Единственный параметр, который следует обязательно указать — это no_subtree_check или subtree_check.


Имя узла (узлов) может задаваться в следующей форме:

  • один узел — FQDN-имя (которое сможет разрешить сервер), имя узла (которое сможет разрешить сервер) или IP-адрес;
  • IP-сеть — используется запись вида a.b.c.d/z, где a.b.c.d — адрес сети, а z — число бит в маске сети (например, 192.168.0.0/24). Также допускается формат a.b.c.d/netmask, где a.b.c.d — сеть, а netmask — маска сети (например, 192.168.100.8/255.255.255.0);
  • набор узлов — узлы определяются знаками подстановки (символ * или ?) или могут содержать списки классов символов в [квадратных скобках]. Знаки подстановки не должны использоваться в IP-адресах;
  • сетевые группы — задаются в виде @group-name, где group-name — имя сетевой группы NIS;
  • анонимный узел — задается одним символом * и будет соответствовать всем клиентам.

Подробнее об опциях см. man exports.

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

# exportfs -ra

или перезапустить NFS-сервер:

# systemctl restart nfs

Синтаксис для экспорта через NFS 3

По соображениям безопасности не рекомендуется экспортировать каталоги по протоколу NFS 3. Рекомендуется использовать NFS 4.

/mysharedir ipaddr1(rw)  ipaddr2(ro)

Например:

/mysharedir 192.168.0.1/24(rw)

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

  • rw — разрешены чтение и запись;
  • ro — разрешено только чтение;
  • no_root_squash — отключение ограничения прав root;

По умолчанию пользователь root имеет на смонтированных ресурсах права пользователя nobody.

Можно указывать разрешение экспорта сразу для подсети. Например разрешение для машин из подсети 192.168.0.X строка будет выглядеть так:

/mysharedir 192.168.0.1/24(rw)

Подробную информацию о формате файла можно посмотреть командой man exports

Синтаксис для экспорта через NFS 4

экспортируемые по NFS 4 каталоги имеют тот же синтаксис, что и через NFS3, за исключением того, что все они должны быть в одном подкаталоге (chroot для безопасности). Пусть это каталог /exports. Тогда необходимо подмонтировать остальные экспортированные каталоги внутрь /exports с помощью mount --bind (mount --bind /mysharedir /exports/mysharedir), прописать в fstab:

/mysharedir     /exports/mysharedir   none    bind  0  0

и прописать в /etc/exports: отличие от NFS3 в том, что нужно будет добавить nohide к mysharedir и явно объявить корневой каталог экспорта с fsid=0.

/exports        192.168.0.1/24(fsid=0,ro,insecure,all_squash)
/exports/mysharedir    192.168.0.1/24(nohide,ro,insecure,all_squash)

Настройка nfs на устаревших системах, до p8

Настройка portmap (для p5 и ранее, устарело с p6)

Для работы nfs необходим сервис portmap. По умолчанию, сервис portmap запущен только на loopback (lo) интерфейсе в целях безопасности. Этого достаточно для раздачи сетевых ресурсов через nfs4.

Однако при этом не будет работать монтирование каталогов по nfs3. Если это действительно нужно, то нехотя комментируем в файле /etc/sysconfig/portmap строку PORTMAP_ARGS="-l", прописываем в /etc/hosts.allow сеть, в которую раздаем:

portmap mountd nfsd statd lockd rquotad : 192.168.ххх.0/255.255.255.0

и в /etc/hosts.deny:

portmap mountd nfsd statd lockd rquotad : ALL

после этого еще раз вдумчиво читаем http://tldp.org/HOWTO/NFS-HOWTO/security.html. и глубоко размышляем над глубокой небезопасностью запуска portmap без PORTMAP_ARGS="-l" и использования nfs3.

Настройка rpcbind для шестой платформы

Начиная с шестой платформы portmap заменен на rpcbind. Настраивается аналогично portmap. Конфигурационный файл /etc/sysconfig/rpcbind, для использования nfs 3, нужно закомментировать в этом файле строчку CONTROL_ARGS="-l"; это можно сделать не вручную, а просто выполнив команду:

# control rpcbind server

Настройка kerberos

См. NFS_сервер_с_Kerberos_авторизацией

Запуск NFS-сервера

Запуск NFS под systemd

Запустить NFS-сервер и включить его по умолчанию:

# systemctl enable --now nfs.service
# systemctl status nfs.service

Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим. Дополнительно можно запустить команду exportfs, которая выведет текущие настройки на данный момент. В случае нормальной работы она должна вывести на экран записи из файла /etc/exports:

# exportfs
/home         	192.168.0.0/24
/exports      	192.168.0.0/2

Запуск NFS на устаревших системах до p8

  1. После настройки файла необходимо запустить:
    • сервис rpcbind для p6:
      # service rpcbind start
      
    • сервис portmap для p5:
      # service portmap start
      
  2. Запустить непосредственно NFS-сервер:
    # service nfs start
    
  3. Запустить сервис блокировок:
    # service nfslock start
    

Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим. Дополнительно можно запустить команду exportfs, которая выведет текущие настройки на данный момент. В случае нормальной работы она должна вывести на экран записи из файла /etc/exports

Для запуска сервисов при старте системы:

# chkconfig rpcbind on (chkconfig portmap on)
# chkconfig nfs on
# chkconfig nfslock on

Проблемы с запуском nfs на p8

Симптомы:

# systemctl start nfs.service   
 Job for nfs-server.service failed because the control process exited with error code.
 See "systemctl status nfs-server.service" and "journalctl -xe" for details.

# systemctl status nfs-server.service
 ● nfs-server.service - NFS server and services
   Active: failed (Result: exit-code) since Сб 2016-11-12 14:10:48 EET; 3s ago
  Process: 4812 ExecStart=/usr/sbin/rpc.nfsd $NFSD_OPTIONS $NFSDCOUNT (code=exited, status=1/FAILURE)
  Process: 4810 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
  Main PID: 4812 (code=exited, status=1/FAILURE)
 ноя 12 14:10:48 birthday.localdomain systemd[1]: Starting NFS server and services...
 ноя 12 14:10:48 birthday.localdomain rpc.nfsd[4812]: rpc.nfsd: unable to set any sockets for nfsd
 ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Main process exited, status=1/FAILURE
 ноя 12 14:10:48 birthday.localdomain systemd[1]: Failed to start NFS server and services.
 ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Unit entered failed state.

отлаживаем rpc.nfsd (опция -d):

# rpc.nfsd -d 8
 rpc.nfsd: knfsd is currently down
 rpc.nfsd: Writing version string to kernel: -2 +3 +4 
 rpc.nfsd: Created AF_INET TCP socket.
 rpc.nfsd: Created AF_INET UDP socket.
 rpc.nfsd: Created AF_INET6 TCP socket.
 rpc.nfsd: writing fd to kernel failed: errno 97 (Address family not supported by protocol)
 rpc.nfsd: unable to set any sockets for nfsd

Оказывается, включен ipv6 и включен протокол v.3 (см. version string to kernel: -2 +3 +4) который не получается повесить на ipv6 адрес.

  • Решение 1 (если nfs3 не нужен): выключить v.3 (опция -N3) в $NFSD_OPTIONS: прописываем в /etc/sysconfig/nfs
NFSD_OPTIONS=-N3

после чего nfs нормально запускается.

  • Решение 2 (если нужен nfs3, не тестировал):

в /etc/netconfig закомментировать:

#udp6       tpi_clts      v     inet6    udp     -       -
#tcp6       tpi_cots_ord  v     inet6    tcp     -       -

см. How to disable ipv6 in Debian

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

Подключение к NFS-серверу можно производить вручную, а можно настроить автоматическое подключение при загрузке.

Монтирование NFS-ресурса

Команда монтирования:

# mount -t nfs -o <опции> <сервер>:/remote/export /local/directory

Где:

  • <опции> — разделённый запятыми список опций;
  • <сервер> — IP-адрес или имя NFS-сервера;

/remote/export — каталог, экспортируемый с сервера (каталог, который будет примонтирован); /local/directory — локальный каталог (каталог, в который будет примонтирован каталог, экспортируемый с сервера).

Список доступных ресурсов можно проверить, выполнив команду:

# showmount -e 192.168.0.199
Export list for 192.168.0.199:
/exports 192.168.0.0/26
/home    192.168.0.0/24
Примечание: При запуске данной команды можно получить ошибку:
# showmount -e 192.168.0.199
clnt_create: RPC: Unable to receive

Это может происходить потому что по умолчанию rpcbind слушает только локальные запросы:

# ss  -tnlup | grep rpcbind
udp   UNCONN 0      0          127.0.0.1:111        0.0.0.0:*    users:(("rpcbind",pid=4248,fd=6))      
udp   UNCONN 0      0              [::1]:111           [::]:*    users:(("rpcbind",pid=4248,fd=8))      
tcp   LISTEN 0      4096       127.0.0.1:111        0.0.0.0:*    users:(("rpcbind",pid=4248,fd=7))      
tcp   LISTEN 0      4096           [::1]:111           [::]:*    users:(("rpcbind",pid=4248,fd=9))

Разрешить rpcbind прослушивать входящие соединения из сети:

# control rpcbind server
# systemctl restart rpcbind.service
# ss  -tnlup | grep rpcbind
udp   UNCONN 0      0            0.0.0.0:111        0.0.0.0:*    users:(("rpcbind",pid=4130,fd=6))      
udp   UNCONN 0      0               [::]:111           [::]:*    users:(("rpcbind",pid=4130,fd=8))      
tcp   LISTEN 0      4096         0.0.0.0:111        0.0.0.0:*    users:(("rpcbind",pid=4130,fd=7))      
tcp   LISTEN 0      4096            [::]:111           [::]:*    users:(("rpcbind",pid=4130,fd=9))


Пример команды монтирования (каталог /mnt/nf должен существовать:

# mount -t nfs -o nfsvers=4  192.168.0.199:/home /mnt/nfs

Для проверки успешности монтирования можно использовать команду:

#
mount | grep nfs
...
192.168.0.199:/home on /mnt/nfs type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.177,local_lock=none,addr=192.168.0.199)

Команда выдаст строку (строки) с информацией о примонтированном ресурсе (ресурсах).

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

Для автоматического монтирования к NFS-серверу при загрузке необходимо добавить следующую строку в файл /etc/fstab:

192.168.0.199:/home  /mnt/nfs   nfs   intr,soft,nolock,_netdev,x-systemd.automount    0 0

где:

  • intr — позволяет прервать процесс при необходимости;
  • soft — предотвращает от зависания в случае недоступности удалённой машины.

Кроме того, стоит убедиться, что сервис netfs запускается при старте системы.

Прежде чем изменять /etc/fstab, попробуйте смонтировать вручную и убедитесь, что всё работает.

Автомонтирование

Осуществляется при помощи automount, autofs или subfs.

autofs

Данный способ монтирования позволяет автоматически монтировать папку после обращения к ней в ФМ (к примеру, через закладки) или в терминале и автоматически отмонтировать при отсутствии активности. Для реализации данного способа необходимо:

  1. Установить пакет autofs (если он ещё не установлен):
    # apt-get install autofs
    
  2. Для настройки autofs в файл /etc/auto.master необходимо добавить строку:
    /mnt/nfs /etc/auto.nfs -t 60 -browse
    
    Здесь /mnt/nfs — каталог, в котором будут подключаться сетевые файловые системы; /etc/auto.smb — файл конфигурации или скрипт (определяется правами на исполнение указанного файла); 60 — таймаут (в секундах) подключения при отсутствии обращения; browse — создать пустой каталог для точки монтирования, чтобы предотвратить тайм-ауты, если к сетевому ресурсу невозможно подключиться.
  3. Создать каталог /mnt/nfs:
    # mkdir /mnt/nfs
    
  4. Создать файл /etc/auto.nfs, в который добавить строку:
    public1  -fstype=nfs,rw 192.168.0.199:/home/
    
    где:
    • -rw,soft,intr,rsize=8192,wsize=8192 – параметры монтирования;
    • public1 – каталог, который будет создаваться в каталоге /mnt/nfs при монтировании;
    • 192.168.0.199:/home/– IP-адрес и общая папка сервера.
Примечание: Подключаемый ресурс должен присутствовать в выводе команды:
# showmount -e 192.168.0.199
Export list for 192.168.0.199:
/exports 192.168.0.0/24
/home    192.168.0.0/24


autofs + avahi

Использование avahi. Установите пакет avahi-service-nfs или вручную создайте на сервере файл /etc/avahi/services/nfs.service, используется nfs4:

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
       <type>_nfs._tcp</type>
       <port>2049</port>
</service>
</service-group>

и запустите на сервере nfs сервис avahi-daemon. Проверьте с машин-клиентов, что сервер nfs виден с этих машин с помощью команды

avahi-browse -tkrp _nfs._tcp

Установите на машины-клиенты autofs. С настройками по умолчанию, ресурсы nfs будут монтироваться как /mnt/net/servername/netshare.

Для домашней локальной сети, когда nfs раздается не с сервера, а с другой рабочей станции, которую могут выключить в любой момент, рекомендуется прописывать у клиентов в /etc/sysconfig/autofs timeout поменьше (например, 5 сек):

OPTIONS="-t5"

autofs + avahi, проблемы на p8 и p9

при включенном ipv6 команда avahi-browse -tkrp _nfs._tcp кроме IPv4 _nfs сервиса

=;eth0;IPv4;hostname;_nfs._tcp;local;hostname.local;192.168.1.xxx;2049;

выдаст и IPv6 _nfs сервис

=;eth0;IPv6;hostname;_nfs._tcp;local;hostname.local;fe80::xxxx:xxxx:xxxx:xxxx;2049;

который не поддерживается autofs-5.1.5-alt1 из p9, что приведет к неработоспособности автомонтирования NFS. До исправления autofs можно отключить ipv6

sysctl -o net.ipv6.conf.all.disable_ipv6=1
sudo service nfs restart

проверяем и если заработало, то вносим изменения на постоянной основе либо собрать в бранчи autofs с поддержкой ipv6. Патчи для старых версий см. RH#711844.

systemd

Есть возможность использовать systemd, чтобы выполнять авто-монтирование конкретного ресурса при загрузке. Этот вариант имеет одно преимущество по сравнению с монтированием через fstab: если NFS-сервер по какой-либо причине будет недоступен, то клиент всё равно загрузится без ошибок.

Создаём на клиенте файл /lib/systemd/system/nfs-shared.service следующего содержания:

[Unit]
Description=Mount NFS share
Requires=network-online.target
After=network-online.target


[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/mount 192.168.1.1:/home/data /mnt/shared -o fsc,hard
ExecStop=/bin/umount /mnt/shared
TimeoutStopSec=5


[Install]
WantedBy=multi-user.target

Не забываем создать каталог, в которую будет смонтирован NFS-ресурс:

# mkdir -p /mnt/shared

После этого включаем сервис в автозагрузку и запускаем его:

# systemctl enable --now nfs-shared

Проверяем, смонтировался ли ресурс:

$ ls /mnt/shared

Последняя команда должна выдать содержимое NFS-ресурса.

subfs (для p5 и ранее, устарело)

Рецепт mike@ для subfs (фрагмент /etc/fstab), NFS4

server:/var/ftp/pub /pub subfs fs=nfs4,program=/sbin/net-submountd,interval=5,proto=tcp,port=2049,soft,_netdev 0 0

или NFS3

server:/var/ftp/pub /pub subfs fs=nfs,program=/sbin/net-submountd,interval=5,soft,_netdev 0 0

Ссылки