NFS vs SMB: какой сетевой протокол выбрать
Когда речь заходит о сетевых файловых системах в инфраструктуре, перед администратором неизбежно встаёт вопрос: NFS или SMB? Оба протокола решают одну задачу — предоставление общего доступа к файлам по сети — но делают это по-разному, и выбор напрямую зависит от вашего окружения.
NFS v4 vs SMB 3: ключевые отличия
NFS (Network File System) версии 4 — нативный протокол для Linux/Unix-систем. SMB 3 (Server Message Block) — протокол от Microsoft, который в современных реализациях через Samba отлично работает и на Linux.
Главные архитектурные отличия:
- NFS v4 использует единый порт 2049/TCP, что упрощает работу с файрволом
- SMB 3 работает на порту 445/TCP и поддерживает шифрование канала из коробки
- NFS v4 поддерживает делегирование файлов — клиент может кэшировать данные без постоянных обращений к серверу
- SMB 3 имеет Multichannel — агрегацию нескольких сетевых интерфейсов для роста пропускной способности
Производительность: Linux-Linux vs Linux-Windows
В связке Linux → Linux NFS v4 выигрывает: меньше накладных расходов, нативная интеграция с ядром, поддержка pNFS для параллельного доступа к данным. На гигабитной сети разница составляет 10–15% в пользу NFS при последовательном чтении крупных файлов.
В связке Linux → Windows (или смешанная среда) SMB 3 через Samba становится предпочтительным выбором: нативная поддержка Windows ACL, интеграция с Active Directory, корректная работа с приложениями, которые завязаны на семантику Windows-файловой системы.
Настройка NFS exports
Файл /etc/exports на сервере:
/data/shared 192.168.10.0/24(rw,sync,no_subtree_check,no_root_squash)
/data/readonly 192.168.10.50(ro,sync,all_squash,anonuid=65534,anongid=65534)
После изменений применяем:
exportfs -ra
systemctl reload nfs-server
На клиенте монтируем с опциями для производительности:
mount -t nfs4 -o rw,hard,intr,rsize=1048576,wsize=1048576,timeo=600 server:/data/shared /mnt/shared
Настройка SMB через smb.conf
Минимальная конфигурация Samba для файловой шары:
[global]
workgroup = WORKGROUP
server string = File Server
security = user
map to guest = bad user
smb encrypt = required
[shared]
path = /data/shared
read only = no
valid users = @fileusers
create mask = 0664
directory mask = 0775
force group = fileusers
ACL и права доступа
NFS v4 поддерживает NFSv4 ACL, совместимые с POSIX и Windows ACL. Управление через nfs4_setfacl:
nfs4_setfacl -a A::username@domain:RWX /mnt/shared/dir
Для SMB ACL управляются стандартными средствами Linux (setfacl) или через Windows Explorer при наличии acl support = yes в smb.conf.
Kerberos-аутентификация
Для production-среды с Active Directory оба протокола поддерживают Kerberos:
- NFS + Kerberos: настройка
sec=krb5pв/etc/exportsобеспечивает аутентификацию и шифрование данных - SMB + Kerberos: Samba в роли члена домена (
security = ADS) автоматически использует Kerberos
# Присоединение Samba к домену
net ads join -U Administrator
systemctl restart smbd winbind
Когда что использовать
| Сценарий | Рекомендация |
|---|---|
| Linux-кластер, HPC, NAS для Linux-клиентов | NFS v4 |
| Смешанная среда Linux + Windows | SMB 3 (Samba) |
| Docker volumes, Kubernetes PV | NFS v4 |
| 1С, MS SQL, Windows-приложения | SMB 3 |
| Максимальная безопасность в AD | SMB 3 с Kerberos |
Оба протокола зрелые и надёжные. Ключевое правило: используйте NFS там, где всё Linux, и SMB там, где есть Windows. В смешанных средах Samba позволяет предоставлять одни и те же данные одновременно через оба протокола.
Использую NFS v4 с krb5p уже года три, ни разу не пожалел. Главное — не забыть про синхронизацию времени на всех узлах, иначе Kerberos перестаёт работать и начинается боль.