NFS на Linux

В этой статье разбираемся с NFS сервером на LInux. Установим NFS сервер на Debian 13, создадим общий каталог и примонтируем его на другом сервере по сети.

🕒 3 мин.

Что такое NFS

NFS (Network File System) — это сетевая файловая система с открытым исходным кодом для Linux, реализующая одноимённый протокол. Она позволяет Linux-серверу предоставлять общий доступ к файлам и директориям для клиентов по сети. Наиболее часто используется в среде Linux и Unix-подобных систем, тогда как для подключения из Windows требуется установка отдельного NFS-клиента. Продукт распространяется под лицензией GPL.

  • На серверной стороне устанавливается пакет — nfs-kernel-server.
  • Для монтирования, на клиентской стороне устанавливается — nfs-common.

NFS чаще всего используют для организации общего доступа к файлам в однородных Linux-средах, где важны высокая производительность, прозрачность прав доступа (UID/GID) и интеграция на уровне ядра. В отличие от Samba, NFS не предоставляет встроенных механизмов аутентификации пользователей и гибкого маппинга прав. NFS полагается на совпадение идентификаторов пользователей (UID/GID) на клиенте и сервере. Поэтому Samba остаётся предпочтительным выбором для гетерогенных сетей с клиентами Windows [Samba – отдельный файловый сервер], интеграции с Active Directory [Ввод Samba в домен] и сценариев, где требуется тонкая настройка доступа через конфигурацию шары.

Подготавливаем сервер

Устанавливаем необходимые пакеты:

sudo apt update && \
  sudo apt install nfs-kernel-server

Создаём каталог для шары:

sudo mkdir /srv/nfs

Настраиваем шару:

sudo nano /etc/exports

/srv/nfs 172.28.90.53(rw,sync,no_subtree_check,no_root_squash)
  • /srv/nfs — путь к локальной директории на сервере, которая предоставляется в общий доступ.
  • 172.28.90.53 — IP-адрес клиента, которому разрешено подключение. Можно указывать также подсети (например, 172.28.90.0/24).
  • rw — разрешает клиенту не только чтение, но и запись файлов в общую папку.
  • sync — требует синхронной записи данных на диск перед отправкой ответа клиенту. Это повышает надёжность и целостность данных, но может незначительно снизить производительность.
  • no_subtree_check — отключает проверку дерева каталогов. Ускоряет работу и предотвращает ошибки доступа при переименовании или перемещении файлов, если открытая директория является частью более общей экспортируемой структуры.
  • no_root_squash — позволяет пользователю root с клиентской машины иметь полные права root на сервере. Используем, если мы даём доступ для root пользователя на клиенте.

По желанию, вы можете использовать дополнительные опции:

  • ro — разрешает только чтение файлов.
  • root_squash — преобразует запросы от пользователя root на клиенте в запросы от анонимного пользователя (nobody:nogroup). Это настройка по умолчанию, повышающая безопасность. Её противоположность: no_root_squash. Если вы используете эту опцию, не забудьте поменять права на каталог (sudo chown nobody:nogroup /srv/nfs/).
  • all_squash — принудительно отображает всех пользователей (включая не-root) на анонимного пользователя. Полезно для общественных файловых хранилищ.
  • async — разрешает асинхронную запись (сервер может подтвердить запись до того, как данные физически сохранятся на диск). Повышает производительность, но увеличивает риск потери данных при сбое питания.
  • sec — задаёт механизм безопасности (например, sec=krb5 для аутентификации через Kerberos), что актуально для защищённых корпоративных сетей.

Применяем настройки:

sudo exportfs -ra

Проверяем:

sudo exportfs -v
  • Должны увидеть примерно следующее:
/srv/nfs        172.28.90.53(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

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

sudo systemctl restart nfs-server

Монтирование с Linux клиента

Устанавливаем необходимые пакеты:

sudo apt update && \
  sudo apt install nfs-common

Смотрим какие ресурсы доступны на сервере:

sudo showmount -e 172.28.90.52
  • Видим примерно следующее:
Export list for 172.28.90.52:
/srv/nfs 172.28.90.53

Монтируем:

sudo mount 172.28.90.52:/srv/nfs /mnt/

Дополнительно, вы можете использовать различные опции монтирования:

  • rsize=32768,wsize=32768 — Размер буферов чтения и записи (в байтах). По умолчанию обычно 4096 или 8192, увеличение может значительно ускорить передачу больших файлов.
  • noatime — Не обновлять время последнего доступа к файлу при каждом чтении. Снижает количество операций записи на сервере, повышая общую производительность.
  • hardПо умолчанию, если сервер недоступен, процессы, пытающиеся обратиться к файлам, «зависают» и ждут восстановления связи, гарантирует целостность данных.
  • soft — Если сервер не отвечает, клиент получает ошибку после истечения таймаута. Позволяет программам не зависать, но может привести к потере данных или их повреждению.

Итог

Теперь вы знаете как расшарить каталог, используя NFS, на одном Linux сервере и примонтировать его на втором Linux сервере.

Я показал вам:

  • опции расшаривания, используемые на сервере;
  • опции монтирования, используемые на клиенте.

Если понравилась статья, подпишись на мой канал в VK или Telegram.

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять
Отказаться
Политика конфиденциальности