iSCSI на Debian/Ubuntu: target, initiator, LVM, multipath і автопідключення через systemd

iSCSI на Debian/Ubuntu: target, initiator, LVM, multipath і автопідключення через systemd
Категорії: Сервери та мережі

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.

Прокоментувати

На сайті відображається лише твоє ім'я та коментар. Електронна пошта використовується виключно для зв'язку з тобою за потреби.