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

  • Автор:

tgt-debian-ubuntu-000.pngПротокол iSCSI получил широкое распространение как простой и недорогой способ организации сетей хранения данных (SAN) поверх обычных Ethernet-сетей. iSCSI не требует приобретения дополнительного оборудования и существенного изменения инфраструктуры, тем не менее позволяя более эффективно использовать пространство в хранилищах и увеличить надежность хранения данных. В данном материале мы рассмотрим создание iSCSI-хранилища в среде современных ОС семейства Debain или Ubuntu, включая многочисленные их производные.

Начиная с Debian 9 Stretch и Ubuntu 18.04 LTS пакет iSCSI Enterprise Target (iscsitarget) был удален и ему на смену пришел Linux SCSI target (tgt), работу с которым мы и будем рассматривать. Все указанные ниже команды следует вводить с правами суперпользователя или используя sudo. В нашем случае использовалась OC Debian 10, но все сказанное будет справедливо для любого основанного на нем дистрибутива, а с некоторыми поправками для любых Linux-систем.

Прежде всего установим Linux SCSI target, не забыв перед этим обновить список пакетов:

apt update
apt install tgt

Серверная часть в iSCSI называется порталом, который содержит цели (таргет, Target), каждая из которых предоставляет клиенту - инициатору (Initiator) доступ к одному или нескольким блочным устройствам. В качестве блочных устройств могут использоваться физические диски, логические тома, файлы (виртуальные диски) и т.д. и т.п. В нашем примере мы будем использовать файл. На наш взгляд это наиболее удобно, так как позволяет достаточно гибко управлять системой хранения - файлы виртуальных дисков можно легко перемещать между серверами или физическими дисками, а также управлять их размерами.

Виртуальные диски могут иметь фиксированный размер или быть динамическими. Диск фиксированного размера сразу занимает все выделенное пространство, но при этом обеспечивает наиболее высокое быстродействие и практически не подвержен фрагментации. Динамический диск увеличивает свой размер по мере записи на него данных, файл диска при этом может фрагментироваться, особенно если активная запись ведется сразу в несколько таких дисков.

Какой же тип выбрать? Здесь все зависит от решаемых задач, если вы заранее знаете объем хранимых данных, и он не будет существенно изменяться - то выбирайте диск фиксированного размера, в иных случаях более предпочтителен динамический диск, как позволяющий более оптимально использовать дисковое пространство.

Для хранения файлов виртуальных дисков мы будем условно использовать директорию /storage, поэтому вам потребуется откорректировать пути в соответствии с реальным расположением данных.

Для создания диска фиксированного размера используйте команду:

dd if=/dev/zero of=/storage/lun0.img bs=1M count=2048

Она создаст файл размером 2 ГБ, так как мы указали размер блока - bs - равным 1 MБ и количество таких блоков - count - 2048.

Для создания динамического диска:

dd if=/dev/zero of=/storage/lun0.img bs=1 count=0 seek=200G

Данная команда создает разреженный файл с максимальным размером 200 ГБ, разреженными называются файлы, которые вместо последовательности нулей на диске хранят информацию об этих последовательностях в специальной таблице.

Для преобразования обычного файла в разреженный выполните команду:

cp --sparse=always filename newfilename

Где filename и newfilename - старое и новое имя файла.

Будем считать, что файлы виртуальных дисков вами созданы и перейдем к настройке Linux SCSI target. Для этого перейдем в /etc/tgt где мы увидим файл targets.conf и директорию conf.d. Предполагается что для каждой цели мы будем использовать отдельный конфигурационный файл, которые следует снабдить расширением .conf и размещать в указанной директории.

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

Создадим новый файл конфигурации:

touch /etc/tgt/conf.d/debain-test.conf

Затем откроем созданный файл и внесем в него следующее содержимое:

<target iqn.2009-02.lab.interface31:deban-test-target> 
backing-store /storage/lunO.img
initiator-address 192.168.111.150
incominguser andrey secretpass12
</target>

В начале секции после директивы target указывается IQN - полностью определенное имя цели, которое имеет следующий формат:

iqn.<year-mo>.<reversed_domain_name>:<unique_name>

где:

  • year-mo - год и месяц регистрации домена
  • reversed_domain_name - доменное имя, записанное в обратном порядке
  • unique_name - уникальное имя цели

Внутри секции цели мы указали следующие опции:

  • backing-store - указывает путь к блочному устройству или файлу
  • initiator-address - IP-адрес инициатора, , если он не указан, то доступ сможет получить любое устройство.
  • incominguser - имя пользователя и пароль, необязательная опция, используется для дополнительной безопасности, по требованию стандарта длина пароля должна быть равна 12 символам.

Если вы хотите предоставлять в одной цели два и более блочных устройства, то для каждого из них добавьте отдельной строкой опцию backing-store, это же касается и initiator-address, их тоже можно указать несколько.

Сохраним файл конфигурации и перезапустим службу Linux SCSI target:

service tgt restart

Проверить работу портала можно командой:

 tgtadm --mode target --op show

Которая покажет все подключенные к нему цели и предоставляемые ими блочные устройства.

tgt-debian-ubuntu-001.pngНа этом настройку цели можно считать законченной. Как видим, никаких особых сложностей в создании iSCSI хранилища в Linux-системах нет.