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