NFS (Network File System) — протокол для монтирования файловых систем с удалённых серверов как локальных директорий. Сервер NFS экспортирует директорию, клиенты монтируют её и работают с файлами прозрачно, как если бы они находились на локальном диске. Операции создания, чтения, записи и удаления файлов передаются по сети через RPC (Remote Procedure Call).
Как работает NFS
NFS использует клиент-серверную модель. Сервер настраивает список экспортируемых директорий в файле /etc/exports:
/data 192.168.1.0/24(rw,sync,no_subtree_check)
/media 10.0.0.0/8(ro,async)
Параметр rw разрешает запись, sync гарантирует синхронную запись на диск перед подтверждением (безопаснее, медленнее), async — асинхронная запись (быстрее, риск потери при сбое питания). Клиент монтирует удалённый каталог: mount -t nfs4 server:/data /mnt/data. После монтирования /mnt/data ведёт себя как обычная директория — ls, cp, mv работают без изменений.
NFS использует порт 2049 (TCP/UDP) для основного трафика. NFSv4 работает только через TCP и требует только этого единственного порта, упрощая настройку файрволла.
Версии NFS
- NFSv2 (RFC 1094, 1989) — первая публичная спецификация. Stateless, UDP, ограничения на размер файла (2 ГБ). Устаревший.
- NFSv3 (RFC 1813, 1995) — stateless, поддерживает TCP и UDP, файлы более 2 ГБ. Широко используется в legacy-инсталляциях.
- NFSv4 (RFC 3530, 2003) — stateful, только TCP, встроенная аутентификация через Kerberos, делегирование файлов, именованные атрибуты. Единственный порт 2049. Рекомендуется для новых инсталляций.
- NFSv4.1 (RFC 5661, 2010) — параллельный NFS (pNFS): данные и метаданные могут храниться на разных серверах для параллельного доступа. Поддержка сессий и мультипатхинга.
- NFSv4.2 (RFC 7862, 2016) — Server-side copy (копирование файлов без передачи через клиент), sparse files, application I/O hints.
NFS vs SMB vs SSHFS
| Параметр | NFS | SMB/CIFS | SSHFS |
|---|---|---|---|
| Основная платформа | Linux/Unix | Windows, Linux | Linux/macOS |
| Производительность | Высокая | Средняя | Низкая (накладные расходы SSH) |
| Шифрование | Нет (нужен Kerberos или VPN) | SMB 3.0+ (AES-128) | Встроено (SSH) |
| Простота настройки | Средняя | Высокая для Windows-сред | Высокая |
| Максимальная скорость | ≈ скорость сети | 80–90% скорости сети | 50–70% скорости сети |
История
NFS разработала Sun Microsystems в 1984 году. Sun сознательно опубликовала протокол как открытый стандарт — это позволило реализовать NFS на всех Unix-системах. RFC 1094 вышел в 1989 году. NFSv4, стандартизированный в RFC 3530 (2003), значительно упростил работу через файрволлы и добавил security. Сегодня NFS — де-факто стандарт сетевых файловых систем в Linux-среде для внутрисетевого использования.
NFS в хостинге
NFS применяется в серверной инфраструктуре для нескольких задач. Общее хранилище для кластера веб-серверов: пользовательские загрузки (фото, документы) монтируются со всех узлов через NFS — файл, загруженный на один сервер, доступен со всех. Kubernetes Persistent Volumes: NFS используется как backend для PersistentVolumeClaim, когда нужен ReadWriteMany (несколько Pod читают/пишут одновременно). CI/CD-окружения: общие артефакты сборки монтируются через NFS для ускорения пайплайнов.
Ограничения NFS: высокая задержка при операциях с большим количеством мелких файлов — каждый вызов stat(), open(), close() идёт по сети. Для кода приложения (тысячи мелких PHP/Python файлов) NFS замедляет старт в 5–20 раз относительно локального SSD. Отсутствие встроенного шифрования в NFSv3/v4 без Kerberos: NFS рекомендуется только в защищённой внутренней сети (VLAN или приватной сети), никогда не в публичном интернете.