В представленном примере описаны процессы создания файла образа диска в формате 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).