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’а. Но по умолчанию нам понадобятся всего несколько строк:
1.
Target iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
2.
Lun 0 Path=/dev/sda3,Type=fileio
3.
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:
1.
# service tgtd start
2.
# chkconfig tgtd on
3.
# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
Добавим к нему LUN:
1.
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /dev/sda3
Разрешим всем доступ:
1.
# tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address=ALL
Проверим, что насоздавали:
01.
# tgtadm --lld iscsi --op show --mode target
02.
Target 1: iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
03.
System information:
04.
Driver: iscsi
05.
State: ready
06.
I_T nexus information:
07.
LUN information:
08.
LUN: 0
09.
Type: controller
10.
SCSI ID: IET 00010000
11.
SCSI SN: beaf10
12.
Size: 0 MB
13.
Online: Yes
14.
Removable media: No
15.
Backing store type: rdwr
16.
Backing store path: None
17.
LUN: 1
18.
Type: disk
19.
SCSI ID: IET 00010001
20.
SCSI SN: beaf11
21.
Size: 105 MB
22.
Online: Yes
23.
Removable media: No
24.
Backing store type: rdwr
25.
Backing store path: /dev/sda3
26.
Account information:
27.
ACL information:
Создание iSCSI-инициатора
Процесс для Ubuntu:
1.
# apt-get install open-iscsi
Настраиваем в файле /etc/iscsi/iscsid.conf:
node.startup = automatic
Остальные параметры оставляем по умолчанию. Если на таргете настроен логин и пароль для подключения, то здесь их можно задать директивами:
node.session.auth.username = username
node.session.auth.password = password
Запускаем сервис и проверяем доступные объекты на сервере:
1.
# /etc/init.d/open-iscsi start
2.
# iscsiadm -m discovery -t sendtargets -p <адрес>
3.
127.0.0.1:3260,1 iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
Подключаемся к сервису:
1.
# iscsiadm --mode node --targetname iqn.2010-10.ru.example:storage.disk2.sys1.agapoff --portal <адрес>:3260
Перезапускаем:
1.
# /etc/init.d/open-iscsi restart
Теперь смотрим либо в fdisk -l, либо в в /var/log/messages и видим, что у нас появилось новое блочное устройство /dev/sdc:
1.
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)
2.
Sep 30 12:22:03 agapov kernel: [1311211.561645] sd 4:0:0:0: [sdc] Write Protect is off
3.
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
4.
Sep 30 12:22:03 agapov kernel: [1311211.562310] sdc:
5.
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 и иже с ними:
01.
# yum install iscsi-initiator-utils
02.
# /etc/init.d/iscsi start
03.
iscsid is stopped
04.
Starting iSCSI daemon: [ OK ]
05.
[ OK ]
06.
Setting up iSCSI targets: iscsiadm: No records found!
07.
[ OK ]
08.
09.
# iscsiadm -m discovery -t sendtargets -p <адрес>
10.
127.0.0.1:3260,1 iqn.2010-10.ru.example:storage.disk2.sys1.agapoff
Информация об обнаруженных таргетах будет сохраняться в /var/lib/iscsi/ и использоваться при перезапуске демона iscsi. дальше – по аналогии с Ubuntu:
1.
# iscsiadm --mode node --targetname iqn.2010-10.ru.example:storage.disk2.sys1.agapoff --portal <адрес>:3260
2.
# /etc/init.d/open-iscsi restart
3.
# fdisk -l
4.
# mount /dev/sdc /mnt/iscsi
На этом заметку можно завершить. Информацию о том, как отключать инициатор от таргета, оставлю за рамками.
Tags: Linux
Category:
Linux |
No comments »