Создание системы хранения на базе Linux: настройка NFS, SMB и iSCSI с нуля | AdminWiki

Создание системы хранения на базе Linux: настройка NFS, SMB и iSCSI с нуля

19 сентября 2026 18 мин. чтения

Введение: зачем строить СХД на Linux и кому это подходит

Из сервера с Linux и несколькими дисками получается рабочая система хранения: NFS и SMB отдают файлы, iSCSI выделяет блочные LUN. Лицензии вендора, отдельная прошивка и закрытые форматы не нужны, а конфигурация остаётся в текстовых файлах, которые удобно держать в git.

Три сценария, где такая сборка окупается. Домашняя лаборатория на 10-20 ТБ для бэкапов, медиатеки и тестовых виртуальных машин. Офисный файловый сервер на 20-100 человек с группами доступа и квотами. Блочный бэкенд для гипервизоров, кластеров и баз данных, где диск подключается к Proxmox, VMware или Kubernetes как iSCSI-устройство.

Плата за гибкость понятная: за данные и их сохранность отвечаете вы. Резервное копирование, проверка восстановления и мониторинг дисков входят в работу с первого дня, а не после первого сбоя. Базовая подготовка по Linux нужна: командная строка, systemd, разметка дисков, сеть и права. Освежить эти темы поможет руководство по Linux для IT-специалистов: от установки до базового администрирования.

Протокол выбирают по клиенту и типу доступа, а не по привычке.

ПротоколТип доступаКто клиентПортТипичная задача
NFSФайловыйLinux, Unix, macOS2049 TCP (NFSv4)Общие каталоги, домашние папки, бэкапы
SMBФайловыйWindows, macOS, Linux445 TCP, 139 TCP для старых версийОбщие папки для сотрудников, права через AD
iSCSIБлочныйГипервизоры, кластеры, базы данных3260 TCPДиск виртуальной машины, LUN для кластера

Все три протокола спокойно уживаются на одном сервере: NFS-экспорт, SMB-шара и iSCSI-таргет работают одновременно, а нагрузку распределяет сеть. Один сервер при этом остаётся единой точкой отказа, поэтому отказоустойчивость планируют заранее.

Если ещё не определились между блочным, файловым и объектным доступом, начните с разбора объектного, блочного и файлового хранилища, а затем возвращайтесь к настройке.

Подготовка сервера и выбор дискового слоя: LVM или ZFS

Дисковый слой определяет, как вы будете расширять хранилище, делать снапшоты и защищать данные от битых секторов. До разметки зафиксируйте требования: объём, число клиентов, доля случайных операций, допустимый простой. Как связаны между собой уровни хранилища, разобрано в материале про архитектуру программного хранилища.

КритерийLVM с ext4 или XFSZFS
Целостность данныхКонтрольных сумм блоков нет, защита только на уровне RAIDКонтрольные суммы блоков, самовосстановление в зеркале и RAIDZ
СнапшотыЕсть в thin-пуле, занимают место в группе томовМгновенные, на уровне датасета
СжатиеНа уровне тома отсутствуетlz4 и zstd для каждого датасета
Требования к RAMМинимальныеARC кэширует данные, нужен запас памяти
Расширениеlvextend на лету, новый диск добавляется в группу простоvdev добавляется в пул, но удалить его из пула нельзя
Репликацияrsync или DRBDzfs 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Сервер, каталог ресурса
ZFSacltype=posixacl, zfs allow, userquotazfs set, zfs allow
NFSroot_squash, all_squash, anonuid, доступ по IP/etc/exports
Sambavalid users, write list, маски, force group/etc/samba/smb.conf
iSCSIACL инициаторов, CHAP, привязка портала к подсетиtargetcli, /etc/iscsi/iscsid.conf

Аудит доступа делайте теми же инструментами, что и настройку: getfacl по каталогам, exportfs -v по экспортам, testparm -s по шарам, targetcli ls по таргетам.

Квоты для NFS и SMB: практические примеры

Лимит удобнее задавать на уровне файловой системы, тогда одно ограничение работает и для NFS, и для SMB одновременно.

ЗадачаМеханизмКоманда
10 ГБ на пользователя в ext4 или XFSusrquotasetquota -u alice 10485760 11534336 0 0 /srv/files
Квота проекта в XFSpquota и xfs_quotaxfs_quota с limit -p bsoft=50g bhard=55g
10 ГБ на пользователя в ZFSuserquotazfs set userquota@alice=10G tank/smb
Лимит на весь датасет или шарquota датасетаzfs set quota=500G tank/smb
Отчёт клиентам Windowssmbcquotassmbcquotas //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.

Финальный чек-лист перед вводом в работу:

  1. zpool status или vgdisplay не показывают ошибок и деградации.
  2. exportfs -v выводит нужные подсети с опциями sync и root_squash.
  3. testparm проходит без ошибок, вход в шару проверен с Windows и Linux.
  4. iscsiadm -m session показывает состояние logged in для нужных LUN.
  5. Квоты включены и видны в repquota, zfs userspace или xfs_quota.
  6. Файрвол открывает только нужные порты, доступ ограничен подсетями.
  7. Бэкап настроен, восстановление проверено на стенде.
  8. Мониторинг пула, дисков и сессий iSCSI отправляет оповещения.

Развитие хранилища идёт по нарастающей сложности: второй сервер с репликацией zfs send, DRBD для блочных LUN, затем распределённые системы вроде Ceph и подключение томов через Kubernetes CSI. Для готового интерфейса поверх ZFS и тех же протоколов существует TrueNAS SCALE, который экономит время на графической оболочке, но роли NFS, SMB и iSCSI остаются в основе.

Опишите в комментариях, какую схему вы собрали и с какими ошибками столкнулись: разбор реальных конфигураций помогает уточнять это руководство.

Поделиться:
Сохранить гайд? В закладки браузера