Network File System
Network File System (NFS) — это протокол сетевого доступа к файловым системам, позволяющий клиентским компьютерам монтировать удалённые каталоги и работать с файлами на них так, как если бы они находились на локальном диске. NFS относится к классу распределённых файловых систем (DFS) и работает на основе модели «клиент-сервер». Протокол изначально разработан компанией Sun Microsystems в 1984 году и с тех пор стал одним из стандартов де-факто для организации общего доступа к файлам в средах Unix и Linux, а также поддерживается в операционных системах Microsoft Windows, macOS и других.
История
Разработка и ранние версии
Первая версия NFS (NFSv1) была создана в 1984 году инженерами Sun Microsystems (в частности, Расселом Сэндбергом и Биллом Джой) для внутреннего использования в сети компании. В 1985 году вышла открытая спецификация NFSv2, которая стала доступна сторонним разработчикам. Эта версия использовала протокол UDP (User Datagram Protocol) как основной транспортный уровень и поддерживала только 32-битные идентификаторы файлов (file handles).
Версия 3
В 1995 году была опубликована спецификация NFSv3 (RFC 1813), которая принесла ряд значительных улучшений:
- Поддержка 64-битных идентификаторов — позволила работать с файлами размером более 2 ГБ.
- Асинхронные операции записи — сервер мог подтверждать запись до её физического завершения, что повышало производительность.
- Улучшенная обработка ошибок — клиент мог получать более детальную информацию о причинах сбоев.
- Поддержка TCP — протокол мог работать поверх TCP, что обеспечивало надёжную доставку данных в ненадёжных сетях.
Версия 4
NFSv4 (RFC 3530, 2003 год) стала фундаментальным пересмотром протокола. Основные изменения включали:
- Интеграция с механизмами безопасности — встроенная поддержка Kerberos, LIPKEY и SPKM-3.
- Упрощение работы с блокировками — протокол объединил операции с файловыми блокировками (ранее реализованные через отдельный протокол Network Lock Manager, NLM).
- Поддержка работы через брандмауэры — использование единого порта (2049) для всех операций.
- Поддержка состояния соединений — клиенты могли возобновлять прерванные сессии.
- Введение псевдо-файловой системы — клиент мог видеть все экспортируемые ресурсы как единое дерево.
В 2010 году вышла уточнённая версия NFSv4.1 (RFC 5661), которая добавила:
- Поддержку параллельного доступа к нескольким серверам (pNFS) — позволяла распределять хранение данных между несколькими серверами для повышения производительности.
- Улучшенную обработку сессий — клиенты могли безопасно восстанавливать соединения после сбоев.
Версия 4.2
Последняя стабильная версия, NFSv4.2 (RFC 7862, 2016 год), добавила:
- Поддержку разреженных файлов (sparse files) — эффективное хранение файлов с большими пустыми областями.
- Операции с метками безопасности (security labels) — поддержка мандатного контроля доступа (например, SELinux).
- Улучшенную работу с кэшированием — клиенты могли получать уведомления об изменениях файлов на сервере.
Архитектура и принцип работы
Компоненты
Система NFS состоит из двух основных компонентов:
- NFS-сервер — компьютер, на котором запущена служба NFS и который предоставляет доступ к определённым каталогам (экспортируемым ресурсам).
- NFS-клиент — компьютер, который монтирует удалённый ресурс и обращается к нему через протокол NFS.
Протоколы и порты
NFS использует несколько протоколов и портов:
- Порт 2049 (TCP/UDP) — основной порт для NFS-трафика.
- Portmapper (rpcbind) — служба, работающая на порту 111, которая сопоставляет RPC-программы с сетевыми портами.
- Mount protocol — протокол, используемый для начального монтирования ресурса.
- NLM (Network Lock Manager) — протокол для управления файловыми блокировками (используется в NFSv2/v3).
- Rquotad — протокол для получения информации о квотах.
Процесс монтирования
- Клиент отправляет запрос к серверу через протокол Mount.
- Сервер проверяет права доступа (на основе IP-адреса, имени хоста или аутентификации).
- Сервер возвращает клиенту уникальный идентификатор файловой системы (file handle).
- Клиент использует этот идентификатор для всех последующих операций с файлами.
- Клиент может выполнять операции чтения, записи, создания, удаления и переименования файлов.
Модель безопасности
NFSv2/v3 полагались на простую аутентификацию на основе IP-адресов и идентификаторов пользователей (UID/GID). Это было уязвимо для подмены адресов и атак на уровне сети. NFSv4 ввёл обязательную поддержку криптографической аутентификации через Kerberos (RPCSEC_GSS), что обеспечивает:
- Аутентификацию — проверку подлинности клиента и сервера.
- Целостность данных — защиту от модификации данных в пути.
- Шифрование — защиту от перехвата данных.
В современных реализациях (NFSv4.1 и выше) также поддерживается аутентификация через сертификаты и токены.
Реализации и поддержка
Unix и Linux
NFS является встроенной функцией большинства дистрибутивов Unix и Linux. В Linux NFS реализована на уровне ядра (модули nfs, nfsd, lockd, rpcbind). Для настройки используются утилиты:
exportfs— управление экспортируемыми ресурсами на сервере.mount— монтирование удалённых ресурсов на клиенте.showmount— просмотр списка экспортируемых ресурсов на сервере.
Microsoft Windows
В Windows NFS реализована как дополнительная функция (Services for NFS), доступная в серверных и некоторых клиентских версиях. Она позволяет Windows-клиентам монтировать NFS-ресурсы и предоставлять Windows-каталоги в качестве NFS-экспортов.
macOS
macOS поддерживает NFS как клиент (с версии Mac OS X) и как сервер (с версии macOS Server). Встроенная поддержка позволяет монтировать NFS-ресурсы через Finder или командную строку.
Другие системы
NFS также реализована для:
- OpenVMS — через сторонние пакеты.
- IBM z/OS — в составе операционной системы.
- Встраиваемые системы — через урезанные реализации (например, в маршрутизаторах и NAS-устройствах).
Производительность и ограничения
Преимущества
- Простота — протокол легко настраивается и не требует сложной инфраструктуры.
- Стандартизация — поддержка на большинстве платформ.
- Низкая задержка — для локальных сетей (LAN) NFS обеспечивает высокую скорость доступа.
- Прозрачность — клиентское приложение не знает, что файл находится на удалённом сервере.
Недостатки
- Чувствительность к задержкам — в глобальных сетях (WAN) с высокой задержкой производительность резко падает.
- Отсутствие встроенного шифрования — в NFSv2/v3 данные передаются в открытом виде (шифрование возможно только через VPN или туннели).
- Проблемы с блокировками — в NFSv2/v3 механизмы блокировок (NLM) работают нестабильно в условиях сетевых сбоев.
- Сложность с кэшированием — при одновременном доступе нескольких клиентов к одному файлу могут возникать конфликты кэша.
- Ограничения масштабирования — для больших кластеров (сотни серверов) NFS может стать узким местом.
Сравнение с альтернативами
| Протокол | Тип | Основное применение | Преимущества | Недостатки |
|---|---|---|---|---|
| NFS | Распределённая файловая система | Unix/Linux-среды, NAS | Простота, стандартность | Нет встроенного шифрования (v2/v3) |
| SMB/CIFS | Сетевой протокол | Windows-среды | Встроенная поддержка в Windows, шифрование | Меньшая производительность в Unix |
| AFP | Протокол Apple | macOS | Простота настройки | Устаревший, мало поддержки |
| GlusterFS | Распределённая ФС | Кластеры | Масштабируемость | Сложность настройки |
| Ceph | Объектное хранилище | Облачные решения | Гибкость, отказоустойчивость | Высокие требования к ресурсам |
Применение
NFS широко используется в:
- Корпоративных сетях — для организации общего доступа к файлам (документы, проекты, базы данных).
- Научных вычислениях — в кластерах HPC (High-Performance Computing) для общего доступа к данным.
- Виртуализации — для хранения образов виртуальных машин (например, в VMware через NFS).
- Домашних NAS-системах — для организации медиа-библиотек и резервного копирования.
- Разработке и тестировании — для обмена кодом и конфигурациями между серверами.
Интересные факты
- NFS является одним из старейших активно используемых сетевых протоколов (с 1984 года).
- Sun Microsystems (разработчик NFS) передала спецификацию протокола в IETF (Internet Engineering Task Force) для стандартизации.
- NFSv4 стал первым протоколом NFS, который полностью отказался от использования UDP в пользу TCP.
- В 2012 году NFSv4.1 был принят как стандарт для хранения образов виртуальных машин в VMware vSphere.
- Некоторые реализации NFS (например, в Linux) поддерживают «прямой доступ к памяти» (RDMA) через InfiniBand для сверхвысокой производительности.
Источники
- RFC 1094 (NFSv2, 1989)
- RFC 1813 (NFSv3, 1995)
- RFC 3530 (NFSv4, 2003)
- RFC 5661 (NFSv4.1, 2010)
- RFC 7862 (NFSv4.2, 2016)
- «NFS Illustrated» by Brent Callaghan (Addison-Wesley, 2000)
- Документация Linux Kernel — NFS (https://www.kernel.org/doc/html/latest/filesystems/nfs/)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →