Оглавление

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

Описание тестовой среды

В данном примере в качестве тестовой среды выступает система виртуализации QEMU/KVM в ОС СН Astra Linux Special Edition 1.7.2.

При этом описываемые действия по созданию и настройке гостевых машин выполняются в программе Virt-manager версии 2.2.1-3.

Для организации программной системы хранения данных будет развернута гостевая машина (с наименованием iscsi-target) со следующими параметрами:

  • количество процессоров: 1;
  • размер памяти (ОЗУ): 2 ГБ;
  • один диск для размещения файлов ОС Astra Linux объемом 12 ГБ;
  • два дополнительных диска для эмуляции сетевых блочных устройств объемом 24 ГБ.

При этом вычислительные ресурсы тестового стенда должны обеспечить одновременное функционирование гостевой машины iscsi-target и гостевой машины виртуализации, на которой установлены программные компоненты ПК СВ (далее по тексту – фронтальной машины).

В этом примере в качестве установочного носителя используется файл образа технологического установочного диска 1.7.2-11.08.2022_15.28.iso (установочный диск Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с интегрированным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2)).

1. Создание и настройка программной СХД (iSCSI-target)

Гостевой машине, предоставляющей блочные данные по протоколу iSCSI, будет присвоен IP-адрес: 172.16.1.41 и сетевое имя iscsi-target

Значение IP-адреса гостевой машины iscsi-target выбрано исходя из диапазона, установленного при создании виртуальной сети в Virt-Manager (172.16.1.0 /24) – см. ПК СВ «Брест» в пределах одного сервера (сервисный режим).


  1. Создать гостевую машину iscsi-target. Действия по созданию гостевой машины аналогичны действиям, описанным в статье Создание гостевой машины (за исключением пункта установки дополнительного оборудования — канал SPICE добавлять не нужно). При этом необходимо установить следующие параметры гостевой машины:
    • количество процессоров: 1;
    • размер памяти (ОЗУ): 2 ГБ;
    • объем диска для размещения ОС: 12 ГБ.

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

      Для организации системы хранения в ПК СВ «Брест» требуется выделение как минимум двух сетевых блочных устройств. 

  2. В гостевой машине iscsi-target установить операционную систему специального назначения "Astra Linux Special Edition" РУСБ.10015-01. При этом следует учитывать следующие особенности установки:

    • на странице Установка базовой системы выбрать для установки ядро linux-5.15-generic;
    • на странице Выбор программного обеспечения выбрать пункт Средства удаленного подключения SSH;
    • на странице Дополнительные настройки ОС выбрать Базовый уровень защищенности "Орел";
    • на странице Дополнительные настройки ОС выбрать пункт Запрет автонастройки сети.
  3. Настроить сетевое соединение:
    • в файл /etc/network/interfaces добавить следующие строки:

      auto eth0
      iface eth0 inet static
      address 172.16.1.41
      netmask 255.255.255.0
      gateway 172.16.1.1
      CODE
    • запустить в работу сетевой интерфейс командой:

      sudo ifup eth0

      Далее можно подключиться к гостевой машине из хостовой ОС по SSH.
    • файл /etc/hosts привести к следующему виду:

      127.0.0.1	localhost 
      172.16.1.41 iscsi-target
      CODE
    • задать сетевое имя гостевой машине, выполнив команду:

      sudo hostnamectl set-hostname iscsi-target
      Сообщение об ошибке вида:

      sudo: unable to resolve host <предыдущее_имя_гостевой_машины>: В соединении отказано
      CODE

      можно игнорировать (перед тем как выполнить команду инструмент командной строки sudo обращается к файлу /etc/hosts чтобы определить IP-адрес используя предыдущее имя гостевой машины).

  4. Выключить гостевую машину iscsi-target.
  5. В окне программы Virt-manager на панели инструментов окна гостевой машины iscsi-target нажать на кнопку [Показать виртуальное оборудование].
  6. Подключить к гостевой машине iscsi-target первый диск для эмуляции сетевого блочного устройства:
    • в окне параметров гостевой машины нажать на кнопку [Добавить оборудование] в левом нижнем углу;
    • в открывшемся окне Добавление виртуального оборудования:
      • в левом поле выбрать пункт Хранилище;

      • в правом поле установить флаг Создать образ диска для виртуальной машины;

      • задать размер диска равным 24 ГБ;
      • нажать на кнопку [Готово].

  7. Аналогичным образом подключить к гостевой машине iscsi-target второй диск для эмуляции сетевого блочного устройства.
  8. Подключить образ установочного носителя к гостевой машине iscsi-target (см. Подключение образа установочного носителя к гостевой машине).
  9. Включить гостевую машину iscsi-target.
  10. В ОС гостевой машины iscsi-target вывести перечень блочных устройств:

    lsblk
    Пример вывода после выполнения команды:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1  3,9G  0 rom  
    vda    252:0    0   12G  0 disk 
    ├─vda1 252:1    0   11G  0 part /
    ├─vda2 252:2    0    1K  0 part 
    └─vda5 252:5    0  975M  0 part [SWAP]
    vdb    252:16   0   24G  0 disk 
    vdc    252:32   0   24G  0 disk 
    CODE

    где: 

    • vda – диск для размещения файлов ОС;

    • vdb и vdc – диски для эмуляции сетевых блочных устройств.
  11. В ОС гостевой машины iscsi-target установить консоль управления Linux-IO Target (пакет targetcli-fb):

    sudo apt install targetcli-fb

  12. Войти в консоль управления Linux-IO Target командой:

    sudo targetcli

  13. В консоли управления вывести текущую конфигурацию командой:

    ls
    Пример вывода после выполнения команды:

    o- / ............................................ [...]
      o- backstores ................................. [...]
      | o- block ..................... [Storage Objects: 0]
      | o- fileio .................... [Storage Objects: 0]
      | o- pscsi ..................... [Storage Objects: 0]
      | o- ramdisk ................... [Storage Objects: 0]
      o- iscsi ............................... [Targets: 0]
      o- loopback ............................ [Targets: 0]
      o- vhost ............................... [Targets: 0]
      o- xen-pvscsi .......................... [Targets: 0]
    CODE
  14. Создать (зарегистрировать) блочное устройство /dev/vdb в разделе /backstores/block, присвоив устройству наименование, например, storage01:

    /backstores/block create storage01 /dev/vdb
    Пример вывода после выполнения команды:

    Created block storage object storage01 using /dev/vdb.
    CODE
  15. Проверить результат командой ls. Пример вывода после выполнения команды:

      /> ls
    o- / ............................................................... [...]
      o- backstores .................................................... [...]
      | o- block ........................................ [Storage Objects: 1]
      | | o- storage01 ........... [/dev/vdb (24.0GiB) write-thru deactivated]
      | |   o- alua ......................................... [ALUA Groups: 1]
      | |     o- default_tg_pt_gp ............. [ALUA state: Active/optimized]
      | o- fileio ....................................... [Storage Objects: 0]
      | o- pscsi ........................................ [Storage Objects: 0]
      | o- ramdisk ...................................... [Storage Objects: 0]
      o- iscsi .................................................. [Targets: 0]
      o- loopback ............................................... [Targets: 0]
      o- vhost .................................................. [Targets: 0]
      o- xen-pvscsi ............................................. [Targets: 0]
    CODE
  16. Создать цель (target) в разделе /iscsi командой:

    /iscsi create
    Пример вывода после выполнения команды:

    Created target iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1.
    Created TPG 1.
    Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    CODE
  17. Проверить результат командой ls. Пример вывода после выполнения команды:

    /> ls
    o- / ........................................................................... [...]
      o- backstores ................................................................ [...]
      | o- block .................................................... [Storage Objects: 1]
      | | o- storage01 ........................[/dev/vdb (24.0GiB) write-thru deactivated]
      | |   o- alua ..................................................... [ALUA Groups: 1]
      | |     o- default_tg_pt_gp ......................... [ALUA state: Active/optimized]
      | o- fileio ................................................... [Storage Objects: 0]
      | o- pscsi .................................................... [Storage Objects: 0]
      | o- ramdisk .................................................. [Storage Objects: 0]
      o- iscsi .............................................................. [Targets: 1]
      | o- iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 ...... [TPGs: 1]
      |   o- tpg1 ................................................. [no-gen-acls, no-auth]
      |     o- acls ............................................................ [ACLs: 0]
      |     o- luns ............................................................ [LUNs: 0]
      |     o- portals ...................................................... [Portals: 1]
      |       o- 0.0.0.0:3260 ....................................................... [OK]
      o- loopback ........................................................... [Targets: 0]
      o- vhost .............................................................. [Targets: 0]
      o- xen-pvscsi ......................................................... [Targets: 0]
    CODE
  18. Создать LUN на основе блочного устройства, зарегистрированного в разделе/backstores/block

    /iscsi/<идентификатор_цели>/tpg1/luns/ create /backstores/block/<наименование_устройства>
    где:

    • <наименование_устройства> – в рассматриваемом примере имеет значение "storage01" (см. шаг 14);
    • <идентификатор_цели> – в рассматриваемом примере имеет значение "iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1" (см. шаг 16).

    Пример вывода после выполнения команды:

    Created LUN 0
    CODE
  19. Проверить результат командой ls. Пример вывода после выполнения команды:

    /> ls
    o- / ........................................................................... [...]
      o- backstores ................................................................ [...]
      | o- block .................................................... [Storage Objects: 1]
      | | o- storage01 ........................[/dev/vdb (24.0GiB) write-thru deactivated]
      | |   o- alua ..................................................... [ALUA Groups: 1]
      | |     o- default_tg_pt_gp ......................... [ALUA state: Active/optimized]
      | o- fileio ................................................... [Storage Objects: 0]
      | o- pscsi .................................................... [Storage Objects: 0]
      | o- ramdisk .................................................. [Storage Objects: 0]
      o- iscsi .............................................................. [Targets: 1]
      | o- iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 ...... [TPGs: 1]
      |   o- tpg1 ................................................. [no-gen-acls, no-auth]
      |     o- acls ............................................................ [ACLs: 0]
      |     o- luns ............................................................ [LUNs: 0]
      |     | o- lun0 .................... [block/storage01 (/dev/vdb) (default_tg_pt_gp)]
      |     o- portals ...................................................... [Portals: 1]
      |       o- 0.0.0.0:3260 ....................................................... [OK]
      o- loopback ........................................................... [Targets: 0]
      o- vhost .............................................................. [Targets: 0]
      o- xen-pvscsi ......................................................... [Targets: 0]
    CODE
  20. В рассматриваемом примере контроль доступа не требуется, поэтому его можно отключить:
    • переместиться на ветку /iscsi/<идентификатор_цели>/tpg1:

      cd /iscsi/<идентификатор_цели>/tpg1
      где <идентификатор_цели> – в рассматриваемом примере имеет значение "iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1" (см. шаг 16).

      В консоли управления нажатие клавиши <Tab> автоматически дополняет текущую команду или путь к ветке дерева конфигурации, если возможен только один вариант.

    • отключить использования списков управления доступом (ACL) командой:

      set attribute generate_node_acls=1
      Пример вывода после выполнения команды:

      Parameter generate_node_acls is now '1'.
      CODE
    • настроить работу цели в demo-режиме (без аутентификации, видимым и доступным для всех) командой:

      set attribute demo_mode_write_protect=0
      Пример вывода после выполнения команды:

      Parameter demo_mode_write_protect is now '0'.
      CODE
  21. Повторить шаги 14 – 20 для блочного устройства /dev/vdc (при выполнении действий шага 14 присвоить устройству наименование, например, storage02).
  22. Выполнить сохранение настроек:

    / saveconfig
    Пример вывода после выполнения команды:

    Last 10 configs saved in /etc/rtslib-fb-target/backup.
    Configuration saved to /etc/rtslib-fb-target/saveconfig.json
    CODE
  23. Выйти из консоли управления:

    exit

В консоли управления Linux-IO Target, используемой в ПК СВ версии 3.2, введена система бэкапов конфигурации, и, в связи с этим, после перезагрузки сохраненная конфигурация не загружается автоматически.

На текущий момент после перезагрузки конфигурацию необходимо восстанавливать командой:

sudo targetcli restoreconfig

Пример вывода после выполнения команды:

Configuration restored from /etc/rtslib-fb-target/saveconfig.json
CODE

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

  1. Создать службу  target, сформировав unit-файл, например с помощью тестового редактора  nano, для этого выполнить команду:

    sudo nano /lib/systemd/system/target.service
    В открывшемся текстовом редакторе добавить следующие строки:

    [Unit]
    Description=Restore LIO kernel target configuration
    Requires=sys-kernel-config.mount
    After=sys-kernel-config.mount network.target local-fs.target
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/bin/targetctl restore
    ExecStop=/usr/bin/targetctl clear
    SyslogIdentifier=target
    [Install]
    WantedBy=multi-user.target
    CODE

    После этого сохранить unit-файл и закрыть текстовый редактор.

  2. Перезагрузить список служб командой:

    sudo systemctl daemon-reload

  3. Добавить службу target в автозагрузку командой:

    sudo systemctl enable target
    Пример вывода после выполнения команды:

    Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /lib/systemd/system/target.service.
    CODE
  4. Для проверки следует перезагрузить гостевую машину iscsi-target и вывести информацию о состоянии службы target:

    sudo systemctl status target
    Пример вывода после выполнения команды:

    ● target.service - Restore LIO kernel target configuration
       Loaded: loaded (/lib/systemd/system/target.service; enabled; vendor preset: enabled)
       Active: active (exited) since Mon 2023-03-20 16:28:26 MSK; 9min ago
      Process: 577 ExecStart=/usr/bin/targetctl restore (code=exited, status=0/SUCCESS)
     Main PID: 577 (code=exited, status=0/SUCCESS)
    CODE

2. Подключение сетевых блочных устройств к ПК СВ (настройка iSCSI-initiator)

Действия, описанные в данном разделе, выполняются в ОС фронтальной машины.

  1. Установить пакет open-iscsi:

    sudo apt install open-iscsi

  2. В конфигурационном файле /etc/iscsi/iscsid.conf для параметра node.startup установить значение automatic:

    node.startup = automatic
    CODE
  3. Запустить службу клиента (iSCSI-initiator):

    sudo systemctl start iscsi

  4. Выполнить сканирование для поиска целей (iSCSI-target):

    sudo iscsiadm -m discovery -t st -p 172.16.1.41
    где 172.16.1.41 – IP-адрес гостевой машины iscsi-target.

    Пример вывода после успешного выполнения команды:

    172.16.1.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1
    172.16.1.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098
    CODE
  5. Подключить найденные цели (iSCSI-target):

    sudo iscsiadm -m node -l
    Пример вывода после успешного выполнения команды:

    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 172.16.1.41,3260] (multiple)
    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 172.16.1.41,3260] (multiple)
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 172.16.1.41,3260] successful.
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 172.16.1.41,3260] successful.
    CODE
  6. Для проверки выполнить команду:

    sudo lsblk
    Пример вывода после выполнения команды:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   24G  0 disk 
    sdb      8:16   0   24G  0 disk 
    sr0     11:0    1 1024M  0 rom  
    vda    252:0    0   64G  0 disk 
    ├─vda1 252:1    0   63G  0 part /
    ├─vda2 252:2    0    1K  0 part 
    └─vda5 252:5    0  975M  0 part [SWAP]
    CODE

    где в качестве локальных блочных устройств sda и sdb выступают сетевые блочные устройства, предоставляемые программной СХД (гостевой машиной iscsi-target).

  7. На блочном устройстве sda создать раздел для размещения данных. Для этого запустить инструмент командной строки fdisk в интерактивном режиме:

    sudo fdisk /dev/sda

  8. При появлении приглашения для ввода вида:

    Command (m for help):
    CODE

    ввести "n" (подготовить конфигурацию нового раздела) и нажать клавишу <Enter>. Значения всех запрашиваемых параметров оставить без изменений (сразу нажимать клавишу <Enter>).
    Пример вывода после завершения настройки параметров раздела:

    Created a new partition 1 of type 'Linux' and of size 24 GiB.
    CODE
  9. При появлении приглашения для ввода вида:

    Command (m for help):
    CODE

    ввести "w" (записать на блочное устройство конфигурацию нового раздела) и нажать клавишу <Enter>.

    Пример вывода после завершения настройки параметров раздела:

    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    CODE

    После этого интерактивный режим работы инструмента командной строки fdisk завершится.

  10. Создать файловую систему ext4 в разделе sda1:

    sudo mkfs.ext4 /dev/sda1
    Пример вывода после успешного выполнения команды:

    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    CODE
  11. Повторить шаги 7 – 10 для блочного устройства sdb.

3. Создание (регистрация) хранилищ в веб-интерфейсе ПК СВ

Подключение к веб-интерфейсу ПК СВ описано в статье ПК СВ «Брест» в пределах одного сервера (сервисный режим).

3.1. Создание системного хранилища

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • в поле Название задать наименование хранилища;
    • в выпадающем списке Тип хранилища выбрать значение Filesystem - qcow2 mode;
    • установить флаг Система;
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере системному хранилищу file-ds_system присвоен идентификатор 100.

3.2. Создание хранилища образов

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • в поле Название задать наименование хранилища;
    • в выпадающем списке Тип хранилища выбрать значение Filesystem - qcow2 mode;
    • установить флаг Образы;
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере хранилищу образов file-ds_images присвоен идентификатор 101.

4. Монтирование сетевых блочных устройств к каталогам хранилищ

Действия, описанные в данном разделе, выполняются в ОС фронтальной машины.

  1. В файл /etc/fstab добавить следующие строки:

    /dev/sda1 /var/lib/one/datastores/100 ext4 _netdev,errors=remount-ro 0 1
    /dev/sdb1 /var/lib/one/datastores/101 ext4 _netdev,errors=remount-ro 0 1
    CODE

    таким образом в разделе sda1 будет размещено системное хранилище, а в разделе sdb1 – хранилище образов.

  2. Выполнить монтирование командой:

    sudo mount -a
    Результатом выполнения команды должен быть пустой вывод без ошибок.

  3. Выполнить перезагрузку.
  4. На каталоги созданных хранилищ назначить владельцем пользователя oneadmin. Для этого последовательно выполнить команды:

    sudo chown oneadmin:oneadmin /var/lib/one/datastores/100

    sudo chown oneadmin:oneadmin /var/lib/one/datastores/101

  5. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища убедиться в том, что созданные хранилища имеют актуальный размер.

5. Проверка работы хранилищ

Для проверки работы созданных хранилищ можно выполнить действия по развертыванию ВМ. Для этого: