Оглавление

В представленном примере описан процесс создания хранилища образов iSCSI-Libvirt, в котором будет зарегистрирован образ диска с репозиторием оперативного обновления 1.7.2.UU.1.

После успешного развертывания ВМ, к ней будет дополнительно подключен образ диска с репозиторием для установки оперативного обновления.

Исходные данные

Предварительно должен быть подготовлен тестовый стенд ПК СВ, функционирующий в сервисном режиме. К тестовому стенду должны быть подключены хранилища, размеченные с использованием кластерной файловой системы OCFS2.

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

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

Описываемые действия по настройке гостевых машин выполняются в программе "Менеджер виртуальных машин" (Virtual Machine Manager) версии 2.2.1-3.

Для размещения репозитория оперативного обновления 1.7.2.UU.1 будет создан файл образа диска в формате QCow2 объемом 24 ГБ. Образ диска с репозиторием будет подключен к гостевой машине iscsi-target (программная система хранения данных).

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

Перед выполнением действий, описанных ниже, необходимо выключить все гостевые машины тестового стенда.

1. Подготовка образа диска с репозиторием


В представленном примере описаны процессы создания файла образа диска в формате QCow2 и подключения его в хостовой операционной системе.

На подключенный образ диска можно скопировать, например, файлы локального репозитория Astra Linux. Подготовленный образ диска затем можно подключить к гостевой машине для установки оперативного обновления без подключения интернет-репозитория Astra Linux. 

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

qemu-img create -f qcow2 -o size=<размер_диска>G <наименование_диска>.qcow2

Пример

qemu-img create -f qcow2 -o size=24G repo_disk.qcow2

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

Formatting 'repo_disk.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=25769803776 lazy_refcounts=off refcount_bits=16
CODE

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

  1. Загрузить драйвер Network Block Device (NBD):

    sudo modprobe nbd

  2. Подключить образ диска в качестве блочного устройства:

    sudo qemu-nbd -c /dev/nbd0 <наименование_диска>.qcow2
    где /dev/nbd0 – свободное устройство NBD.

    Пример

    sudo qemu-nbd -c /dev/nbd0 repo_disk.qcow2

    Появление сообщения об ошибке вида:

    ...
    Failed to set NBD socket
    ...
    CODE

    означает, что указанное устройство NBD занято. Необходимо выполнить подключение к другому блочному устройству (nbd1, nbd2 и т.д.).

    Появление сообщения об ошибке вида:

    Failed to open /dev/nbd0: No such file or directory...
    CODE

    означает, что  драйвер NBD не был загружен.

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

  1. Просмотреть разделы на блочном устройстве:

    sudo fdisk -l /dev/nbd0
    Пример вывода после выполнения команды:

    Диск /dev/nbd0: 24 GiB, 25769803776 байт, 50331648 секторов
    Единицы: секторов по 1 * 512 = 512 байт
    Размер сектора (логический/физический): 512 байт / 512 байт
    Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
    CODE
  2. Создать раздел на диске (один, первичный, размером равный объему всего диска). Для этого:
    • запустить инструмент командной строки fdisk в интерактивном режиме:

      sudo fdisk /dev/nbd0

    • при появлении приглашения для ввода вида:

      Команда (m для справки):
      CODE

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

      Создан новый раздел 1 с типом 'Linux' и размером 24 GiB.
      CODE
    • при появлении приглашения для ввода вида:

      Команда (m для справки):
      CODE

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

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

      Таблица разделов была изменена.
      Вызывается ioctl() для перечитывания таблицы разделов.
      Синхронизируются диски.
      CODE

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

  3. Просмотреть разделы на блочном устройстве:

    sudo fdisk -l /dev/nbd0
    Пример вывода после выполнения команды:

    ...
    Устр-во     Загрузочный начало    Конец  Секторы Размер Идентификатор Тип
    /dev/nbd0p1               2048 50331647 50329600    24G            83 Linux
    CODE
  4. Создать файловую систему ext4 в разделе nbd0p1:

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

    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    CODE
  5. Создать каталог, например, /tmp/repo, для монтирования созданного раздела:

    mkdir /tmp/repo

  6. Примонтировать раздел:

    sudo mount /dev/nbd0p1 /tmp/repo

  7. Скопировать в каталог /tmp/repo файлы локального репозитория Astra Linux, например, базовый репозиторий оперативного обновления 1.7.2.UU.1 (БЮЛЛЕТЕНЬ № 2022-1011SE17MD). Для этого необходимо в каталоге с tar-архивом обновленного базового репозитория выполнить команду:

    sudo tar zxvf base-1.7.2.11-04.10.2022_16.55.tgz -C /tmp/repo

После завершения копирования, необходимо выполнить последовательность действий, описанную ниже.

  1. Отмонтировать раздел:

    sudo umount /tmp/repo

  2. Отключить образ диска:

    sudo qemu-nbd -d /dev/nbd0
    Пример вывода после успешного выполнения команды:

    /dev/nbd0 disconnected
    CODE
  3. Выгрузить драйвер Network Block Device:

    sudo modprobe -r nbd

Далее файл образа можно подключить в качестве дополнительного диска к гостевой машине.

Файл образа диска предварительно должен быть скопирован в пул хранилища (по умолчанию /var/lib/libvirt/images).

2. Создание и настройка цели (iSCSI-target)

  1. Подключить подготовленный образ диска к гостевой машине iscsi-target.
  2. Включить гостевую машину iscsi-target.
  3. В ОС гостевой машины 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 
    vdd    252:48   0   24G  0 disk 
    └─vdd1 252:49   0   24G  0 part 
    CODE

    где:

    • vda – диск для размещения файлов ОС;
    • vdb и vdc – диски для эмуляции сетевых блочных устройств;
    • vdd – блочное устройство, на котором размещены файлы репозитория.
  4. Войти в консоль управления Linux-IO Target командой:

    sudo targetcli

  5. Создать (зарегистрировать) блочное устройство /dev/vdd в разделе /backstores/block, присвоив устройству наименование, например, repo-disk:

    /backstores/block create repo-disk /dev/vdd
    Пример вывода после выполнения команды:

    Created block storage object repo-disk using /dev/vdd.
    CODE
  6. Создать цель (target) в разделе /iscsi командой:

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

    Created target iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.c43be0f8555b.
    Created TPG 1.
    Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    CODE
  7. Создать LUN на основе блочного устройства, зарегистрированного в разделе/backstores/block

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

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

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

    Created LUN 0
    CODE
  8. Отключить контроль доступа:
    • переместиться на ветку /iscsi/<идентификатор_цели>/tpg1:

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

      В консоли управления нажатие клавиши <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
  9. Выполнить сохранение настроек:

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

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

    exit

3. Настройка ПК СВ для использования хранилища

  1. Включить гостевую машину node1 (узел виртуализации);
  2. В ОС гостевой машины node1 установить пакет libiscsi-bin командой:

    sudo apt install libiscsi-bin

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

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

    В представленном примере хранилищу образов iscsi_libvirt-images присвоен идентификатор 102.

5. Регистрация блочного устройства в хранилище

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Образы.
  2. На открывшейся странице Образы нажать на кнопку [+], затем в открывшемся меню выбрать пункт Создать.
  3. На открывшейся странице Укажите параметры нового образа выполнить действия:
    • в поле Название задать наименование образа диска;
    • в выпадающем списке Тип выбрать значение Общий блок данных хранилища;
    • в выпадающем списке Хранилище выбрать созданное ранее хранилище образов iSCSI-Libvirt;
    • в выпадающем списке Этот образ является постоянным выбрать значение Да;
    • в секции Расположение образа установить флаг Путь/URL и в поле Путь на сервере OpenNebula или URL указать идентификатор блочного устройства (см. шаг 6 раздела Создание и настройка цели (iSCSI-target)).
  4. На странице Укажите параметры нового образа нажать на кнопку Создать.
  5. На открывшейся странице Образы необходимо удостовериться в том, что созданный образ имеет статус ГОТОВО.

Перед выполнением дальнейших действий необходимо развернуть ВМ и выполнить установку ОС в ней (см. Создание предварительного шаблона и установка ОС в ВМ). Во время действий по созданию ВМ из шаблона следует дополнительно указать необходимость развертывания ВМ на узле виртуализации node1. Для этого на странице Создать ВМ необходимо раскрыть секцию Выбрать узел для развертывания и указать узел виртуализации node1.

6. Подключение блочного устройства к ВМ

  1. Выключить ВМ.
  2. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Экземпляры ВМ — ВМ выбрать ВМ, к которой необходимо подключить блочное устройство.
  3. На открывшейся странице ВМ открыть вкладку Хранилище и нажать кнопку Добавить диск.
  4. В открывшемся окне Присоединить диск выбрать зарегистрированный образ диска с репозиторием и нажать кнопку Присоединить.
  5. Дождаться момента, когда в столбце Действия появятся кнопки действий.

    для обновления страницы можно воспользоваться кнопкой Обновить.

7. Установка оперативного обновления в ВМ с использованием блочного устройства

  1. Запустить виртуальную машину.
  2. В ОС виртуальной машины вывести перечень блочных устройств:

    lsblk

    Чтобы запустить терминал в ВМ, можно воспользоваться графическим интерфейсом: Меню Пуск – Системные — Терминал Fly.

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

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT  
    sda      8:0    0   24G  0 disk 
    └─sda1   8:1    0   24G  0 part 
    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]
    CODE

    где sda – блочное устройство, на котором размещены файлы репозитория.

  3. Создать каталог для размещения репозитория, например, /srv/base-repository/:

    sudo mkdir /srv/base-repository

  4. Примонтировать раздел блочного устройства, на котором размещены файлы репозитория:

    sudo mount /dev/sda1 /srv/base-repository

  5. Подключить в качестве локального репозитория каталог /srv/base-repository/, для этого в файле /etc/apt/sources.list добавить строку вида:

    deb file:/srv/base-repository/ 1.7_x86-64 main contrib non-free
    CODE

    Если в качестве источников пакетов ранее был указан оптический установочный диск, т.е. присутствует строка вида:

    deb cdrom:[<наименование_установочного_диска>]/ 1.7_x86-64 contrib main non-free
    CODE

    то эту строку необходимо закомментировать (установить символ "#" в начале строки).

  6. Выполнить повторную синхронизацию файлов описаний пакетов с их источником командой:

    sudo apt update

  7. Установить обновление, выполнив команду:

    sudo astra-update -A -r -T

  8. Перезагрузить ВМ.

После установки оперативного обновления образ диска с репозиторием можно отключить от ВМ.