iSCSI Linux · 10 min read · Feb 07, 2026

Настройка iSCSI окружения на Linux

Настройка iSCSI окружения на Linux

В настоящее время технология iSCSI довольно популярна в мире хранения данных. Эта статья демонстрирует окружение iSCSI, которое состоит из одного хоста Debian Linux и одного Netapp Filer. Мы пытаемся показать самые важные функции этого протокола.

1. Что такое iSCSI?

Это сетевой протокол хранения данных, работающий поверх TCP/IP. Этот протокол инкапсулирует данные SCSI в пакеты TCP. iSCSI позволяет нам подключать хост к массиву хранения через простое Ethernet-соединение (ленточный накопитель). Это решение дешевле, чем Fibre Channel SAN (HBAs и коммутаторы Fibre Channel дороги). С точки зрения хоста пользователь видит LUN массивов хранения как локальные диски. Устройства iSCSI не следует путать с NAS-устройствами (например, NFS). Самое важное различие заключается в том, что объемы NFS могут быть доступны нескольким хостам, но один объем iSCSI может быть доступен только одному хосту. Это похоже на протокол SCSI: обычно только один хост имеет доступ к одному SCSI-диску (разница заключается в кластерной среде). Протокол iSCSI определен в документе RFC3720 IETF (Internet Engineering Task Force).

Некоторые критики утверждали, что iSCSI имеет худшую производительность по сравнению с Fibre Channel и вызывает высокую загрузку ЦП на хост-машинах. Я думаю, что если мы используем гигабитный Ethernet, скорость может быть достаточной. Чтобы преодолеть высокую загрузку ЦП, некоторые производители разработали iSCSI TOE (TCP Offload Engine). Это означает, что карта имеет встроенный сетевой чип, который создает и вычисляет TCP-кадры. Ядро Linux не поддерживает это напрямую, и производители карт пишут свои собственные драйверы для ОС.

Самые важные термины iscsi:

Инициатор:

Инициатор — это название клиента iSCSI. Клиент iSCSI имеет доступ на уровне блоков к устройствам iSCSI, которые могут быть диском, ленточным накопителем, DVD/CD-приводом. Один клиент может использовать несколько устройств iSCSI.

Цель:

Цель — это название сервера iSCSI. Сервер iSCSI предлагает свои устройства (диски, ленты, dvd/cd и т. д.) клиентам. Одно устройство может быть доступно только одному клиенту.

Обнаружение:

Обнаружение — это процесс, который показывает цели для инициатора.

Метод обнаружения:

Описывает способ, которым могут быть найдены цели iSCSI. В настоящее время доступны следующие методы:

  • Internet Storage Name Service (iSNS) - Потенциальные цели обнаруживаются путем взаимодействия с одним или несколькими серверами iSNS.
  • SendTargets – Потенциальные цели обнаруживаются с использованием адреса обнаружения.
  • SLP - Обнаружение целей через протокол расположения служб (RFC 4018)
  • Статический – Указан статический адрес цели.

Именование iSCSI:

Документ RFC также охватывает имена iSCSI. Имя iSCSI состоит из двух частей: строка типа и строка уникального имени.

Строка типа может быть следующей:

  • iqn. : квалифицированное имя iscsi
  • eui. : идентификатор eui-64 бит

Большинство реализаций используют формат iqn. Давайте посмотрим на наше имя инициатора: iqn.1993-08.org.debian:01.35ef13adb6d

iqn: мы используем адрес iSCSI с квалифицированным именем. 1993-08: год и месяц, в котором орган по именованию приобрел доменное имя, используемое в имени iSCSI. org.debian: обратное dns-имя, которое определяет организационный орган по именованию. 01.35ef13adb6d: эта строка определяется органом по именованию.

Наше имя цели похоже (iqn.1992-08.com.netapp:sn.84211978). Разница в том, что оно содержит серийный номер Netapp filer. Оба имени могут редактироваться пользователем (инициатор, цель). Нам также нужны два IP-адреса для цели и для инициатора.

Следующая фигура показывает наше демонстрационное окружение. Оно состоит из одного хоста Debian, который является инициатором iSCSI, и доступа к диску iSCSI через устройство /dev/sdb. Netapp filer является нашим целевым устройством iSCSI, которое предлагает диск или LUN /vol/iscsivol/tesztlun0 для хоста Debian Linux. Сессия iSCSI состоит из фазы входа, затем фазы обмена данными.

Именование и уровни iSCSI

2. Поддержка iSCSI на других платформах Unix

Драйвер Cisco iSCSI является одним из первых программных инициаторов iSCSI. Этот драйвер поддерживает все основные коммерческие системы Unix и их версии (HPUX:10.20,11,11i, AIX:4.3.3,5.1,5.2, Solaris: 2.6,7,8,9). Самый ранний релиз можно датировать 2001 годом. В настоящее время каждый поставщик Unix реализует свой собственный драйвер, и мы исследуем эти драйверы.

Solaris:

Solaris 10 (с релиза 1/06) поддерживает iSCSI. Драйвер инициатора может делать следующее:

  • Поддержка нескольких сессий к одной цели: эта функция позволяет одному клиенту создавать несколько сессий iSCSI к одной цели по мере необходимости, и это увеличивает производительность.
  • Мультипатчинг: с помощью функции Solaris Mpxio или IPMP мы можем создать резервные пути к целям.
  • Поддерживаются диски объемом 2 ТБ и аутентификация CHAP. Драйвер Solaris может использовать три метода обнаружения (SLP не может). Диски iSCSI могут быть доступны с помощью программы формата.

HPUX:

HP поддерживает iSCSI с ОС HP11i v1. Этот драйвер может обнаруживать цели через SLP (Service Location Protocol), который также определен IETF (RFC 4018). Это означает, что инициатор iSCSI и цели регистрируют себя в агенте каталога SLP. После регистрации инициатор iSCSI запрашивает только агента каталога. Драйвер HPUX реализует все методы обнаружения. Аутентификация CHAP также реализована, и инструменты мультипутей (PVLinks) также поддерживаются. Драйвер HPUX также предоставляет статистику транспортировки.

AIX:

С версии 5.2 AIX поддерживает iSCSI. Драйвер реализует только статическое обнаружение цели. Мы можем использовать диски iSCSI с мультипутевым подключением AIX, называемым MPIO. Аутентификация CHAP также поддерживается.

Ни один из драйверов не позволяет нам загружаться с iSCSI. Это может быть следующим шагом в разработке драйвера.

3. Реализации iscsi на Linux

Реализации инициаторов:

Cisco также выпустила драйвер для Linux, но он довольно старый.

Реализация Intel iSCSI содержит как драйверы цели, так и инициатора, а также удобный инструмент для генерации рабочих нагрузок.

UNH-iSCSI — это реализация инициатора и цели Университета Нью-Гэмпшира.

Проект Open-iSCSI является самой новой реализацией. Его можно использовать с ядрами 2.6.11 и выше. Мы протестируем этот драйвер с хостом Debian. Он содержит модули ядра и демон iscsid.

Демон iscsid можно запустить с помощью следующей команды:

/etc/init.d/open-scsi start

Операции iSCSI можно контролировать с помощью команды iscsiadm. Команда может обнаруживать цели, входить/выходить из цели и отображать информацию о сессии.

Конфигурационные файлы находятся в каталоге /etc/iscsi:

  • iscsid.conf:         Конфигурационный файл для демона iscsi. Он читается при запуске.
  • initiatorname.iscsi:    Имя инициатора, которое демон читает при запуске.
  • nodes directory:         Каталог содержит узлы и их цели.
  • send_targets directory: Каталог содержит обнаруженные цели.

Процесс установки довольно прост. Выполните:

apt-get install open-iscsi

Этот драйвер в настоящее время реализует метод обнаружения Sendtargets.

Реализации целей:

iSCSI enterprise target — это реализация цели с открытым исходным кодом для Linux. Она основана на реализации Ardis iSCSI для Linux и требует ядра 2.6.14.

Openfiler — это довольно популярная реализация NAS на Linux и предлагает программное обеспечение NAS на базе Linux с веб-интерфейсом.

Многие другие компании предлагают программные коммерческие драйверы целей iSCSI (Amgeon, Mayastor, Chelsio).

Производители массивов хранения также предлагают нативную поддержку iSCSI (EMC, Netapp и т. д.).

Мы выбрали Netapp FAS filer для тестирования, но вы можете протестировать его с помощью бесплатного программного обеспечения. Внизу статьи есть ссылка, которая показывает, как это можно сделать с Openfiler.

4. Настройка демонстрационного окружения iSCSI на Linux

Наше демонстрационное окружение содержит один хост Debian Linux и один Netapp filer. Хост Debian является инициатором, а Netapp filer — целью.

Процесс настройки следующий:

  1. Мы должны настроить соединение tcp/ip между Debian и Netapp filer. Инициатор и цель должны пинговать друг друга. Мы предполагаем, что пакет open-iscsi уже установлен на Debian.
  2. Хост Debian должен обнаружить цели Netapp. Этот процесс называется “обнаружение”. Затем цель отправляет списки целей.
  3. Цель должна разрешить инициатору доступ к LUN. На стороне Netapp это означает, что мы должны создать одну группу инициаторов, которая является логической связью между хостами и LUN. Группа инициаторов содержит LUN и один хост Debian, который может получить доступ к этому LUN.
  4. Когда инициатор получает списки целей, он должен “войти” в цель.
  5. Когда процесс “входа” успешно завершается и Netapp filer разрешает доступ, инициатор может использовать диск iSCSI как обычный диск. Он появляется под устройствами /dev/sdx, и вы можете форматировать, монтировать его как обычный диск.

Вот подробные шаги:

  1. Мы пингуем Netapp filer с Linux хоста:
debian:~# ping nasa

PING nasa (192.168.2.222) 56(84) байт данных.

64 байта от nasa (192.168.2.222): icmp_seq=1 ttl=255 время=0.716 мс 64 байта от nasa (192.168.2.222): icmp_seq=2 ttl=255 время=0.620 мс

Это успешно.

  1. Мы обнаруживаем LUN iSCSI на Netapp filer с помощью команды iscsiadm. Мы выбрали метод обнаружения st (sendtargets). В настоящее время он реализован с помощью этого драйвера:
debian:~# iscsiadm -m discovery -t st -p 192.168.2.222

192.168.2.222:3260 через sendtargets

Давайте посмотрим на обнаруженные цели:

debian:~# iscsiadm -m node

192.168.2.222:3260,1000 iqn.1992-08.com.netapp:sn.84211978

  1. Мы должны подготовить сторону Netapp: в этом примере мы создадим один LUN объемом 4 ГБ (часть RAID-группы) и назначим его хосту Debian. Мы должны проверить свободное место:
nasa> df -k

Файловая система всего использовано      доступно емкость  Смонтировано на
/vol/vol0/ 8388608KB   476784KB 7911824KB       6%  /vol/vol0/
/vol/vol0/.snapshot 2097152KB    10952KB 2086200KB       1% /vol/vol0/.snapshot
/vol/iscsiLunVol/   31457280KB 20181396KB 11275884KB      64%  /vol/iscsiLunVol/
/vol/iscsiLunVol/.snapshot 0KB 232KB 0KB     —% /vol/iscsiLunVol/.snapshotunVol/testlun1

Следующая команда создает один LUN объемом 4 ГБ на томе iscsiLunVol:

nasa> lun create -s 4g -t linux /vol/iscsiLunVol/testlun1

Проверим это:

nasa> lun show

/vol/iscsiLunVol/iscsitestlun    7.0g (7526131200)    (r/w, online, mapped)
/vol/iscsiLunVol/iscsitestlun2    7.0g (7526131200)   (r/w, online, mapped)
/vol/iscsiLunVol/testlun1      4g (4294967296)        (r/w, online)

Мы должны проверить, виден ли хост Debian с хоста Netapp:

nasa> iscsi initiator show

Подключенные инициаторы:
TSIH  TPGroup  Инициатор
19    1000   debian (iqn.1993-08.org.debian:01.35ef13adb6d / 00:02:3d:00:00:00)

Хорошо, мы видим хост Debian. Давайте создадим группу инициаторов, названную Debian2.

nasa> igroup create -i -t linux Debian2 iqn.1993-08.org.debian:01.35ef13adb6d
nasa> igroup show
    Debian2 (iSCSI) (ostype: linux):  
        iqn.1993-08.org.debian:01.35ef13adb6d (вошел в: e0a)

Мы должны назначить вновь созданный LUN хостам Debian2.

nasa> lun map /vol/iscsiLunVol/testlun1 Debian2

lun map: автоматически назначен Debian2=2

Команда проверки:

nasa> lun show -v

/vol/iscsiLunVol/testlun1      4g (4294967296)    (r/w, online, mapped)
Серийный номер: hpGBe4AZsnLV
Доля: нет
Резервирование пространства: включено
Тип мультипротокола: linux
Карта: Debian2=2

  1. Вернемся к нашему хосту инициатора. Теперь все готово для доступа к LUN объемом 4 ГБ. Следующая команда делает диск доступным с хоста Linux.
debian:~#  iscsiadm -m node -T iqn.1992-08.com.netapp:sn.84211978 -p 

192.168.2.222:3260 –login

Мы должны увидеть следующие записи в файле сообщений:

debian:~# tail /var/log/messages
Apr 13 00:31:34 debian kernel: scsi: unknown device type 31
Apr 13 00:31:34 debian kernel:   Vendor: NETAPP Model: LUN               Rev: 0.2
Apr 13 00:31:34 debian kernel: Type: Unknown                            ANSI SCSI revision: 04
Apr 13 00:31:34 debian kernel: Vendor: NETAPP    Model: LUN               Rev: 0.2
Apr 13 00:31:34 debian kernel: Type: Direct-Access                      ANSI SCSI revision: 04
Apr 13 00:31:34 debian kernel: SCSI device sdb: 8388608 512-byte hdwr sectors (4295 MB)
Apr 13 00:31:34 debian kernel: sdb: Write Protect is off
Apr 13 00:31:34 debian kernel: SCSI device sdb: drive cache: write through
Apr 13 00:31:34 debian kernel: sd 1:0:0:2: Attached scsi disk sdb

Диск появляется как устройство sdb ( /dev/sdb).

  1. Мы можем использовать его как обычный диск. Вы можете создать один раздел, и вы можете легко смонтировать его.
debian:~# fdisk /dev/sdb 
debian:~# mkfs /dev/sdb1 ; mount /dev/sdb1 /mnt 

Если вы хотите использовать sdb после следующей перезагрузки, вам следует изменить следующую запись:

node.conn[0].startup = manual на automatic

в файле /etc/iscsi/nodes//. После изменения демон iSCSI войдет в эту цель. Добавление записи автоматического монтирования ( /dev/sdb1 /mnt) в файл /etc/fstab не сработает, потому что демон open-iscsi запустится позже, чем монтирование файловых систем. Простая скрипт может решить эту проблему, который выполняет автоматическое монтирование после запуска демона iSCSI.

Реализация инициатора open-iscsi хорошо переносит сетевые ошибки. Если вы отключите Ethernet-кабель и снова подключите его, вам нужно будет снова запустить процесс ввода-вывода, но повторное подключение происходит автоматически.

Еще одно хорошее решение для сетевых сбоев — создать несколько путей для одного LUN (например: /dev/sdb, /dev/sdc), инициатор входит в две локации (два контроллера RAID), и вы делаете два диска как один логический диск с помощью программного обеспечения Linux multipath ( dmsetup).

Я рекомендую еще одну альтернативу для реализации цели iSCSI: Openfiler (если вы не можете протестировать на Netapp box). Это бесплатное программное обеспечение NAS на базе Linux, которое можно управлять с помощью веб-интерфейса.

Процесс настройки iSCSI довольно похож в случае других реализаций Unix.

5. Резюме и результаты

iSCSI является хорошим решением для недорогого сайта восстановления после катастрофы. Вам не нужно покупать дорогую карту Fibre Channel на сайте восстановления после катастрофы, вы можете использовать Ethernet и iSCSI. Вы также можете использовать его для подключения хостов к массивам дисков без адаптеров хоста Fibre Channel (если массивы поддерживают iSCSI).

Во время теста я запускал хост Debian в программе Vmware player, и мое сетевое соединение было 100 Мбит/с. Я не могу достичь более 15 МБ/с при чтении/записи, но это не имеет значения. С гигабитным Ethernet вы можете достичь гораздо лучшей производительности, единственный недостаток в том, что это увеличивает нагрузку на ЦП (ЦП должен строить и вычислять TCP-кадры).

Вот моя простая домашняя страница.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.