Источник: selfhosting.sh
Быстрый вердикт
Используйте NFS для обмена файлами между Linux в вашей домашней лаборатории. Это быстрее, проще, и Docker поддерживает NFS-тома нативно. Используйте SMB, когда требуется доступ для клиентов Windows. Пропустите iSCSI, если вы не используете Proxmox или VMware и не нуждаетесь в блочном хранилище.
Получите конфигурации Docker Compose, варианты аппаратного обеспечения и ярлыки для настройки, которые мы не публикуем в статьях. Каждую неделю. Без спама.
Подписаться
Обзор
Это три доминирующих протокола сетевого хранения. Каждый из них служит своей цели:
Протокол| Тип| Лучше всего подходит для| Порт по умолчанию
---|---|---|---
SMB (Server Message Block)| Уровень файлов| Обмен файлами Windows/смешанные ОС| 445
NFS (Network File System)| Уровень файлов| Обмен файлами Linux-Linux| 2049
iSCSI| Уровень блоков| Виртуальные машины, базы данных, Proxmox| 3260
Уровень файлов означает, что сервер управляет файловой системой. Клиенты запрашивают файлы по имени. Несколько клиентов могут одновременно доступать одно и то же хранилище.
Уровень блоков означает, что сервер предоставляет необработанные блоки диска. Клиент форматирует и управляет своей собственной файловой системой поверх. Только один клиент должен получать доступ к блочному устройству в одно время (если не используется кластерная файловая система).
Сравнение функций
| Функция | SMB (v3) | NFS (v4.2) | iSCSI |
|---|---|---|---|
| Тип протокола | Файл | Файл | Блок |
| Поддержка ОС | Windows, Linux, macOS | Linux, macOS (ограниченная) | Любая (при наличии инициатора) |
| Нативная поддержка Docker | Нет (монтирование через CIFS) | Да (тома NFS в Docker) | Нет (монтирование как блочное устройство) |
| Многопользовательский доступ | Да | Да | Нет (один инициатор) |
| Производительность (1GbE) | Хорошая (~100 МБ/с) | Хорошая (~110 МБ/с) | Лучшая (~115 МБ/с) |
| Производительность (10GbE) | Хорошая (~500 МБ/с) | Лучше (~800 МБ/с) | Лучшая (~900 МБ/с) |
| Шифрование | Да (SMB 3.0+) | Да (Kerberos, по желанию) | Да (IPSec, редко используется) |
| Сложность настройки | Низкая | Низкая-Средняя | Высокая |
| Поддержка ACL | Полные Windows ACL | POSIX ACL | N/A (блочное устройство) |
| Блокировка | Оппортунистические блокировки | Блокировки на основе состояния NFSv4 | N/A |
NFS — лучше всего подходит для домашних лабораторий Linux
NFS является стандартным выбором для обмена хранилищем между машинами Linux. Это самый простой протокол для обмена файлами между Linux и имеет лучшую интеграцию с Docker.
Когда использовать NFS
- Обмен медиабиблиотеками от NAS к контейнеру Docker Jellyfin/Plex
- Монтирование общего хранилища на нескольких серверах Linux
- Тома Docker, которые указывают на удаленное хранилище
- Общее хранилище Proxmox (хранилище NFS для ISO и шаблонов)
- Любая домашняя лаборатория на базе Linux
Настройка NFS-сервера (Ubuntu/Debian)
# Установить сервер NFS
sudo apt install nfs-kernel-server
# Создать каталог экспорта
sudo mkdir -p /srv/nfs/media
sudo chown nobody:nogroup /srv/nfs/media
# Настроить экспорт
echo '/srv/nfs/media 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)' | sudo tee -a /etc/exports
# Применить и запустить
sudo exportfs -ra
sudo systemctl enable --now nfs-kernel-server
Монтирование NFS-клиента
# Установить клиент NFS
sudo apt install nfs-common
# Монтировать
sudo mount -t nfs4 192.168.1.100:/srv/nfs/media /mnt/media
# Постоянное монтирование через fstab
echo '192.168.1.100:/srv/nfs/media /mnt/media nfs4 defaults,_netdev 0 0' | sudo tee -a /etc/fstab
NFS в Docker Compose
Docker нативно поддерживает тома NFS — нет необходимости монтировать на хосте сначала:
services:
jellyfin:
image: jellyfin/jellyfin:10.11.6
volumes:
- media:/media
volumes:
media:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.100,nfsvers=4,rw,soft,timeo=150
device: ":/srv/nfs/media"
Преимущества и недостатки NFS
Преимущества:
* Самый быстрый файловый протокол для Linux
* Нативная поддержка томов Docker
* Низкие накладные расходы, простая конфигурация
* Отлично подходит для потоковой передачи медиа (последовательные чтения)
* NFSv4 благоприятно для брандмауэра (один порт 2049)
Недостатки:
* Плохая поддержка клиентов Windows (работает, но неудобно)
* Сопоставление прав доступа может быть запутанным (UID/GID должны совпадать между системами)
* Нет встроенного шифрования по умолчанию (используйте NFSv4 + Kerberos или VPN)
* Поддержка macOS ограничена и иногда имеет ошибки
SMB — лучше всего подходит для смешанных ОС
SMB (также называемый CIFS) является стандартным протоколом обмена файлами Windows. Используйте его, когда любой клиент Windows или macOS нуждается в доступе к общим файлам.
Когда использовать SMB
- Windows ПК, получающие доступ к хранилищу NAS
- Резервные копии Time Machine macOS на NAS
- Смешанные среды Linux/Windows/Mac
- Общие ресурсы Samba для домашнего медиа-потока на телевизоры и игровые консоли
- Когда вам нужны совместимые с Windows ACL и права доступа
Настройка SMB-сервера (Ubuntu/Debian с Samba)
# Установить Samba
sudo apt install samba
# Создать каталог общего доступа
sudo mkdir -p /srv/samba/share
sudo chmod 775 /srv/samba/share
# Создать пользователя Samba
sudo smbpasswd -a yourusername
# Настроить общий доступ
sudo tee -a /etc/samba/smb.conf << 'EOF'
[media]
path = /srv/samba/share
browseable = yes
writable = yes
valid users = yourusername
create mask = 0664
directory mask = 0775
EOF
# Перезапустить
sudo systemctl restart smbd
Монтирование SMB-клиента (Linux)
# Установить утилиты CIFS
sudo apt install cifs-utils
# Монтировать
sudo mount -t cifs //192.168.1.100/media /mnt/media -o username=yourusername,password=yourpassword,vers=3.0
# Постоянное монтирование через fstab (используйте файл учетных данных для безопасности)
echo 'username=yourusername' | sudo tee /root/.smbcredentials
echo 'password=yourpassword' | sudo tee -a /root/.smbcredentials
sudo chmod 600 /root/.smbcredentials
echo '//192.168.1.100/media /mnt/media cifs credentials=/root/.smbcredentials,vers=3.0,_netdev 0 0' | sudo tee -a /etc/fstab
SMB в Docker Compose
Docker не поддерживает никак SMB. Сначала монтируйте на хосте, затем монтируйте в контейнер:
services:
jellyfin:
image: jellyfin/jellyfin:10.11.6
volumes:
- /mnt/media:/media # Общий ресурс SMB, смонтированный на хосте
Или используйте плагин тома CIFS для Docker:
volumes:
media:
driver: local
driver_opts:
type: cifs
o: username=yourusername,password=yourpassword,vers=3.0
device: "//192.168.1.100/media"
Преимущества и недостатки SMB
Преимущества:
* Универсальная поддержка ОС (Windows, macOS, Linux, умные телевизоры, игровые консоли)
* Встроенное шифрование (SMB 3.0+)
* Разнообразная модель ACL и прав доступа
* Поддержка Time Machine в macOS
* Обнаружение через mDNS/Bonjour
Недостатки:
* Медленнее, чем NFS на Linux (больше накладных расходов протокола)
* Нет нативной поддержки томов Docker (требуется монтирование на хосте или плагин CIFS)
* Более сложная модель прав доступа (может быть запутанной в смешанных средах)
* SMBv1 является серьезным риском безопасности — всегда отключайте его и используйте v3.0+
iSCSI — лучше всего подходит для ВМ и баз данных
iSCSI представляет удаленное хранилище как локальное блочное устройство. Клиент (инициатор) видит необработанный диск, форматирует его с любым файловой системой и управляет им напрямую. Это обеспечивает лучшую производительность и требуется для определенных рабочих нагрузок.
Когда использовать iSCSI
- Хранилище дисков для ВМ Proxmox (сохранение образов ВМ на NAS)
- Серверы баз данных, которым нужна постоянная производительность I/O
- Настройки загрузки по SAN
- Когда вам нужна производительность необработанного блочного устройства по сети
- Хранилища VMware/ESXi
Когда НЕ использовать iSCSI
- Обмен файлами между несколькими клиентами (используйте NFS или SMB)
- Тома Docker (используйте NFS вместо этого — гораздо проще)
- Потоковая передача медиа (NFS проще и достаточно быстр)
- Если вы не используете гипервизор или сервер баз данных
Основы iSCSI
NAS/Server (target) <--> Client (initiator)
Предоставляет LUNs Видит /dev/sdX блочное устройство
(логические единицы хранения) Форматирует с ext4/XFS и т.д.
Большинство устройств NAS (Synology, QNAP, TrueNAS) могут создавать цели iSCSI через свой веб-интерфейс. Клиент устанавливает инициатор iSCSI и подключается к цели.
Настройка клиента iSCSI (Linux)
# Установить инициатор
sudo apt install open-iscsi
# Открыть целевые устройства
sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100
# Подключиться
sudo iscsiadm -m node -T iqn.2026-02.com.synology:nas.target1 -p 192.168.1.100 --login
# Отформатировать и смонтировать новое блочное устройство
sudo mkfs.ext4 /dev/sdb
sudo mkdir /mnt/iscsi
sudo mount /dev/sdb /mnt/iscsi
Преимущества и недостатки iSCSI
Преимущества:
* Лучшая необработанная производительность из трех протоколов
* Полный контроль файловой системы на клиенте
* Требуется для некоторых конфигураций гипервизора
* Постоянная задержка I/O для баз данных
Недостатки:
* Доступ только для одного клиента (нет многопользовательского обмена без кластерной FS)
* Сложная настройка по сравнению с NFS/SMB
* Нет нативной интеграции с Docker
* Требует выделенной сети для лучшей производительности (отдельный VLAN или сеть iSCSI)
Сравнение производительности
Тестирование проводилось на локальной сети 2.5GbE между сервером Intel N305 и Synology DS923+:
Тест| NFS v4.2| SMB v3| iSCSI
---|---|---|---
Последовательное чтение| 280 МБ/с| 260 МБ/с| 290 МБ/с
Последовательная запись| 270 МБ/с| 240 МБ/с| 285 МБ/с
Случайное чтение 4K| 12,000 IOPS| 8,000 IOPS| 15,000 IOPS
Случайная запись 4K| 10,000 IOPS| 6,500 IOPS| 13,000 IOPS
Метаданные (создание/удаление)| Быстро| Умеренно| Быстрее
Основные выводы:
* При 1GbE все три протокола захватывают канал — различия в производительности незначительны
* При 2.5GbE+ NFS обгоняет SMB на 10-20% для рабочих нагрузок Linux
* iSCSI на 5-15% быстрее, чем NFS, для случайного ввода-вывода (это важно для баз данных, а не для медиа)
* Для потоковой передачи медиа важна производительность последовательного чтения — все три протокола хороши
Какой протокол для какой нагрузки?
| Нагрузка | Лучший протокол | Почему |
|---|---|---|
| Медиатека Jellyfin/Plex | NFS | Поддержка Docker в нативном виде, быстрое последовательное чтение |
| Каталог данных Nextcloud | NFS | Docker-нативный, хорошее случайное I/O |
| Резервные копии Time Machine | SMB | macOS требует SMB для Time Machine |
| Обмен файлами в Windows | SMB | Нативная поддержка Windows |
| Хранение ВМ Proxmox | iSCSI или NFS | iSCSI для производительности, NFS для простоты |
| База данных (PostgreSQL, MySQL) | iSCSI или локально | Последовательность I/O на уровне блоков |
| Фотография Immich | NFS | Docker-нативный, хорошо обрабатывает большие файлы |
| Домашняя сеть с несколькими ОС | SMB | Универсальная поддержка клиентов |
| Docker-тома | NFS | Нативный драйвер Docker для томов |
| Цель для резервного копирования (Restic, BorgBackup) | NFS | Простой, надежный, поддающийся сценариям |
Рекомендация для большинства домашних лабораторий
Настройте оба протокола: NFS и SMB на вашем NAS. Большинство устройств NAS (Synology, QNAP, TrueNAS, Unraid) поддерживают одновременное предоставление одних и тех же каталогов через оба протокола.
* NFS для всех серверов Linux и контейнеров Docker
* SMB для ПК на Windows, машин macOS, смарт-ТВ и игровых консолей
* iSCSI только если вы используете Proxmox/VMware и хотите хранение ВМ на уровне блоков
Это охватывает каждый тип клиента без компромиссов.
Часто задаваемые вопросы
Могу ли я использовать NFS и SMB для доступа к одним и тем же файлам?
Да. Большинство операционных систем NAS предоставляют один и тот же каталог через NFS и SMB. Будьте осторожны с правами доступа — NFS использует сопоставление UID/GID, в то время как SMB использует учетные записи пользователей. Убедитесь, что оба сопоставлены с теми же исходными правами доступа к файлам.
Достаточно ли NFS безопасен для домашней сети?
NFSv4 поддерживает аутентификацию и шифрование Kerberos. Для домашней сети за файрволом незащищенный NFSv4 подходит — трафик не покидает вашу локальную сеть. Если вас это беспокоит, сегментируйте ваш трафик сохранения на отдельный VLAN.
Нужно ли мне 10GbE для сетевого хранилища?
Для большинства задач саморазмещения 1GbE достаточно. 2.5GbE — идеально — доступные NIC и коммутаторы, значительное улучшение пропускной способности. 10GbE необходим только если вы часто перемещаете большие файлы (монтаж видео, миграция ВМ) или работаете со многими параллельными клиентами.
Может ли Docker использовать объемы iSCSI?
Не в нативном виде. Вам нужно будет смонтировать блочное устройство iSCSI на хосте, а затем выполнить соединение файловой системы в контейнер. Используйте NFS вместо этого — это проще, и Docker обрабатывает это в нативном виде.
Какой протокол имеет наименьшую нагрузку на ЦП?
NFS имеет наименьшую нагрузку на ЦП в Linux. SMB использует больше ЦП из-за шифрования (SMB 3.0+) и стека протоколов CIFS. Нагрузки iSCSI минимальны, но файловая система на стороне клиента добавляет некоторую стоимость для ЦП.