Настройка iSCSI target и initiator в RHEL/Fedora

Автор: Андрей Маркелов
Оригинал этого доумента находится по адресу: http://markelov.blogspot.com/2008/11/iscsi-target-initiator-rhelfedora.html

Как известно, при использовании существующей сетевой инфраструктуры iSCSI представляет собой недорогую альтернативу FC, а для целей обучения и тестирования вообще не заменим, поскольку, в ряде случаев, можно обойтись без дорогостоящего оборудования. Безусловно, существует и множество "боевых" конфигураций, когда по тем или иным причинам стоит отдать предпочтение iSCSI. В этом посте я хочу кратко описать настройку iSCSI target и iSCSI initiator в Red Hat Enterprise Linux и Fedora. Нужно отметить, что до версии RHEL 5.2 поддержка iSCSI target присутствовала в статусе Technology Preview. Поддержка же iSCSI initiator присутствует в полном объеме еще с Red Hat Enterprise Linux 4.

Для тестов используем две машины: vm01, которая будет экспортировать раздел /dev/xvda5, и vm02, на которой настроим инициатор.

1) Настройка iSCSI target

Для начала устанавливаем пакет scsi-target-utils и запускаем демон tgtd:

[root@vm01 ~]# yum install scsi-target-utils
...
[root@vm01 ~]# service tgtd start
[root@vm01 ~]# chkconfig tgtd on

Теперь создаем наше целевое устройство. В качестве имени я выбрал iqn.2003-12.net.markelov:disk1

[root@vm01 ~]# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2003-12.net.markelov:disk1
В моем случае я добавляю к целевому устройству свежесозданный раздел /dev/xvda5:
[root@vm01 ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/xvda5
Теперь разрешим доступ хосту vm02 с IP-адресом 192.168.0.109:
[root@vm01 ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.0.109
Проверяем:
[root@vm01 ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2003-12.net.markelov:disk1
System information:
Driver: iscsi
Status: running
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: deadbeaf1:0
SCSI SN: beaf10
Size: 0
Backing store: No backing store
LUN: 1
Type: disk
SCSI ID: deadbeaf1:1
SCSI SN: beaf11
Size: 964M
Backing store: /dev/xvda5
Account information:
ACL information:
192.168.0.109
[root@vm01 ~]#
Под конец не забудьте прорубить "дырку" в брандмауэре для порта 3260/tcp, который используется по умолчанию.

2) Настройка iSCSI initiator

Устанавливаем пакет iscsi-initiator-utils и запускаем демон iscsi:

[root@vm02 ~]# yum install iscsi-initiator-utils
...
[root@vm02 ~]# service iscsi start
iscsid is stopped
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
Setting up iSCSI targets: iscsiadm: No records found!
[ OK ]
[root@vm02 ~]# chkconfig iscsi on
При запуске мы получаем совершенно справедливое сообщение, что не сконфигурирована ни одна из целей. Запускаем процесс обзора для поиска целей на хосте vm01 c IP-адресом 192.168.0.100:
[root@vm02 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.100:3260
192.168.0.100:3260,1 iqn.2003-12.net.markelov:disk1
В итоге будут созданны две поддиректории с информацией о цели и хосте:
[root@vm02 ~]# ls /var/lib/iscsi/nodes/
iqn.2003-12.net.markelov:disk1
[root@vm02 ~]# ls /var/lib/iscsi/send_targets/
192.168.0.100,3260
Просмотреть информацию можно командой:
[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260
node.name = iqn.2003-12.net.markelov:disk1
node.tpgt = 1
...

Теперь, используя содержимое /var/lib/iscsi/nodes/ и /var/lib/iscsi/send_targets/, демон iscsi при каждом перезапуске будет подключать наши ранее обнаруженные цели. Также процессом подключения/отключения можно управлять при помощи утилиты iscsiadm:

[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260 -l
Login session [iface: default, target: iqn.2003-12.net.markelov:disk1, portal: 192.168.0.100,3260]
[root@vm02 ~]#
Теперь команда fdisk покажет наш раздел /dev/sda, экспортированный с vm01:
[root@vm02 ~]# fdisk -l

Disk /dev/xvda: 17.1 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
...
Disk /dev/sda: 1011 MB, 1011677184 bytes
32 heads, 61 sectors/track, 1012 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

Disk /dev/sda doesn't contain a valid partition table
После команды
[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260 -u
Logout session [sid: 2, target: iqn.2003-12.net.markelov:disk1, portal: 192.168.0.100,3260]
в выводе fdisk мы увидим только /dev/xvda. Однако, после рестарта демона iscsi, цель снова появиться в списке устройств. Для удаления всей информации о цели воспользуйтесь командой:
[root@vm02 ~]# iscsiadm -m node -T iqn.2003-12.net.markelov:disk1 -p 192.168.0.100:3260 -o delete
[root@vm02 ~]# ls /var/lib/iscsi/nodes/
[root@vm02 ~]#

Если у вас несколько целей, то вы не можете заранее знать, под каким именем после следующей перезагрузки/рестарта сервиса будет доступна конкретная цель. Для того, чтобы каждая цель всегда была доступна под одним и тем же именем устройства, вы можете написать соответствующее правило udev или воспользоваться монтированием по метке и UUID файловой системы ext3. При монтировании файловых систем не забывайте использовать опцию _netdev.

Для того, чтобы лучше понять лог выполненных команд, рекомендую ознакомиться со следующими источниками:

  • /usr/share/doc/scsi-target-utils-*
  • tgtadm(8)
  • iscsiadm(8)