iSCSI дозволяє винести диски в мережу та підключати їх як локальні. У цій інструкції ми розгорнемо iSCSI target на одному вузлі, підключимося з initiator на іншому, використаємо LVM, додамо multipath для відмовостійкості й налаштуємо стабільне автопідключення через systemd. Поясню простою мовою і з реальними прикладами з терміналу Linux 🚀
Що будемо робити і що потрібно
Сценарій: є вузол-target (віддає LUN) і вузол-initiator (підключає та монтує). На target створимо LVM-том і віддамо його через LIO (targetcli-fb). На initiator підключимо LUN, ввімкнемо multipath і змонтуємо. Далі — автопідключення через systemd. Це класика для будь-якого сервер Linux з серйозним сховищем.
- Дистрибутив: Debian 11/12 або Ubuntu 20.04/22.04+
- Права: root або sudo
- Мережа: відкритий TCP 3260 (iSCSI)
Пакети і підготовка
На target (LIO + LVM):
sudo apt update
sudo apt install -y targetcli-fb lvm2
На initiator (open-iscsi, multipath, LVM):
sudo apt update
sudo apt install -y open-iscsi multipath-tools lvm2
Порада: тримайте під рукою нотатки з вашими IP, IQN та іменами VG/LV — це спростить мережеві налаштування і контроль порядку.
Налаштування iSCSI Target (LIO + LVM)
1) Готуємо LVM-том
# На target-вузлі
sudo pvcreate /dev/sdb
sudo vgcreate vg_iscsi /dev/sdb
sudo lvcreate -n lv_data -L 100G vg_iscsi
Переконайтеся, що /dev/vg_iscsi/lv_data існує.
2) Публікуємо LUN через LIO (targetcli)
Прикладні ідентифікатори (замініть під себе):
- IQN target: iqn.2026-08.local.lab:target0
- IQN initiator: iqn.2026-08.local.lab:init1
- IP target: 10.10.10.10
sudo targetcli <<'EOF'
/backstores/block create name=lv_data dev=/dev/vg_iscsi/lv_data
/iscsi create iqn.2026-08.local.lab:target0
/iscsi/iqn.2026-08.local.lab:target0/tpg1/portals create 10.10.10.10 3260
/iscsi/iqn.2026-08.local.lab:target0/tpg1/luns create /backstores/block/lv_data
/iscsi/iqn.2026-08.local.lab:target0/tpg1/acls create iqn.2026-08.local.lab:init1
/saveconfig
/exit
EOF
За замовчуванням конфіг зберігається у /etc/target/saveconfig.json, і LIO підніме його після перезавантаження.
3) Увімкнення автозавантаження LIO
# Сервіс, що відновлює LIO-конфігурацію з /etc/target/
sudo systemctl enable --now rtslib-fb-targetctl.service
Якщо на target буде кілька мережевих інтерфейсів для multipath, додайте ще один портал на іншу IP-адресу:
sudo targetcli /iscsi/iqn.2026-08.local.lab:target0/tpg1/portals create 10.10.20.10 3260
Налаштування iSCSI Initiator з multipath
1) Базова конфігурація open-iscsi
Переконайтеся, що у вас є унікальний IQN ініціатора:
sudo cat /etc/iscsi/initiatorname.iscsi
# Якщо потрібно — відредагуйте IQN під вашу схему імен
Відкрийте доступ до target і знайдіть LUN:
sudo iscsiadm -m discovery -t sendtargets -p 10.10.10.10
# Очікуйте на вивід із рядком вашого IQN target
2) Автологін і старт після мережі
# Встановлюємо автологін для потрібного вузла
iqn_t="iqn.2026-08.local.lab:target0"
portal="10.10.10.10:3260"
sudo iscsiadm -m node -T "$iqn_t" -p "$portal" --op update -n node.startup -v automatic
# Логін зараз
sudo iscsiadm -m node -T "$iqn_t" -p "$portal" --login
# Гарантуємо запуск після мережі
sudo systemctl enable iscsid open-iscsi
sudo mkdir -p /etc/systemd/system/open-iscsi.service.d
printf "%s" "[Unit]
Wants=network-online.target
After=network-online.target
" | sudo tee /etc/systemd/system/open-iscsi.service.d/override.conf
sudo systemctl daemon-reload
sudo systemctl restart open-iscsi
Це — чиста автоматизація задач через systemd, без костилів у rc.local.
3) Увімкнення multipath
Для більшості iSCSI-схем достатньо мінімальної конфігурації:
# Мінімальна конфігурація multipath
sudo mkdir -p /etc/multipath/conf.d
sudo tee /etc/multipath/conf.d/10-iscsi.conf >/dev/null <<'EOF'
defaults {
user_friendly_names yes
find_multipaths smart
}
EOF
sudo systemctl enable --now multipathd
sudo multipath -ll # Перевірити карти
lsblk -o NAME,TYPE,SIZE,VENDOR,MODEL
Якщо є два портали (дві IP) до одного LUN, ви побачите один пристрій типу dm-X (наприклад, /dev/mapper/mpatha) з двома шляхами.
4) Файлова система, монтування і автопідключення
Робіть розмітку і ФС саме на мультипат-ноді (наприклад, /dev/mapper/mpatha):
sudo parted -s /dev/mapper/mpatha mklabel gpt mkpart primary xfs 1MiB 100%
sudo mkfs.xfs -f /dev/mapper/mpatha
sudo blkid /dev/mapper/mpatha # візьміть UUID
sudo mkdir -p /mnt/iscsi
# Додаємо у fstab з мережевими залежностями
sudo tee -a /etc/fstab >/dev/null <<EOF
UUID=<ВАШ-UUID> /mnt/iscsi xfs defaults,_netdev,x-systemd.requires=open-iscsi.service,x-systemd.requires=multipathd.service 0 0
EOF
sudo systemctl daemon-reload
sudo mount -a
Після перезавантаження LUN підніметься автоматично й змонтується, коли мережа готова. Якщо використовуєте LVM поверх iSCSI на ініціаторі, просто замініть mkfs на pvcreate/vgcreate/lvcreate — логіка та сама.
Альтернативні способи і корисні опції
- CHAP-автентифікація: на target у targetcli вмикайте
authentication=1, створюйте ACL і задавайте логін/пароль; на initiator задайтеnode.session.auth.authmethod = CHAPі креденшали через iscsiadm. - tgt (tgtadm) як target: більш простий синтаксис, але LIO/targetcli зараз де-факто стандарт у ядрі.
- fileio backstore: замість LV можна віддавати великий файл як LUN (зручно для тестів).
- LVM thin: на target зробіть thin-pool і віддавайте thin-томи для економії місця.
GUI-спосіб (коли хочеться мишкою)
На ініціаторі можна скористатися Cockpit Web Console. Він зручний, коли ви керуєте багатьма вузлами й не хочете кожен раз лізти в термінал Linux:
# На ініціаторі
sudo apt install -y cockpit cockpit-storaged open-iscsi
sudo systemctl enable --now cockpit.socket
# Відкрийте https://<initiator-ip>:9090 у браузері
У розділі Storage шукайте iSCSI (Initiator), виконайте discovery по IP target і логін. Залежно від версії Cockpit/udisks функціонал може відрізнятися; для тонкої настройки все одно зручно мати поруч консоль. Альтернатива — Webmin із відповідними модулями (особливо для старих дистрибутивів).
FAQ
Чому initiator не логіниться?
Перевірте firewall на target (TCP 3260), чи збігаються IQN у ACL, і що портали правильні. Подивіться логи: journalctl -u iscsid -u open-iscsi -e.
Після перезавантаження LUN зник
Переконайтеся, що node.startup=automatic, служби iscsid/open-iscsi увімкнені і мають залежність від network-online.target. Для монтування використовуйте _netdev і вимогу до multipathd.service.
Multipath показує "no maps"
Увімкніть multipathd, зробіть повторний логін до iSCSI, перевірте find_multipaths smart. Подивіться multipath -ll і dmesg.
Шляхи дублюються як /dev/sdX замість одного /dev/mapper/mpathX
Це нормально до моменту, поки multipathd не збудує карту. Переконайтеся, що монтуєте саме /dev/mapper/mpathX або по UUID.
Хочу авторотацію ключів/паролів CHAP
Скриптуйте через iscsiadm + systemd timers або cron — так, це теж про автоматизація задач 💡
Порада від Kernelka
Давайте вашим IQN осмислені імена з датою і доменом (наприклад, iqn.2026-08.your.domain:roleX). Тестуйте відмову шляху: відключіть один інтерфейс і подивіться, як multipath тримає ФС без падіння — це додає впевненості у проді.
Підсумок
- Target: LVM-том + публікація через LIO (targetcli), збереження конфігу і автозапуск.
- Initiator: discovery → autologin → multipathd → ФС/монтування по UUID.
- systemd забезпечує правильний порядок: після мережі і перед монтуванням.
- Multipath дає відмовостійкість, LVM — гнучкість, iSCSI — мережеву простоту.
- Для керування можна підключити Cockpit, але CLI завжди під рукою у термінал Linux.