Настройка iSCSI-хранилища в Ubuntu Server/Debian

 

Протокол iSCSI получил широкое распространение как простой и недорогой способ организации сетей хранения данных (SAN). 

В качестве серверной ОС в данном случае мы выбрали Ubuntu Server 16.04 LTS, однако процесс настройки в ее среде ничем не отличается от Debian или любого иного дистрибутива, основанного на любой из этих двух систем.
В Linux-системах в качестве программной цели iSCSI используется iSCSI Enterprise Target (IET) – успевшее зарекомендовать себя надежное и проверенное решение. Для работы с ним потребуется установить два пакета:

apt-get install iscsitarget iscsitarget-dkms

Первый пакет представляет собой собственно программную цель, а второй является DKMS-модулем ядра для поддержки программной цели. Технология DKMS позволяет динамически пересобирать модуль при обновлении версии ядра. Теперь вам не надо беспокоиться, что ваш модуль перестанет работать после обновления ядра, система обо всем позаботится сама. Налицо принцип – поставил и забыл.
Установка потянет за собой довольно много зависимостей, это не удивительно, так как будут установлены все необходимые компоненты для сборки модуля.
Сама сборка будет выполнена в процессе установки и может занять некоторое время.
После установки следует включить автоматический запуск службы цели iSCSI, для этого откройте файл /etc/default/iscsitarget и приведите к следующему виду строку:

ISCSITARGET_ENABLE=true

Теперь можно приступить к созданию целей. На текущем этапе развития технологий в качестве LUN наиболее удобно использовать файлы виртуальных дисков, хотя никто не мешает вам выделить в LUN дисковое устройство или LVM-том. Прежде всего создадим папку для хранения виртуальных дисков и разместим в ней тестовый диск объемом в 2 ГБ:
mkdir /storage
dd if=/dev/zero of=/storage/lun0.img bs=1M count=2048

Для создания файла диска мы воспользовались командой dd, опция bs указывает размер блока – 1 МБ, а опция count – количество этих блоков. Имя файла и расширение могут быть произвольными, в нашем случае это lun0.img.
Для создания программной цели (таргета) откроем файл /etc/iet/ietd.conf и добавим в него следующие строки:

Target iqn.2009-02.lab.interface31:ubuntu-1604-test-lun0-target
IncomingUser test Pa$$word1234
OutgoingUser
Lun 0 Path=/storage/lun0.img,Type=fileio

Разберем синтаксис подробнее. Первая строка задает собственно цель, точнее ее IQN, это полностью определенное имя цели, которое записывается в формате:
iqn..:где:
year-mo – год и месяц регистрации домена
reversed_domain_name – доменное имя, записанное в обратном порядке
unique_name – уникальное имя цели
IncomingUser определяет учетные данные (логин и пароль) для подключения к данной цели, если аутентификация не требуется можно оставить пустым. OutgoingUser – учетные данные для аутентификации на инициаторе в случае использования взаимной проверки подлинности, если не используется – также оставляется пустым. Обратите внимание, согласно стандарту, пароль должен содержать ровно 12 символов.
И наконец Lun описывает доступные для данной цели объекты (LUN), которых может быть несколько, нумерация LUN начинается с нуля. Path указывает путь к файлу виртуального диска, а Type указывает тип доступа. После запятой и перед Type пробел отсутствует.
Например, если мы хотим добавить в цель еще один диск, то следует добавить строку:

Lun 1 Path=/storage/lun1.img,Type=fileio

Согласно стандартам iSCSI тагет должен иметь уникальное квалифицированное
iSCSI-имя (“iSCSI Qualified Name”) следующего формата:

iqn.yyyy-mm.<имя домена в обратном порядке>:<идентификатор раздела>

Если данные находятся в файле

Target iqn.2010-09.com.domain:storage.disk1
Lun 0 Path=/data/Lun0.img,Type=fileio

Если данные расположены на диске, LVM или RAID

Target iqn.2010-09.com.domain:storage.disk2
Lun 0 Path=/dev/sdb,Type=blockio

Закончив настройку сохраняем файл конфигурации и запускаем службу. Управлять ею лучше “по-старинке”, через /etc/init.d, в этом случае вы получите наиболее информативный вывод и сообщения о возможных ошибках:

/etc/init.d/iscsitarget start

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

/etc/init.d/iscsitarget status

Теперь можно попробовать подключитья к нашей цели. В качестве инициатора мы использовали Windows Server 2012R2, который без проблем обнаружил таргет и подключил диск после ввода учетных данных.

Для ограничения доступа к целям служит файл настроек /etc/iet/initiators.allow, содержащий записи об инициаторах, IP-адресах или сетях, которым разрешен доступ. Первым указывается таргет, затем через запятую перечисляются объекты, имеющие к нему доступ. По умолчанию доступ разрешен всем к любым целям:

ALL ALL

Как минимум имеет смысл ограничить доступ только сетью хранения данных, например:

ALL 192.168.18.0/24

При необходимости можно явно ограничить доступ к цели для конкретного инициатора и определенной сети:

iqn.2009-02.lab.interface31:ubuntu-1604-test-lun0-target 192.168.18.0/24, iqn\.1991-05\.com\.microsoft:srv12r2-stor

IQN инициатора может быть записан в виде регулярного выражения, поэтому даже если вы не используете данную возможность, то не забывайте использовать regexp-синтаксис, например, экранирование символа точки.

Как видим, настройка iSCSI-хранилища на базе Linux предельно проста и позволяет быстро и с минимальными затратами развернуть необходимую инфраструктуру.

 

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *