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: Linux
Category:
Linux |
No comments »