Введение: зачем строить СХД на Linux и кому это подходит
Из сервера с Linux и несколькими дисками получается рабочая система хранения: NFS и SMB отдают файлы, iSCSI выделяет блочные LUN. Лицензии вендора, отдельная прошивка и закрытые форматы не нужны, а конфигурация остаётся в текстовых файлах, которые удобно держать в git.
Три сценария, где такая сборка окупается. Домашняя лаборатория на 10-20 ТБ для бэкапов, медиатеки и тестовых виртуальных машин. Офисный файловый сервер на 20-100 человек с группами доступа и квотами. Блочный бэкенд для гипервизоров, кластеров и баз данных, где диск подключается к Proxmox, VMware или Kubernetes как iSCSI-устройство.
Плата за гибкость понятная: за данные и их сохранность отвечаете вы. Резервное копирование, проверка восстановления и мониторинг дисков входят в работу с первого дня, а не после первого сбоя. Базовая подготовка по Linux нужна: командная строка, systemd, разметка дисков, сеть и права. Освежить эти темы поможет руководство по Linux для IT-специалистов: от установки до базового администрирования.
Протокол выбирают по клиенту и типу доступа, а не по привычке.
| Протокол | Тип доступа | Кто клиент | Порт | Типичная задача |
|---|---|---|---|---|
| NFS | Файловый | Linux, Unix, macOS | 2049 TCP (NFSv4) | Общие каталоги, домашние папки, бэкапы |
| SMB | Файловый | Windows, macOS, Linux | 445 TCP, 139 TCP для старых версий | Общие папки для сотрудников, права через AD |
| iSCSI | Блочный | Гипервизоры, кластеры, базы данных | 3260 TCP | Диск виртуальной машины, LUN для кластера |
Все три протокола спокойно уживаются на одном сервере: NFS-экспорт, SMB-шара и iSCSI-таргет работают одновременно, а нагрузку распределяет сеть. Один сервер при этом остаётся единой точкой отказа, поэтому отказоустойчивость планируют заранее.
Если ещё не определились между блочным, файловым и объектным доступом, начните с разбора объектного, блочного и файлового хранилища, а затем возвращайтесь к настройке.
Подготовка сервера и выбор дискового слоя: LVM или ZFS
Дисковый слой определяет, как вы будете расширять хранилище, делать снапшоты и защищать данные от битых секторов. До разметки зафиксируйте требования: объём, число клиентов, доля случайных операций, допустимый простой. Как связаны между собой уровни хранилища, разобрано в материале про архитектуру программного хранилища.
| Критерий | LVM с ext4 или XFS | ZFS |
|---|---|---|
| Целостность данных | Контрольных сумм блоков нет, защита только на уровне RAID | Контрольные суммы блоков, самовосстановление в зеркале и RAIDZ |
| Снапшоты | Есть в thin-пуле, занимают место в группе томов | Мгновенные, на уровне датасета |
| Сжатие | На уровне тома отсутствует | lz4 и zstd для каждого датасета |
| Требования к RAM | Минимальные | ARC кэширует данные, нужен запас памяти |
| Расширение | lvextend на лету, новый диск добавляется в группу просто | vdev добавляется в пул, но удалить его из пула нельзя |
| Репликация | rsync или DRBD | zfs send и zfs receive |
Ориентир по выбору: LVM берите для простых файловых серверов, где нужны объём и базовые снапшоты. ZFS берите, когда важны контрольные суммы, сжатие и быстрая репликация и когда есть память под ARC. Строить оба слоя поверх одного набора дисков не нужно.
Создание томов в LVM: пошаговая инструкция
Установите пакеты: apt install lvm2 xfsprogs на Debian и Ubuntu, dnf install lvm2 xfsprogs на RHEL, AlmaLinux и Rocky Linux.
Разметьте диски с выравниванием по 1 МиБ: parted -a optimal /dev/sdb mklabel gpt mkpart primary 1MiB 100%. Повторите команду для /dev/sdc.
Создайте физические тома и группу: pvcreate /dev/sdb /dev/sdc, затем vgcreate vgdata /dev/sdb /dev/sdc. Логический том на 1 ТБ: lvcreate -L 1T -n lvfiles vgdata. Файловая система: mkfs.xfs /dev/vgdata/lvfiles.
Смонтируйте том через fstab. Узнайте UUID командой blkid /dev/vgdata/lvfiles и добавьте строку: UUID=xxxx-xxxx /srv/files xfs defaults,noatime,usrquota,grpquota 0 2. Осталось выполнить mkdir -p /srv/files, mount -a и проверить результат через df -h /srv/files.
Расширение делается без остановки сервисов: lvextend -L +500G -r /dev/vgdata/lvfiles. Ключ -r сам подтянет размер XFS или ext4. Разметку выравнивайте до записи данных, иначе переделывать придётся с копированием. Перед любыми работами с разделами сохраните метаданные: vgcfgbackup vgdata.
Настройка ZFS: пулы и датасеты
В Ubuntu и Debian пакет ставится из основного репозитория: apt install zfsutils-linux. В RHEL-семействе модуль ставят из репозитория OpenZFS: сначала пакет zfs-release, затем dnf install zfs.
Создайте пул из двух дисков в зеркале: zpool create tank mirror /dev/sdb /dev/sdc. Проверьте результат командами zpool status и zpool list.
Дальше создайте датасеты под каждый протокол: zfs create tank/nfs и zfs create tank/smb. Для iSCSI нужен том zvol: zfs create -V 100G tank/iscsi-vm1. Он появится как блочное устройство /dev/zvol/tank/iscsi-vm1, и его можно отдать в бэкстор iSCSI.
Настройте свойства пула и датасетов: zfs set compression=lz4 tank, zfs set atime=off tank, для SMB-датасета zfs set xattr=sa tank/smb и zfs set acltype=posixacl tank/smb. Сжатие lz4 почти не расходует CPU, а на текстовых данных и логах экономит от 30 до 50 процентов места.
Память: ARC по умолчанию забирает до половины RAM и отдаёт её приложению по запросу. Рабочий ориентир для пула на несколько терабайт: 8 ГБ RAM и больше, ECC-память желательна. Дедупликация выключена по умолчанию и требует несколько гигабайт RAM на каждый терабайт данных, поэтому включайте её только под осознанную задачу.
Проверка состояния: zpool status -v, zpool scrub tank по расписанию и zpool events. Ошибки чтения ZFS исправляет сам, если есть копия блока, но о событиях нужно знать.
Настройка NFS: файловый доступ для Unix-клиентов
NFS остаётся базовым способом отдать каталог Linux-клиентам и гипервизорам. Сервер ставится за пару минут: apt install nfs-kernel-server в Debian и Ubuntu либо dnf install nfs-utils в RHEL-семействе.
Экспорты описываются в /etc/exports. Пример строки для подсети: /srv/nfs/data 192.168.10.0/24(rw,sync,no_subtree_check,root_squash). Общая папка только для чтения: /srv/nfs/public *(ro,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534).
Примените конфигурацию: exportfs -ra, затем systemctl enable --now nfs-server. Список действующих экспортов смотрите через exportfs -v.
Откройте доступ в файрволе: firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind и firewall-cmd --reload, либо ufw allow from 192.168.10.0/24 to any port 2049 proto tcp.
NFSv4 работает по одному TCP-порту 2049. Версия NFSv3 использует rpcbind на порту 111 и динамические порты mountd и statd, поэтому для неё порты фиксируют в /etc/nfs.conf либо открывают диапазон. Если клиенты поддерживают NFSv4, оставьте только его.
Проверка с клиента: showmount -e 10.0.0.5, затем mount -t nfs4 10.0.0.5:/srv/nfs/data /mnt/data. Строка для fstab: 10.0.0.5:/srv/nfs/data /mnt/data nfs4 defaults,_netdev,noatime 0 0. Опция _netdev обязательна, иначе загрузка клиента зависнет в ожидании сети.
Опция sync подтверждает запись только после сброса данных на диск. async даёт заметный прирост на мелких операциях, но при отказе сервера часть кэша теряется. Для общих папок с документами выбирайте sync и указывайте его явно, не полагаясь на значение по умолчанию.
Управление правами доступа в NFS
root_squash включён по умолчанию и превращает root клиента в пользователя nobody с uid 65534. Клиентский администратор не получает власть над файлами сервера. Опция no_root_squash снимает эту защиту и даёт root-доступ по сети: держите её точечно, например для сервера бэкапов или гипервизора, который сохраняет владельцев и права файлов.
Для гостевого доступа применяется all_squash с явными anonuid и anongid. Все клиенты тогда видны серверу как один служебный пользователь, и права на каталог выдаются только ему.
Права файловой системы продолжают действовать: chown -R appuser:appgroup /srv/nfs/data и chmod -R 2775 /srv/nfs/data. Цифра 2 в начале режима включает setgid, и новые файлы внутри каталога наследуют группу каталога, а не группу создателя.
В среде Active Directory или LDAP сопоставление uid и gid между клиентами и сервером настраивается через NFSv4 idmap (/etc/idmapd.conf) или через SSSD. В однородной среде с локальными пользователями достаточно совпадения uid на всех хостах.
Разграничение прав по группам, ACL и Kerberos подробно разобрано в статье про настройку NFS и SMB шар с разграничением прав доступа.
Настройка квот в NFS
Своего механизма квот у NFS нет: лимиты задаёт файловая система сервера, а клиент получает ошибку нехватки места.
Для ext4 и XFS добавьте usrquota,grpquota в опции монтирования в /etc/fstab, перемонтируйте том и инициализируйте квоты. Порядок такой: mount -o remount /srv/files, затем quotacheck -cugm /srv/files и quotaon -vug /srv/files. Лимит выставляется командой setquota -u alice 10485760 11534336 0 0 /srv/files, где первые два числа это мягкий и жёсткий лимит в килобайтах, то есть 10 ГБ и 11 ГБ. Интерактивная правка: edquota -u alice.
В ZFS всё короче: zfs set userquota@alice=10G tank/nfs. Посмотреть занятое место: zfs userspace tank/nfs. Квота на весь датасет: zfs set quota=500G tank/nfs.
Квота считается по uid, который видит сервер. При root_squash файлы, созданные клиентским root, попадут в квоту пользователя nobody. После правки fstab без перемонтирования квоты не заработают, поэтому проверяйте вывод mount | grep quota.
Настройка SMB (Samba): общий доступ для Windows и не только
Samba закрывает доступ для Windows, macOS и Linux-клиентов по SMB2 и SMB3, включая SMB 3.1.1 с подписью и шифрованием трафика. Установка: apt install samba на Debian и Ubuntu, dnf install samba samba-client на RHEL-семействе.
Рабочий /etc/samba/smb.conf состоит из двух частей. В секции [global] укажите workgroup = WORKGROUP, server string = Linux Storage, security = user и logging = systemd. Секция ресурса выглядит так: имя секции data, path = /srv/smb/data, browseable = yes, read only = no, valid users = @smbusers, create mask = 0660, directory mask = 2770, force group = smbusers.
Каталог создайте заранее: mkdir -p /srv/smb/data, chown root:smbusers /srv/smb/data, chmod 2770 /srv/smb/data. Пользователей Samba заведите отдельно от системных: smbpasswd -a alice. Пароль хранится в собственной базе TDB, поэтому его задают заново, даже если учётная запись уже есть в системе.
Проверьте конфигурацию через testparm, затем запустите службу: systemctl enable --now smbd. Демон nmbd нужен только для разрешения NetBIOS-имён; в Windows 10 и 11 обзор сети по NetBIOS работает плохо, и для видимости сервера в сетевом окружении обычно ставят wsdd.
Файрвол: 445/tcp для прямого SMB, 139/tcp и 137-138/udp при использовании NetBIOS. Проверка с клиента: smbclient -L //10.0.0.5 -U alice, затем smbclient //10.0.0.5/data -U alice.
При включённом SELinux добавьте политику для каталогов вне стандартных путей: setsebool -P samba_export_all_rw on, далее semanage fcontext -a -t samba_share_t для пути /srv/smb/data и restorecon -Rv /srv/smb/data. В Ubuntu с AppArmor проверьте aa-status и профиль smbd.
Права доступа Samba Linux: тонкая настройка
Итоговый доступ определяет пересечение двух слоёв: прав файловой системы и параметров Samba. Демон проверяет права каталога при открытии файла, поэтому настройка Samba не отменит chmod, а chmod не отменит валидацию пользователя.
Что задают параметры. valid users = @smbusers ограничивает круг пользователей группой. write list = @smbusers оставляет группе право записи, а read only = yes делает ресурс публичным только для чтения. create mask = 0660 и directory mask = 2770 определяют стартовые права новых объектов, force group = smbusers принудительно ставит группу. Параметры inherit permissions = yes и inherit acls = yes переносят настройки родительского каталога на вложенные.
POSIX ACL читаются Samba, если файловая система смонтирована с поддержкой ACL, а на ZFS задан acltype=posixacl. Пример выдачи прав: setfacl -m g:smbusers:rwx /srv/smb/data и setfacl -d -m g:smbusers:rwx /srv/smb/data для наследования по умолчанию. Проверка: getfacl /srv/smb/data.
Интеграция Samba с Active Directory
Для входа в домен нужны пакеты samba, winbind, libnss-winbind, libpam-winbind и krb5-user в Debian и Ubuntu либо samba-winbind и krb5-workstation в RHEL-семействе. В /etc/nsswitch.conf добавьте winbind к строкам passwd и group.
В секции [global] укажите security = ads, realm = EXAMPLE.COM, workgroup = EXAMPLE, kerberos method = secrets and keytab, winbind use default domain = yes. Идентификаторы сопоставляются через idmap: idmap config * : backend = tdb, idmap config * : range = 3000-7999, idmap config EXAMPLE : backend = rid, idmap config EXAMPLE : range = 10000-999999.
Присоединение к домену: net ads join -U administrator. Проверка: wbinfo -u, wbinfo -g, net ads testjoin и getent passwd по доменной учётной записи. Затем systemctl enable --now winbind.
Kerberos допускает расхождение времени не больше 5 минут, поэтому сервер и контроллеры домена берут время из одного источника NTP через chrony. Сдвиг часов ломает аутентификацию и вход в шару с ошибкой доступа.
Samba умеет работать и как контроллер домена, но для файлового сервера в уже существующем домене роль member server проще и предсказуемее.
Настройка iSCSI: блочное хранилище для виртуализации и кластеров
iSCSI передаёт SCSI-команды по TCP на порт 3260 и отдаёт клиенту сырое блочное устройство. Клиент видит его как /dev/sdb или /dev/disk/by-path/..., файловой системы и общих прав там нет: всё определяет то, что вы создадите на этом диске сами. Подробное сравнение протоколов и сценариев есть в статье про протоколы iSCSI, NFS и SMB для систем хранения.
Канал под iSCSI чувствителен к задержкам и потерям пакетов. Гигабитная сеть даёт около 110-115 МБ/с на один поток, чего хватает тестовому стенду, но мало нескольким виртуальным машинам с базами данных. Для рабочей нагрузки планируйте 10GbE и отдельный VLAN под хранение.
Создание iSCSI target на Linux: пошагово
Установите targetcli-fb в Debian и Ubuntu или targetcli в RHEL-семействе. Бэкстор создаётся из блочного устройства (block) либо из файла на существующей файловой системе (fileio). Для продакшена предпочтителен block поверх LVM-тома или zvol.
В интерактивной оболочке targetcli последовательность такая: backstores/block create name=disk1 dev=/dev/zvol/tank/iscsi-vm1, затем iscsi/ create iqn.2026-09.ru.admin-wiki:storage, далее iscsi/iqn.2026-09.ru.admin-wiki:storage/tpg1/luns create /backstores/block/disk1, и в конце iscsi/iqn.2026-09.ru.admin-wiki:storage/tpg1/acls create iqn.2026-09.ru.admin-wiki:client1.
Аутентификацию включите на уровне ACL: set auth userid=inituser password=InitPass123 для созданного инициатора. Проверьте дерево объектов командой targetcli ls, а сохранённую конфигурацию найдите в /etc/rtslib-fb-target/saveconfig.json.
Служба включается через systemctl enable --now target. В Debian и Ubuntu имя юнита может отличаться, поэтому проверьте вывод systemctl list-units | grep -i target. В файрволе откройте 3260/tcp и ограничьте доступ подсетью инициаторов через rich-rule, а не правилом для всех источников.
Отдельный ACL на каждый инициатор упрощает отзыв доступа: удалили ACL, и конкретный хост больше не подключится.
Подключение iSCSI initiator на клиенте
Установите open-iscsi в Debian и Ubuntu или iscsi-initiator-utils в RHEL-семействе. В /etc/iscsi/initiatorname.iscsi задайте имя вида InitiatorName=iqn.2026-09.ru.admin-wiki:client1. Имя должно совпадать с ACL на таргете, иначе вход не пройдёт.
Параметры CHAP правьте в /etc/iscsi/iscsid.conf до первого подключения: node.session.auth.authmethod = CHAP, node.session.auth.username = inituser и node.session.auth.password = InitPass123. Для двусторонней проверки добавьте node.session.auth.username_in и password_in.
Запустите службу systemctl enable --now iscsid, найдите цели командой iscsiadm -m discovery -t sendtargets -p 10.0.0.5:3260 и подключитесь: iscsiadm -m node -T iqn.2026-09.ru.admin-wiki:storage -p 10.0.0.5:3260 -l. Автозапуск при загрузке включается так: iscsiadm -m node -T iqn.2026-09.ru.admin-wiki:storage -p 10.0.0.5:3260 --op update -n node.startup -v automatic.
Проверка: iscsiadm -m session -P 3 показывает состояние сессии и счётчики ошибок, lsblk -S выводит новые диски. В fstab и в конфигурации гипервизора указывайте устойчивый путь /dev/disk/by-path/ip-10.0.0.5:3260-iscsi-iqn.2026-09.ru.admin-wiki:storage-lun-0, а не /dev/sdb, иначе после перезагрузки буква диска может измениться.
Одновременное монтирование одного LUN с двух серверов без кластерной файловой системы разрушает метаданные. Для общих дисковых ресурсов нужны OCFS2, GFS2 или менеджер блокировок гипервизора. Для отказоустойчивого доступа применяйте два независимых пути и multipath.
Управление правами, квотами и производительностью
Права проверяются на каждом слое, и побеждает самый строгий. Пользовательские группы задаются в файловой системе через chown и setfacl, доступ к экспорту ограничивается в /etc/exports, доступ к шаре в smb.conf, а к LUN в ACL и CHAP.
| Слой | Чем управлять | Где настраивается |
|---|---|---|
| Файловая система | chmod, chown, setfacl, getfacl | Сервер, каталог ресурса |
| ZFS | acltype=posixacl, zfs allow, userquota | zfs set, zfs allow |
| NFS | root_squash, all_squash, anonuid, доступ по IP | /etc/exports |
| Samba | valid users, write list, маски, force group | /etc/samba/smb.conf |
| iSCSI | ACL инициаторов, CHAP, привязка портала к подсети | targetcli, /etc/iscsi/iscsid.conf |
Аудит доступа делайте теми же инструментами, что и настройку: getfacl по каталогам, exportfs -v по экспортам, testparm -s по шарам, targetcli ls по таргетам.
Квоты для NFS и SMB: практические примеры
Лимит удобнее задавать на уровне файловой системы, тогда одно ограничение работает и для NFS, и для SMB одновременно.
| Задача | Механизм | Команда |
|---|---|---|
| 10 ГБ на пользователя в ext4 или XFS | usrquota | setquota -u alice 10485760 11534336 0 0 /srv/files |
| Квота проекта в XFS | pquota и xfs_quota | xfs_quota с limit -p bsoft=50g bhard=55g |
| 10 ГБ на пользователя в ZFS | userquota | zfs set userquota@alice=10G tank/smb |
| Лимит на весь датасет или шар | quota датасета | zfs set quota=500G tank/smb |
| Отчёт клиентам Windows | smbcquotas | smbcquotas //server/data -u alice -L |
Пример настройки: 50 ГБ на сотрудника в SMB. При пуле ZFS достаточно zfs set userquota@alice=50G tank/smb. На ext4 или XFS лимит выставляется через setquota с числами 52428800 и 57671680. Проверка занятого места: repquota -a /srv/files, zfs userspace tank/smb, xfs_quota -x -c report /srv.
Квота не заработает на томе, смонтированном без usrquota или uqnoenforce. После правки fstab обязательно перемонтируйте файловую систему, иначе новые опции применятся только после перезагрузки.
Тюнинг производительности NFS, SMB и iSCSI
NFS. На клиенте задайте rsize=1048576 и wsize=1048576, добавьте nconnect=4 или nconnect=8 для NFSv4.1 и новее: несколько TCP-соединений к одному серверу поднимают пропускную способность одного клиента. На сервере число потоков nfsd задаётся параметром threads в /etc/nfs.conf, значение подбирают по числу активных клиентов.
SMB. Включите use sendfile = yes, socket options = TCP_NODELAY, aio read size = 16384 и aio write size = 16384. Для двух сетевых карт полезен параметр server multi channel support = yes: SMB3 multichannel распределит потоки по интерфейсам. Устаревшие read raw и write raw в Samba 4 удалены, включать их не нужно.
iSCSI. Jumbo frames с MTU 9000 настраивают на сервере, клиенте и коммутаторах одновременно; частичное включение даёт фрагментацию и падение скорости. Размер сегмента задают параметры node.session.iscsi.MaxRecvDataSegmentLength и MaxXmitDataSegmentLength в iscsid.conf. Второй независимый путь через отдельную карту и коммутатор вместе с multipath убирает единую точку отказа.
Сеть. Для 10GbE и выше поднимите буферы сокетов через net.core.rmem_max и net.core.wmem_max, а также параметры net.ipv4.tcp_rmem и tcp_wmem. Планировщик tcp_congestion_control=bbr помогает на каналах с большой задержкой, в локальной сети выигрыш небольшой. Синхронную запись ускоряют SSD под ZFS SLOG или батарейный кэш контроллера RAID, а не отключение sync.
Мониторинг нагрузки: iostat -x 5, nfsstat -s, smbstatus -p, zpool iostat -v 5, iscsiadm -m session -P 3 и ss -tnp.
Отключение sync или переход на async ради красивых цифр в бенчмарке повышает риск потери данных при отказе питания. Сначала оцените, сколько операций записи действительно синхронные, и ускорьте именно их.
Отказоустойчивость и резервное копирование
RAID защищает от отказа диска и не защищает от удаления файлов, шифровальщика или ошибки администратора. Зеркало ZFS и RAIDZ2 дают избыточность, mdadm RAID10 пригодится под LVM, аппаратный RAID с батарейным кэшем ускоряет синхронную запись. Регулярно запускайте zpool scrub tank и проверяйте SMART командой smartctl -a /dev/sdb.
Репликация файловых данных в ZFS делается потоком: zfs snapshot tank/smb@backup-2026-09-19, затем zfs send tank/smb@backup-2026-09-19 | ssh backup-host zfs receive backup/smb. Инкрементальная отправка использует ключ -i. Расписание и хранение снапшотов удобно отдать sanoid и syncoid, а удерживать нужные копии помогает zfs hold.
Блочную репликацию LUN закрывает DRBD 9 в схеме active/passive; для автоматического переключения рядом ставят Pacemaker и Corosync. Без менеджера кластера переключение делают вручную, что увеличивает простой.
Файловые бэкапы: rsync -aHAX --delete по расписанию, внешняя копия через rclone в удалённое хранилище, схема 3-2-1 (три копии, два носителя, одна вне площадки). Проверяйте восстановление на отдельном стенде минимум раз в квартал: непроверенную копию нельзя считать бэкапом.
Высокая доступность доступа: два независимых пути для iSCSI через multipath, агрегация каналов LACP для файлового трафика. LACP распределяет потоки, и одна большая копия всё равно пойдёт по одному каналу; здесь помогают nconnect в NFS и SMB multichannel.
Типичные ошибки и как их избежать
- Права заданы только в одном слое. Если каталог закрыт для группы, smbd вернёт отказ даже при корректном smb.conf. Проверяйте оба слоя: ls -l, getfacl, testparm -s, затем пробный доступ через smbclient.
- no_root_squash выставлен для всех клиентов. Любой root в сети получает власть над данными сервера. Оставляйте опцию только для доверенных хостов.
- Квоты не настроены. Один пользователь заполняет том, и NFS с SMB возвращают ошибку нехватки места всем остальным. Ставьте userquota или квоту датасета заранее.
- Файрвол настроен только на 2049. В NFSv3 порты mountd и statd динамические, и клиент зависает на монтировании. Фиксируйте порты в /etc/nfs.conf или переходите на NFSv4.
- SELinux или AppArmor блокирует экспорт каталога вне стандартного пути. Помогают setsebool -P samba_export_all_rw on, semanage fcontext с типом samba_share_t, restorecon и проверка aa-status.
- SMB1 пытаются включить для старых МФУ и сканеров. SMB1 отключён в Windows 11 и в Samba 4.11 и новее, а его возврат открывает известные уязвимости. Заведите для legacy-устройств отдельный хост.
- Рассинхрон времени в домене. Сдвиг часов больше 5 минут ломает Kerberos, и вход в шару падает с ошибкой доступа. Настройте chrony с общим источником времени.
- Один iSCSI LUN подключён к двум хостам без кластерной файловой системы. Метаданные разрушаются, данные теряются. Разделяйте LUN по хостам либо используйте OCFS2 и GFS2.
- Конфигурация не переживает перезагрузку. Проверьте, что службы target и iscsid включены, node.startup стоит в automatic, а в fstab у NFS есть _netdev.
- Мониторинг отсутствует. Деградация пула, рост занятости и ошибки CRC на дисках остаются незамеченными. zpool status и smartctl по расписанию закрывают этот пробел.
Изменения сначала прогоняйте на стенде: виртуальная машина с двумя виртуальными дисками воспроизводит почти все шаги, кроме аппаратных сбоев. Так проверка синтаксиса exports, шары и работы инициатора не затронет рабочую среду.
Заключение: итоговая конфигурация и дальнейшие шаги
Рабочая конфигурация собирается из четырёх блоков: пул ZFS или группа томов LVM, экспорт NFS для Unix-клиентов, шара Samba с валидацией пользователей и iSCSI-таргет с ACL и CHAP. Квоты задаются на уровне файловой системы, права проверяются на каждом слое, бэкап строится на снапшотах и zfs send или rsync.
Финальный чек-лист перед вводом в работу:
- zpool status или vgdisplay не показывают ошибок и деградации.
- exportfs -v выводит нужные подсети с опциями sync и root_squash.
- testparm проходит без ошибок, вход в шару проверен с Windows и Linux.
- iscsiadm -m session показывает состояние logged in для нужных LUN.
- Квоты включены и видны в repquota, zfs userspace или xfs_quota.
- Файрвол открывает только нужные порты, доступ ограничен подсетями.
- Бэкап настроен, восстановление проверено на стенде.
- Мониторинг пула, дисков и сессий iSCSI отправляет оповещения.
Развитие хранилища идёт по нарастающей сложности: второй сервер с репликацией zfs send, DRBD для блочных LUN, затем распределённые системы вроде Ceph и подключение томов через Kubernetes CSI. Для готового интерфейса поверх ZFS и тех же протоколов существует TrueNAS SCALE, который экономит время на графической оболочке, но роли NFS, SMB и iSCSI остаются в основе.
Опишите в комментариях, какую схему вы собрали и с какими ошибками столкнулись: разбор реальных конфигураций помогает уточнять это руководство.