Выбор между NFS и SMB/CIFS определяется тремя факторами: составом парка операционных систем, требованиями к правам доступа и профилем нагрузки. Для Linux-инфраструктуры и гипервизоров обычно берут NFSv4.1 или NFSv4.2: меньше оверхед, POSIX-семантика, предсказуемая пропускная способность на крупных файлах. Для Windows-домена и смешанного парка с богатой моделью прав берут SMB 3.1.1: NTFS ACL, Kerberos, шифрование канала и Multichannel.
Практическое правило для быстрого старта: Linux-клиенты плюс Linux-сервер - это NFS, Windows-клиенты - SMB, смешанный парк - SMB3 с POSIX extensions либо NFS с компонентом Services for NFS. Git-репозитории, бэкапы, видеомонтаж и диски виртуальных машин чаще живут на NFS, а общие документы, домашние каталоги и сетевые принтеры на SMB.
Дальше - сравнение по версиям, производительности, правам и диагностике, с готовыми конфигурациями и предупреждениями о рисках.
NFS и SMB/CIFS: ключевые различия и области применения
NFS (Network File System) появился в Sun Microsystems для Unix-систем и работает поверх TCP/IP на порту 2049. SMB (Server Message Block) вырос из протокола Microsoft для Windows и слушает порт 445. CIFS (Common Internet File System) - это коммерческое имя SMB1, версии, которую Microsoft продвигала как открытый стандарт в конце 1990-х. Термин CIFS живёт до сих пор, хотя сам SMB1 отключён по умолчанию в Windows Server и в Samba: нормального шифрования в нём нет, он уязвим к relay-атакам и не умеет Multichannel.
Области применения разошлись исторически. NFS - это Linux-кластеры, HPC, датасторы VMware, постоянные тома Kubernetes, бэкапы и медиаархивы. SMB - домен Active Directory, файловые серверы общего доступа, NAS для офиса, macOS и печать.
История и эволюция протоколов
NFS v2 работал по UDP и оперировал 32-битными смещениями. NFSv3 добавил 64-битные операции, асинхронную запись и отдельные процедуры листинга, что заметно ускорило работу с большими каталогами. NFSv4 собрал в один протокол монтирование, блокировки, ACL и строковые идентификаторы владельцев; NFSv4.1 принёс pNFS и сессии, NFSv4.2 - серверное копирование, разреженные файлы и маркировку данных.
SMB прошёл путь от SMB1/CIFS к SMB2 (меньше round-trip'ов), SMB2.1 (leasings и крупные операции чтения), SMB3.0 (Multichannel, шифрование AES-128-CCM, scale-out) и SMB3.1.1 (AES-128-GCM, целостность, предварительная аутентификация). В современных системах рабочая версия - SMB 3.1.1, а SMB1 держат только для legacy-оборудования вроде старых сканеров.
Основные технические отличия
| Критерий | NFS | SMB/CIFS |
|---|---|---|
| Аутентификация | AUTH_SYS в v3, Kerberos в NFSv4 | NTLM или Kerberos |
| Права | POSIX ACL, привязка к UID/GID | NTFS ACL, привязка к SID |
| Блокировки | advisory, приложение само вызывает fcntl | mandatory, плюс oplocks и leases |
| Порты | 2049 TCP/UDP, вспомогательный rpcbind 111 | 445 TCP, NetBIOS 137-139 для legacy |
| Согласованность | close-to-open | oplocks, leases, durability handles |
| Имена файлов | регистрозависимые | регистронезависимые по умолчанию |
| Мультиплексирование | сессии NFSv4.1, опция nconnect | SMB Multichannel |
Разница в блокировках объясняет половину инцидентов с «битыми» файлами. NFSv3 выдаёт advisory-блокировки, и если хотя бы одно приложение не запрашивает блокировку через fcntl, конфликт записи не будет предотвращён. SMB работает с mandatory-блокировками и разрывает oplock, когда второй клиент открывает файл на запись.
Права в NFS опираются на числа UID/GID, и по умолчанию экспорт сжимает root клиента в анонимного пользователя (root_squash). NFSv4 требует nfs-idmapd (idmapd) для сопоставления строковых владельцев вида user@domain с локальными идентификаторами. В SMB права привязаны к SID и переживают переименование учётной записи.
Производительность и настройка: NFS против SMB
На гигабитном канале оба протокола упираются в сеть: практический предел - 110-115 МБ/с. Разница проявляется на 10/25/100 GbE, где на первый план выходят оверхед на операцию, размер блока и число параллельных потоков. В Linux-средах NFS обычно даёт меньший CPU-оверхед на клиенте и выше пропускную способность на последовательных операциях, а SMB 3.1.1 выигрывает в Windows за счёт Multichannel, RSS и крупных операций чтения.
Задержка определяется сетью и диском, реже протоколом: локальный NVMe отвечает за 0,1-0,3 мс, доступ по 10 GbE добавляет 0,5-1,5 мс, синхронная запись на HDD-массив легко даёт 5-10 мс. IOPS на мелких блоках сильнее зависят от типа хранилища и наличия sync на сервере, чем от выбора NFS или SMB.
Параметры монтирования и их влияние на скорость
NFS: rsize и wsize до 1048576 (1 МБ); nconnect=4 или 8 на NFSv4.1 и выше создаёт несколько TCP-соединений к одному серверу и снимает ограничение одного потока; noatime и nodiratime убирают лишние записи; actimeo задаёт срок жизни кэша атрибутов; hard вместе с timeo=600,retrans=2 определяет поведение при обрывах. NFS over RDMA (NFSoRDMA) поверх RoCE или InfiniBand снижает задержку и нагрузку на CPU, но требует совместимых адаптеров.
SMB: vers=3.1.1 оставляет только современные диалекты; cache=strict даёт согласованность, cache=loose - скорость; actimeo управляет кэшем атрибутов; SMB Multichannel включает несколько TCP-соединений при двух и более NIC либо через RSS. Jumbo frames (MTU 9000) уменьшают число прерываний, но требуют одинакового MTU на клиенте, коммутаторе и сервере. Отключение signing (signing=off) экономит CPU и добавляет риск подмены трафика, поэтому допустимо только в доверенном сегменте.
На сервере ключевой выбор - async или sync. Режим sync подтверждает запись после попадания на диск, async отвечает сразу, и при отключении питания последние данные теряются. Для бэкапов и баз данных берите sync, для медиатеки и временных данных async приемлем.
Предупреждение: async на экспорте NFS и nconnect дают заметный прирост, но проверяйте их на стенде. Поднять отдельный облачный сервер с нужным числом vCPU и сетевым лимитом проще, чем рисковать production: Timeweb Cloud даёт VDS, хранилище и Kubernetes для тестового контура за несколько минут.
Тестирование производительности: инструменты и метрики
Метрики: пропускная способность (МБ/с), IOPS, задержка (мс), загрузка CPU сервера и клиента, число TCP-ретрансмиссий. Инструменты: fio для профилей randread, randwrite и seqwrite, iperf3 для чистой сети, dd с oflag=direct для грубой оценки последовательной записи, diskspd для Windows, nfsiostat и smbclient для протокольного уровня.
Профиль fio под базу данных: 16 потоков, block size 8k, randrw 70/30, iodepth 32, runtime 300. Запускайте один и тот же профиль на NFS и на SMB с одного клиента в одно время суток, иначе тест сравнит нагрузку, а не протоколы. Фиксируйте в отчёте версию протокола, MTU и число TCP-потоков: расхождение между NFSv3 и NFSv4.2 меняет цифры на десятки процентов.
Совместимость с операционными системами и сценарии использования
Встроенная поддержка выглядит так: Linux-клиенты работают с NFS и SMB (cifs-utils), Windows - с SMB нативно и с NFS через компонент Services for NFS, доступный в редакциях Pro и Enterprise и в Windows Server, macOS - с SMB нативно и с NFS через nfs:// или automount. Android и iOS читают SMB через сторонние файловые менеджеры.
Смешанный парк Windows и Linux
SMB 3.1.1 с POSIX extensions позволяет Linux-клиентам видеть POSIX-права на SMB-шаре, но расширение поддерживают не все клиенты: Linux CIFS и macOS его понимают, Windows игнорирует POSIX-атрибуты. Обратный вариант - Services for NFS на Windows-клиентах с маппингом UID/GID - работает, но требует ручных таблиц сопоставления, а на мелких файлах проигрывает SMB.
Для смешанного парка на практике выбирают Samba или Windows Server со SMB3: idmap в Samba (backends rid, ad, autorid) сопоставляет SID домена и локальные UID/GID. Грабли: без SSSD или winbind владельцы файлов превращаются в nobody, а новые файлы получают права 0777 из-за ошибки в маппинге.
Виртуализация и гипервизоры
VMware ESXi монтирует NFSv3 и NFSv4.1 как датасторы; SMB-датасторы требуют отдельного VIB и покрывают не все сценарии. Для NFS-датастора критичны sync на массиве и стабильная задержка: десятки виртуальных машин генерируют много мелких операций. Proxmox VE поддерживает NFS и CIFS как типы хранилищ; NFS чаще берут для дисков VM, CIFS - для ISO-образов и бэкапов. vMotion на NFS работает без общей VMFS, а Hyper-V поверх SMB 3.0 требует SMB Multichannel и постоянно доступной шары.
Если сравниваете файловые протоколы с блочными, смотрите разбор протоколов доступа к СХД: iSCSI, Fibre Channel, NFS и SMB, где разобраны задержки, multipath и типовые ошибки с MTU.
Медиахранилище и домашние NAS
TrueNAS отдаёт данные по SMB и NFS одновременно из одного датасета ZFS. Для Windows-клиентов и macOS (SMB у неё нативный) берут SMB, для Linux-медиасерверов (Plex, Jellyfin) - NFS: меньше оверхед на открытие и чтение крупных файлов. Поток 4K HDR требует 50-100 Мбит/с, то есть 6-12 МБ/с, поэтому даже 1 GbE держит несколько одновременных зрителей, а для remux-файлов на 80-100 Мбит/с стоит перейти на 2.5 или 10 GbE. Файлы по 40-90 ГБ на HDD читаются стабильнее, когда включены крупные rsize/wsize и readahead на сервере.
Модели прав доступа и безопасность
NFSv3 доверяет клиенту: сервер принимает присланные UID/GID как есть (AUTH_SYS). Пользователь с root на клиенте может представиться любым UID, поэтому NFSv3 без Kerberos уместен только в доверенной сети. NFSv4 с sec=krb5 и выше проверяет билет Kerberos, и подмена UID становится невозможной.
Права доступа в NFS: POSIX ACL и UID/GID
Права в NFS - это POSIX-биты и POSIX ACL, привязанные к числам UID/GID. Если на клиенте пользователь имеет UID 1001, а на сервере под этим номером числится другой человек, доступ получит не тот. Решения: общий LDAP или Active Directory с SSSD, NIS для старых стендов либо единые UID/GID в файлах passwd на всех узлах.
Экспорт по умолчанию включает root_squash: root клиента превращается в анонимного пользователя, обычно nobody или 65534, поэтому записать файл с владельцем root он не может. Опция no_root_squash отключает эту защиту и даёт клиенту права root на сервере, так делать не стоит. Дополнительно all_squash сводит всех к анонимному пользователю, а anonuid и anongid задают его UID/GID. Для NFSv4 работает nfs-idmapd, сопоставляющий строковые владельцы user@domain с локальными идентификаторами; при разном NFSv4 domain на клиенте и сервере владельцы показываются как nobody.
Права доступа в SMB: NTFS ACL и SID
SMB оперирует SID (Security Identifier) и списками NTFS ACL с наследованием. Права не зависят от числового UID: переименование пользователя или перенос шары на другой сервер сохраняет доступ. В Windows действуют два слоя - share permissions и NTFS permissions, и при конфликте побеждает более строгий.
В Samba права хранят в расширенных атрибутах через vfs objects = acl_xattr, тогда Windows-клиент видит привычный редактор ACL. Без acl_xattr права берутся напрямую из POSIX-битов, и Windows показывает упрощённую картину. Наследование настраивайте явно: без соответствующего флага новые каталоги получают права родителя, а файлы от чужих приложений могут выпадать из схемы.
Аутентификация и шифрование
NFSv4 поддерживает три уровня защиты: sec=krb5 (аутентификация), sec=krb5i (плюс проверка целостности), sec=krb5p (плюс шифрование трафика). Шифрование krb5p заметно нагружает CPU, поэтому на 25 и 100 GbE чаще берут krb5i.
SMB 3.1.1 шифрует канал алгоритмами AES-128-CCM и AES-128-GCM, signing защищает от подмены, а SMB1 отключён в современных системах и нужен только для legacy-оборудования в изолированном сегменте. Требования к инфраструктуре одинаковы для обоих протоколов: синхронное время (NTP) и корректный DNS, иначе Kerberos не выдаст билет. Подробный разбор причин отказа доступа к NAS, включая DNS, NTP, Kerberos и Active Directory, собран в статье об ошибке аутентификации в NAS и файловых сервисах.
Диагностика проблем с доступом: NFS и SMB
Порядок разбора одинаков для обоих протоколов: сеть, затем порт и транспорт, затем аутентификация, затем права, и только после этого приложение. Пропуск шага «сеть» даёт самые долгие простои, потому что для пользователя ошибки прав и ошибки маршрутизации выглядят одинаково.
- ping и проверка порта: 2049 для NFS, 445 для SMB.
- Логи сервера: journalctl -u nfs-server, journalctl -u smbd, /var/log/samba/log.smbd, а на клиенте dmesg.
- Конфигурация: showmount -e для NFS, testparm -s для Samba.
- Права: ls -l и getfacl в Linux, вкладка безопасности или icacls в Windows.
- Трафик: tcpdump на 2049 и 445 при непонятных зависаниях.
Типичные ошибки и их причины
Permission denied при монтировании NFS чаще всего означает несовпадение UID/GID или срабатывание root_squash. Сообщение access denied by server приходит, когда клиент не попал в /etc/exports или указан не тот CIDR. Ошибка RPC: Timed out указывает на rpcbind, mountd или закрытые порты в firewall: нужны 111 и либо фиксированные порты, либо открытый динамический диапазон. Stale file handle возникает после пересоздания экспорта или перезагрузки сервера без сохранения состояния, помогает размонтирование с последующим монтированием.
В SMB Access denied и STATUS_ACCESS_DENIED указывают на ACL или неверные учётные данные, STATUS_LOGON_FAILURE - на пароль и домен, mount error(13) в Linux - на файл credentials или неподходящий sec. Ошибка mount error(112) host is down часто означает попытку договориться по SMB1, который отключён на сервере: добавьте vers=3.0 или 3.1.1. Сообщение STATUS_BAD_NETWORK_NAME появляется при опечатке в имени шары.
Инструменты диагностики
NFS: showmount -e server, rpcinfo -p server, nfsstat -s и nfsstat -c для статистики вызовов, nfsiostat для задержек операций, содержимое /proc/self/mountstats, rpcdebug для включения отладочных сообщений ядра. SMB: smbclient -L //server -U user для перечисления шар, smbstatus для активных сессий и блокировок, testparm для проверки smb.conf, wbinfo -t и net ads testjoin для проверки доверия к домену.
Пошаговые сценарии для зависаний, просадок скорости и ошибок NFS разобраны в материале про диагностику NFS: nfsstat, nfsiostat, mountstats и журналы. Для разбора больших логов удобно подключить LLM через агрегатор API: AiTunnel даёт доступ к GPT, Gemini и Claude через один интерфейс с оплатой в рублях, что ускоряет поиск аномалий в выводе nfsstat и smbstatus.
Практические рекомендации по настройке
Настройка NFS-сервера и клиента
На сервере ставят пакет nfs-kernel-server в Debian и Ubuntu либо nfs-utils в RHEL-семействе. В /etc/exports добавляют строку вида: /srv/data 10.10.0.0/24(rw,sync,no_subtree_check,root_squash,fsid=0). Для NFSv4 задают псевдокорень через fsid=0 и монтируют как server:/ или server:/export. Изменения применяют командой exportfs -ra и включают службу: systemctl enable --now nfs-server. В firewall открывают 2049/tcp и 111.
На клиенте нужен пакет nfs-common, монтирование выполняется командой mount -t nfs4 -o rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,nconnect=4 server:/export /mnt. В /etc/fstab добавляют опцию _netdev, чтобы монтирование ждало сеть. Для парка серверов и быстрых переподключений удобен autofs с таймаутом 60-120 секунд.
Готовые параметры для видео, логов и баз данных с разбором vers, async, wsize, rsize, timeo и nohide собраны в руководстве по практической настройке NFS для максимальной скорости и стабильности.
Настройка SMB-сервера и клиента
На сервере ставят пакет samba. В smb.conf создают секцию шары: [data] path = /srv/data, valid users = @smbusers, read only = no, browseable = yes, vfs objects = acl_xattr, create mask = 0660. Пользователя добавляют командой smbpasswd -a user, службы включают так: systemctl enable --now smbd nmbd. Конфигурацию проверяют через testparm -s. В Windows достаточно открыть \\server\data или подключить диск командой net use Z: \\server\data /user:domain\user.
На Linux-клиенте нужен пакет cifs-utils, монтирование: mount -t cifs //server/data /mnt -o vers=3.1.1,credentials=/etc/smb.cred,uid=1000,gid=1000,file_mode=0660,dir_mode=0770,_netdev,nofail. Файл credentials держите с правами 600. Любые правки ACL проверяйте на копии данных или на отдельном стенде: ошибка в valid users способна закрыть доступ всей группе.
Разграничение прав для инструментов и служебных каталогов, включая сравнение NFSv4.2 и SMB 3.1.1 и проверку монтирования на Linux и Windows, разобрано в статье о настройке NFS и SMB шар для хранилища инструментов.
Итоговое сравнение и рекомендации по выбору
| Критерий | NFS | SMB/CIFS |
|---|---|---|
| Windows-клиенты | Services for NFS, нужна настройка маппинга | Нативно, без дополнений |
| Linux-клиенты | Нативно, лучшая поддержка POSIX | cifs-utils, POSIX extensions поддерживаются частично |
| macOS | nfs:// или automount | Нативно, протокол по умолчанию |
| Производительность | Меньше оверхед в Linux, ровный throughput на крупных файлах | Multichannel и крупные операции, лучше в Windows |
| Права | POSIX ACL, UID/GID | NTFS ACL, SID, наследование |
| Безопасность | Kerberos krb5i и krb5p | AES-128-GCM, signing, Kerberos |
| Администрирование | Экспорт из нескольких строк, но UID нужно синхронизировать | Больше настроек, зато интеграция с AD из коробки |
| Гипервизоры | VMware, Proxmox, KVM | Hyper-V, часть NAS-платформ |
| Диагностика | nfsstat, nfsiostat, showmount, mountstats | smbclient, smbstatus, testparm |
- Linux-only, HPC, Kubernetes, бэкапы, диски VM: NFSv4.1 или NFSv4.2 с Kerberos, nconnect и jumbo frames.
- Windows-домен, офисные документы, домашние каталоги: SMB 3.1.1 с signing и Multichannel.
- Смешанный парк: SMB3 с POSIX extensions там, где Linux-клиенты их поддерживают, либо NFS плюс Services for NFS на Windows; UID/GID ведите через Active Directory или LDAP.
- Виртуализация: NFS для дисков VM на VMware и Proxmox, SMB 3.0 и выше для Hyper-V и бэкапов.
- Медиахранилище: NFS для Linux-медиасерверов, SMB для Windows и macOS, переход на 2.5 или 10 GbE при битрейте выше 200 Мбит/с.
- Любую конфигурацию проверяйте на стенде через fio и iperf3, фиксируя версию протокола, MTU и число потоков.
Начните с инвентаризации клиентов. Если 80 процентов рабочих станций работают под Windows, ставьте SMB 3.1.1 и не тратьте время на NFS-клиент в Windows. Если основная нагрузка приходится на Linux-серверы и гипервизоры, NFSv4.2 с nconnect и Kerberos даёт меньше точек отказа и проще масштабируется. Оба протокола умеют шифрование и проверку целостности, поэтому итоговое решение сводится к парку операционных систем и модели прав, а не к теоретической скорости передачи.