iSCSI в Linux для чайников

Date October 14th, 2010 Author Vitaly Agapov

— Потряс ли ты своими знаниями учителей и товарищей своих?
— Потряс…

— «Старик Хоттабыч»

iSCSI – это клиент-серверная архитетура на базе протокола TCP/IP, разработанная для создания и управления системами хранения данных. В рамках архитектуры выделяют сервер и клиент, в контексте iSCSI носящие названия, соответственно, target и initiator. Протокол работает на блочном уровне, то есть таргет выделяет блочное устройство, которой инициатором также интерпретируется как блочное устройство, на котором можно создавать файловую систему, монтировать её и работать с ней, как с любой локальной файловой системой.
Если речь идёт о iSCSI в Linux, то можно сказать, что это “дисковый массив с FC и HBA для бедных”. Однако в ряде случаев iSCSI может быть полезен или даже незаменим.

Создание iSCSI-хранилища (target-сервера)

Для начала надо установить соответствующий пакет. Можно просто поискать по репозиториям. Например, в RedHat-дистрибутивах это:

# yum install scsi-target-utils

В той же Ubuntu:

# apt-get install iscsitarget

Для начала рассмотрим настройку в Ubuntu.

Итак, лезем в /etc/default/iscsitarget и прописывем там

ISCSITARGET_ENABLE=true

Затем открываем /etc/ietd.conf и прописываем там настройки расшариваемого блочного устройства. Настроек в файле достаточно много, все параметры присутствуют с комментариями, так что при желании можно обойтись даже без man’а. Но по умолчанию нам понадобятся всего несколько строк:

Target iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
Lun 0 Path=/dev/sda3,Type=fileio
Alias Test

При желании можно ещё запаролить подключение инициатора с помощью директивы IncomingUser, но лучше рассмотрим указанные три строчки.

В первой строчке задаётся адрес таргета – так называемый iqn (iSCSI Qualified Name), состоящий из следующих частей:

  • iqn – тип адреса;
  • 2010-10 – дата регистрации доменного имени;
  • ru.example – доменное имя в реверсивной форме;
  • storage.disk2.sys1.agapoff – произвольное имя ресурса в пределах домена.

Во второй строке задаётся (в данном случае) одно блочное устройство – LUN (Logical Unit Number). термин LUN обычно применяется в архитектурах SAN и в протоколе SCSI. В данном случае выделяется устройство /dev/sda3 с доступом на чтений и запись. Существует возможность создавать хранилище iSCSI не на отдельном разделе, а в файле. При этом строчка может выглядеть так:

Lun 0 Path=/tmp/file.iscsi0,Type=fileio

Нарастить файл до нужного размера можно с помощью старого-доброго dd.

На этом всё – запускаем:

# /etc/init.d/iscsitarget restart

С Убунтой-Дебианом разобрались. Посмотрим, как настроить iSCSI-таргет в RH. Здесь операции будем производить с помощью утилиты tgtadm.

Создадим target:

# service tgtd start
# chkconfig tgtd on
# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2010-10.ru.example:storage.disk2.sys1.agapoff

Добавим к нему LUN:

# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /dev/sda3

Разрешим всем доступ:

# tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address=ALL

Проверим, что насоздавали:

# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 105 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: /dev/sda3
    Account information:
    ACL information:

Создание iSCSI-инициатора

Процесс для Ubuntu:

# apt-get install open-iscsi

Настраиваем в файле /etc/iscsi/iscsid.conf:

node.startup = automatic

Остальные параметры оставляем по умолчанию. Если на таргете настроен логин и пароль для подключения, то здесь их можно задать директивами:
node.session.auth.username = username
node.session.auth.password = password

Запускаем сервис и проверяем доступные объекты на сервере:

# /etc/init.d/open-iscsi start
# iscsiadm -m discovery -t sendtargets -p <адрес>
127.0.0.1:3260,1 iqn.2010-10.ru.example:storage.disk2.sys1.agapoff

Подключаемся к сервису:

# iscsiadm --mode node --targetname iqn.2010-10.ru.example:storage.disk2.sys1.agapoff --portal <адрес>:3260

Перезапускаем:

# /etc/init.d/open-iscsi restart

Теперь смотрим либо в fdisk -l, либо в в /var/log/messages и видим, что у нас появилось новое блочное устройство /dev/sdc:

Sep 30 12:22:03 agapov kernel: [1311211.561569] sd 4:0:0:0: [sdc] 191494800 512-byte logical blocks: (98.0 GB/91.3 GiB)
Sep 30 12:22:03 agapov kernel: [1311211.561645] sd 4:0:0:0: [sdc] Write Protect is off
Sep 30 12:22:03 agapov kernel: [1311211.561797] sd 4:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Sep 30 12:22:03 agapov kernel: [1311211.562310]  sdc:
Sep 30 12:22:03 agapov kernel: [1311211.563650] sd 4:0:0:0: [sdc] Attached SCSI disk

Что хотели, то и получили. Можем, например, подмонтировать раздел в свою файловую систему, если он отформатирован:

# mount /dev/sdc /mnt/iscsi

Делаем то же самое из-под RedHat, CentOS и иже с ними:

# yum install iscsi-initiator-utils
# /etc/init.d/iscsi start
iscsid is stopped
Starting iSCSI daemon:                                     [  OK  ]
[  OK  ]
Setting up iSCSI targets: iscsiadm: No records found!
[  OK  ]

# iscsiadm -m discovery -t sendtargets -p <адрес>
127.0.0.1:3260,1 iqn.2010-10.ru.example:storage.disk2.sys1.agapoff

Информация об обнаруженных таргетах будет сохраняться в /var/lib/iscsi/ и использоваться при перезапуске демона iscsi. дальше – по аналогии с Ubuntu:

# iscsiadm --mode node --targetname iqn.2010-10.ru.example:storage.disk2.sys1.agapoff --portal <адрес>:3260
# /etc/init.d/open-iscsi restart
# fdisk -l
# mount /dev/sdc /mnt/iscsi

На этом заметку можно завершить. Информацию о том, как отключать инициатор от таргета, оставлю за рамками.

Tags:
Category: Linux | No comments »

Comments

Leave a comment

 Comment Form