Теория
NFS: Сетевой файловый протокол, который объединяет системы
В мире IT, где данные — это кровь бизнеса, а доступ к ним — это дыхание, критически важна возможность быстро и удобно обмениваться файлами между разными компьютерами. Именно эту задачу блестяще решает протокол NFS (Network File System). Если простыми словами, NFS позволяет подключить папку с удаленного сервера к вашей локальной системе так, будто это ваш собственный жесткий диск.
Разработанный компанией Sun Microsystems еще в 1984 году, NFS прошел долгий путь развития и остается одним из столпов корпоративных и облачных инфраструктур. Давайте разберемся, что это за протокол, как он эволюционировал и почему до сих пор так популярен.
Что такое NFS?
NFS (Network File System) — это распределенный файловый протокол, позволяющий пользователям получать доступ к файлам и каталогам, расположенным на удаленном сервере, как к локальным. Он работает по модели «клиент-сервер»:
NFS-сервер — это компьютер, который хранит данные и предоставляет к ним доступ по сети.
NFS-клиент — это компьютер, который подключает (монтирует) удаленные каталоги сервера к своей локальной файловой системе.
Главная философия NFS — прозрачность. Пользователь или приложение работают с файлами на удаленном сервере, не замечая разницы.
Эволюция версий NFS: от простого к надежному
За decades существования NFS обзавелся несколькими ключевыми версиями, каждая из которых решала проблемы предыдущей.
| Версия | Год | Ключевые особенности и отличия |
|---|---|---|
| NFSv2 | 1989 | Первая массовая версия. Работала только по UDP, что было быстро, но ненадежно. Имела ограничение на размер файла в 2 ГБ. |
| NFSv3 | 1995 | Значительный шаг вперед. Добавлена поддержка TCP для надежности, работа с файлами больше 2 ГБ, асинхронная запись (лучшая производительность) и улучшенная обработка ошибок. |
| NFSv4 | 2000 | Настоящая революция. Состояние (stateful) — сессии и аренда (lease) сделали протокол более устойчивым к сбоям. Встроенные механизмы безопасности (Kerberos, ACL). Объединение операций (compound operations) снизило нагрузку на сеть. Появилась работа через фаерволлы (порт 2049). |
| NFSv4.1 | 2010 | Добавлена поддержка параллельного доступа (pNFS) — данные можно распределять между несколькими серверами, что радикально повышает производительность и отказоустойчивость. |
| NFSv4.2 | 2016 | Самые современные возможности: клонирование и дублирование файлов на стороне сервера (Server-Side Copy), пространственная информированность приложений (Application Input/Output Advise), аппаратное ускорение (sessions). |
Практический вывод: для современных развертываний следует использовать как минимум NFSv4.1 или NFSv4.2, так как они предлагают лучшую безопасность, производительность и функциональность.
NFS vs. Другие протоколы: в чем разница?
NFS — не единственный игрок на поле сетевых файловых систем. Вот его главные конкуренты и ключевые отличия.
| Протокол | Основное применение | Ключевые отличия от NFS |
|---|---|---|
| SMB/CIFS | Сети Windows | Изначально создан для Windows, идеально интегрирован с AD. Лучше работает с большим количеством мелких файлов и поддерживает блокировку на уровне байтов, что критично для БД. NFS часто быстрее с крупными файлами в Unix/Linux-средах. |
| AFP | Сети Apple macOS | Нативный протокол для Mac, хорошо поддерживает метаданные и ресурсы macOS. Сейчас Apple активно переходит на SMB, а NFS также поддерживается. |
| FTP/SFTP | Передача файлов | Создан для загрузки и скачивания файлов, а не для постоянной работы с ними. Не предоставляет прозрачного доступа “как к локальному диску”. Медленнее из-за отсутствия кэширования. |
| iSCSI | Блочный доступ | iSCSI предоставляет доступ не к файлам, а к целым виртуальным блочным устройствам (дискам). Файловую систему на нем создает уже клиент. NFS работает на более высоком файловом уровне. |
Итог: NFS доминирует в средах Unix/Linux и гетерогенных сетях благодаря своей простоте, производительности и тесной интеграции с философией ОС семейства Unix.
Почему NFS до сих пор так популярен?
Несмотря на почтенный возраст, NFS не просто жив, а процветает. Вот причины его неувядающей популярности:
Прозрачность и простота использования. Для пользователя и приложения файлы на NFS-сервере ничем не отличаются от локальных. Это огромное удобство.
Кросс-платформенность. NFS-клиенты существуют практически для всех операционных систем: Linux, UNIX, Windows, macOS. Это делает его идеальным мостом в смешанных средах.
Централизация управления. Все данные хранятся в одном месте. Резервное копирование, управление доступом и квотами становятся намного проще.
Высокая производительность. Особенно при работе с крупными файлами (например, видео, виртуальными машинами, базами данных). Механизмы кэширования и последние версии (pNFS) делают его очень быстрым.
Надежность и отказоустойчивость. Современные версии (v4+) с поддержкой сессий и аренды gracefully переносят временные сбои сети, автоматически восстанавливая соединение.
Масштабируемость. Технология pNFS в NFSv4.1 позволяет строить огромные кластерные хранилища, где данные и метаданные разделены, что практически снимает ограничения на рост.
Привычность и стандартизация. NFS — это отработанный десятилетиями, предсказуемый и хорошо документированный стандарт. Инженеры доверяют ему.
Заключение
NFS — это не просто устаревший реликт, а живой и развивающийся протокол, который продолжает оставаться краеугольным камнем в архитектуре систем хранения данных. Его элегантная простота, мощь и постоянное развитие позволяют ему успешно конкурировать с более молодыми технологиями. Будь то домашняя лаборатория, корпоративный дата-центр или масштабное облачное хранилище, NFS предлагает проверенное временем, эффективное решение для прозрачного общего доступа к файлам.
Цель статьи : Настроить NFS-сервер на Ubuntu с общей папкой /SAS-8tb/Music/ (IP: 192.168.11.5) и подключить её на клиенте в /mnt/music.
Часть 1: Установка и настройка NFS-сервера
Шаг 1: Установка NFS-сервера
sudo apt update
sudo apt install nfs-kernel-server
Совет №1 В Ubuntu 20.04+
nfs-kernel-server включает всё необходимое — rpcbind, nfsd, mountd. Не нужно ставить отдельно nfs-common на сервере — он нужен только клиентам.
Шаг 2: Настройка экспорта папки Откройте файл экспорта:
sudo nano /etc/exports
Добавьте строку:
/SAS-8tb/Music/ 192.168.11.0/24(rw,sync,no_subtree_check,no_root_squash,fsid=0)
Разбор опций:
sync— синхронная запись (надёжно, но медленнее; для медиа можноasync— см. фишки ниже).no_subtree_check— отключает проверку поддеревьев (ускоряет, безопасно в локальной сети).no_root_squash— осторожно! разрешает root-клиенту быть root-ом на сервере. Для медиа — допустимо, если доверяете клиенту.fsid=0— важно, если экспортируете корневую ФС или используете NFSv4 как основную. В нашем случае — можно убрать, если не используется NFSv4 в “чистом” виде.
Совет №2: Если вы экспортируете не корневую ФС (например, просто папку),
fsid=0 не нужен. Он нужен только если вы делаете псевдо-корень NFSv4.
Фишка: Для мультимедиа (музыка, видео) лучше использовать
async — это ускорит запись, так как сервер не ждёт подтверждения записи на диск. Но есть риск потери данных при сбое питания.
Применение настроек
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server
Совет №3:
exportfs -ra перечитывает /etc/exports и применяет изменения без перезагрузки сервера. Используйте это вместо systemctl restart, если только меняли экспорты.
Шаг 4: Проверка экспорта
sudo exportfs -v
Должно показать:
/SAS-8tb/Music 192.168.11.0/24(rw,sync,wdelay,no_root_squash,no_subtree_check,sec=sys,fsid=0,...)
Настройка фаервола (если включен)
sudo ufw allow from 192.168.11.0/24 to any port nfs
# Или конкретно порты:
sudo ufw allow 2049
sudo ufw allow 111
Совет №4: NFSv4 использует только порт 2049. Если вы используете NFSv4, можно закрыть все остальные порты. Для этого в
/etc/default/nfs-kernel-server добавьте и перезапустите службу.:
RPCNFSDOPTS="--nfs-version 4"
Часть 2: Настройка NFS-клиента
Шаг 1: Установка клиента
sudo apt update
sudo apt install nfs-common
Совет №5: nfs-common содержит mount.nfs, rpc.statd, rpc.idmapd — всё, что нужно клиенту.
Шаг 2: Создание точки монтирования
sudo mkdir -p /mnt/music
Шаг 3: Монтирование вручную (для теста)
sudo mount -t nfs 192.168.11.5:/SAS-8tb/Music /mnt/music
Совет: Добавьте опции монтирования для улучшения производительности:
sudo mount -t nfs -o rw,hard,intr,rsize=32768,wsize=32768,timeo=14 192.168.11.5:/SAS-8tb/Music /mnt/music
Опции клиента:
hard— если сервер упадёт, клиент будет ждать (лучше для данных).intr— позволяет прервать зависшие операции (Ctrl+C).rsize/wsize=32768— размер блока чтения/записи (максимум для гигабитной сети).timeo=14— таймаут в децисекундах (1.4 сек) — баланс между отзывчивостью и надёжностью.nfsvers=4— явно указать версию (если нужно).
Совет №6: Для SSD/NVMe и быстрой сети можно ставить
rsize/wsize=1048576 (1 МБ), но проверьте поддержку на сервере: cat /proc/fs/nfsd/max_block_size
Шаг 4: Проверка монтирования
df -h | grep music
mount | grep nfs
ls /mnt/music
Часть 3: Безопасность NFS
NFS — протокол без шифрования. В локальной доверенной сети — нормально. Но есть нюансы. Ограничения по IP Уже сделано: 192.168.11.0/24 — доступ только из вашей подсети. Отключить ненужные версии В /etc/default/nfs-kernel-server:
RPCNFSDOPTS="--nfs-version 4"
В /etc/default/nfs-common:
NEED_IDMAPD=yes
NEED_GSSD=no
Совет №7: NFSv4 безопаснее, чем v3 — меньше портов, встроенная аутентификация через
rpc.idmapd.
Дополнительная защита (если нужно)
- Используйте VLAN для NFS-трафика.
- Или туннель через WireGuard / SSH (для доступа извне).
- Настройте TCP Wrappers (
/etc/hosts.allow,/etc/hosts.deny) — устаревшее, но работает.
Пример /etc/hosts.allow:
portmap: 192.168.11.0/255.255.255.0
lockd: 192.168.11.0/255.255.255.0
rquotad: 192.168.11.0/255.255.255.0
mountd: 192.168.11.0/255.255.255.0
statd: 192.168.11.0/255.255.255.0
Автоматическое монтирование при загрузке Отредактируйте /etc/fstab на клиенте:
sudo nano /etc/fstab
Добавьте строку:
192.168.11.5:/SAS-8tb/Music /mnt/music nfs rw,hard,intr,rsize=32768,wsize=32768,timeo=14,_netdev,auto 0 0
Важные опции:
_netdev— монтировать только после поднятия сети (иначе зависнет при загрузке).auto— монтировать при старте.
Совет №8: Если клиент — ноутбук или может не иметь сети при загрузке, добавьте
nofail:
... ,_netdev,nofail 0 0
Тогда система не будет падать, если NFS недоступна.
Часть 5: Тестирование и отладка
Проверка доступа:
touch /mnt/music/testfile && echo "OK" || echo "FAIL"
rm /mnt/music/testfile
Логи сервера:
sudo tail -f /var/log/syslog | grep nfs
Проверка версии NFS:
nfsstat -m
Показать все экспорты с сервера:
showmount -e 192.168.11.5
Бонус: Тюнинг
Фишка 1: Кэширование на клиенте (для медиа) Добавьте в монтирование:
-o ...,rsize=1048576,wsize=1048576,ac,actimeo=30
ac— attribute caching (кеширование атрибутов файлов).actimeo=30— кешировать атрибуты 30 сек (меньше запросов к серверу → быстрее проигрывание музыки).
Не используйте для часто изменяемых файлов!
Фишка 2: Автомонтирование по требованию (autofs) Установите autofs — папка монтируется при первом обращении, отмонтируется через таймаут.
sudo apt install autofs
sudo nano /etc/auto.master
Добавьте:
/mnt/music /etc/auto.music --timeout=60
Создайте /etc/auto.music:
music -fstype=nfs,rw,hard,intr,rsize=32768,wsize=32768,timeo=14 192.168.11.5:/SAS-8tb/Music
Перезапустите:
sudo systemctl restart autofs
Теперь /mnt/music/music будет монтироваться при первом cd или ls.
Фишка 3: Мониторинг производительности
nfsiostat 2
Показывает IOPS, latency, throughput — полезно для тюнинга.
Фишка 4: NFS поверх ZFS Если /SAS-8tb — это ZFS, добавьте в экспорте:
/SAS-8tb/Music/ 192.168.11.0/24(...,fsid=123)
Где 123 — уникальный ID пула. Это предотвращает конфликты при пересоздании пула.
Часть 6: Резервное копирование и восстановление Сохраните конфиги:
sudo cp /etc/exports ~/nfs_exports_backup
sudo cp /etc/fstab ~/fstab_backup
Для восстановления после сбоя — просто скопируйте обратно и выполните exportfs -ra.






