Что такое SMB и зачем он нужен в TrueNAS?
Представь, что твой TrueNAS — это большой цифровой склад. SMB (Server Message Block) — это протокол, который позволяет разным операционным системам (Windows, macOS, Linux) заходить на этот склад и работать с файлами, как будто они находятся на локальном компьютере. В контексте TrueNAS Scale, SMB — это основной способ организации файлового доступа для пользователей в сети.
Подготовка к настройке SMB в TrueNAS Scale
Давай разберем, что нужно сделать перед тем, как включать общий доступ. Представь, что ты строишь дом — сначала нужен фундамент.
1. Создание пула и набора данных (Dataset)
Без пула данных SMB-шары создать не получится. Вот как это делается:
# Проверка доступных дисков в системе
zpool status
# Создание пула (пример через CLI)
zpool create tank mirror /dev/sda /dev/sdb
# Создание набора данных с нужными параметрами
zfs create tank/smb_shares
zfs set compression=lz4 tank/smb_shares
zfs set atime=off tank/smb_shares # Для повышения производительности
2. Настройка сетевых интерфейсов
Убедись, что сеть настроена правильно. Для SMB рекомендуется использовать статические IP-адреса:
- Перейди в Network → Interfaces в веб-интерфейсе TrueNAS
- Назначь статический IP-адрес на основном интерфейсе
- Проверь настройки DNS и шлюза по умолчанию
- Для повышения производительности рассмотри возможность агрегации каналов (LACP)
Пошаговая настройка SMB-шары в TrueNAS Scale
Теперь перейдем к самому интересному — созданию и настройке общего ресурса. Представь, что мы создаем общую папку для отдела разработки.
Шаг 1: Создание пользователей и групп
Правильная организация прав доступа — основа безопасности. Сначала создадим группу разработчиков:
# Создание группы
sudo midclt call group.create '{"group": "developers", "sudo": false}'
# Создание пользователей
sudo midclt call user.create '{
"username": "alex",
"full_name": "Alex Developer",
"password": "StrongPass123!",
"group": 1001,
"groups": [1001],
"home": "/mnt/tank/home/alex",
"shell": "/usr/bin/bash"
}'
Шаг 2: Создание SMB-шары через веб-интерфейс
Вот пошаговая инструкция через графический интерфейс:
- Перейди в Shares → Windows Shares (SMB)
- Нажми Add для создания новой шары
- Заполни основные параметры:
- Path: Выбери созданный ранее набор данных (например, /mnt/tank/smb_shares)
- Name: dev_share (имя, которое увидят пользователи)
- Purpose: Выбери "Multi-user time machine" или "Default share parameters"
- В разделе Access настрой права доступа:
- Добавь группу "developers" с правами "Read/Write"
- Установи владельца и группу владельцев
- Сохрани конфигурацию
Шаг 3: Расширенные настройки SMB
Для тонкой настройки производительности и безопасности используем дополнительные параметры:
# Пример дополнительных параметров SMB в поле "Auxiliary Parameters"
# Оптимизация для гигабитной сети
aio read size = 1
aio write size = 1
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
# Настройки кэширования
strict allocate = yes
strict sync = no
# Безопасность
server signing = required
smb encrypt = required
# Производительность при работе с множеством маленьких файлов
kernel share modes = no
posix locking = no
Оптимизация производительности SMB в TrueNAS Scale
Правильная оптимизация может увеличить скорость передачи данных в 2-3 раза. Давай разберем ключевые моменты.
Сравнение настроек для разных сценариев
| Сценарий | Рекомендуемые настройки | Ожидаемая скорость |
|---|---|---|
| Видеомонтаж (большие файлы) | aio read/write size = 1, large read/write = yes | 900+ Мбит/с на 1 Гбит сети |
| Веб-разработка (много мелких файлов) | strict sync = no, socket options оптимизация | Быстрый отклик, низкая задержка |
| Резервное копирование | Настройки по умолчанию, focus на надежность | Стабильная средняя скорость |
Настройка ZFS для оптимальной работы с SMB
ZFS и SMB должны работать в гармонии. Вот ключевые параметры:
# Оптимизация набора данных для SMB
zfs set atime=off tank/smb_shares # Отключить обновление времени доступа
zfs set compression=lz4 tank/smb_shares # Включить сжатие
zfs set recordsize=1M tank/smb_shares # Для больших файлов
# или
zfs set recordsize=128K tank/smb_shares # Для маленьких файлов
# Мониторинг производительности
zpool iostat -v 1 # Статистика в реальном времени
zfs get all tank/smb_shares # Все параметры набора данных
Типичные проблемы и их решение
Даже у опытных админов возникают проблемы с SMB. Вот самые частые и их решения.
Проблема 1: Медленная скорость передачи
Симптомы: Скорость ниже 50% от пропускной способности сети.
# Диагностика:
# 1. Проверь сеть
iperf3 -c IP_TrueNAS -t 10
# 2. Проверь диски
iostat -x 1
# 3. Проверь настройки SMB
testparm -s /etc/samba/smb.conf
# Решения:
# Увеличь размеры буферов в дополнительных параметрах SMB:
socket options = TCP_NODELAY SO_RCVBUF=131072 SO_SNDBUF=131072
# Включи асинхронный ввод/вывод:
aio read size = 1
aio write size = 1
Проблема 2: Ошибки доступа "Access Denied"
Решение: Проверь цепочку прав доступа:
- Права на уровне файловой системы:
ls -la /mnt/tank/smb_shares - Настройки ACL в TrueNAS: Shares → Windows Shares → Edit → Access
- Параметры аутентификации: Services → SMB → Settings
Проблема 3: Шара не отображается в сетевом окружении
Решение:
# 1. Проверь работу службы
sudo systemctl status smbd
# 2. Перезапусти SMB
sudo midclt call service.restart smb
# 3. Проверь настройки рабочей группы
sudo midclt call smb.config | grep workgroup
# 4. Принудительно обнови браузер сети (на клиенте Windows)
nbtstat -R
Автоматизация и мониторинг
Как настоящий DevOps, ты наверняка хочешь автоматизировать процессы. Вот полезные скрипты.
Скрипт для массового создания SMB-шар
#!/usr/bin/env python3
# create_smb_shares.py - автоматизация создания SMB-шар
import json
import subprocess
shares = [
{
"name": "dev_share",
"path": "/mnt/tank/dev",
"purpose": "default",
"comment": "Development share"
},
{
"name": "media_share",
"path": "/mnt/tank/media",
"purpose": "multimedia",
"comment": "Media storage"
}
]
for share in shares:
cmd = [
"sudo", "midclt", "call", "sharing.smb.create",
json.dumps({
"name": share["name"],
"path": share["path"],
"purpose": share["purpose"],
"comment": share["comment"],
"guestok": False,
"abe": True
})
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print(f"✓ Share '{share['name']}' created successfully")
else:
print(f"✗ Failed to create '{share['name']}': {result.stderr}")
Мониторинг активности SMB
# Просмотр активных подключений
smbstatus
# Детальная статистика
sudo smbstatus -S # По шаре
sudo smbstatus -L # По блокировкам
sudo smbstatus -p # По процессам
# Мониторинг в реальном времени
watch -n 5 'smbstatus | grep -A 10 "Service"'
Безопасность SMB в TrueNAS Scale
Безопасность — не опция, а необходимость. Вот минимальный набор мер.
- Обязательное шифрование: Включи
smb encrypt = requiredв глобальных настройках - Минимальная версия SMB: Установи
server min protocol = SMB3_11для отключения устаревших версий - Ограничение доступа по IP: Используй параметр
hosts allowв настройках шары - Регулярное обновление: TrueNAS Scale получает обновления безопасности — устанавливай их
- Аудит: Включи ведение логов и регулярно их проверяй
# Пример безопасной конфигурации в Auxiliary Parameters
# Обязательное шифрование
server signing = required
smb encrypt = required
# Только современные версии протокола
server min protocol = SMB3_11
client min protocol = SMB3_11
# Ограничение доступа (пример)
hosts allow = 192.168.1.0/24 10.0.0.0/8
hosts deny = 0.0.0.0/0
# Запрет анонимного доступа
restrict anonymous = 2
map to guest = Never