Создание образа виртуальной машины, iso для KVM


Создание образа виртуальной машины позволяет подготовить шаблон ISO KVM для будущих виртуальных машин.

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

Работа с образами ISO для KVM будет рассмотрена в рамках данного материала.




Образ диска виртуальной машины на KVM


Образ это файл — обычно в формате QCOW2 или RAW (про создание образов).

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

Имея доступ к гипервизору можно получит образ машину остановив её и скопировав файл — образ машины. Без доступа к гипервизору можно сделать то же самое используя утилиту dd, которой диск копируется на внешний сервер из режима восстановления.




Будем рассматривать создание образа виртуальной машины как начальную подготовку шаблона для новых VM


Используем физическую машину с qemu-kvm.

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



Изначально потребуется .img, выделенный под гостевую систему. Создаем его следующей командой

qemu-img create imagename.img 1G



После выполнения команды в текущем каталоге можно будет видеть файл imagename.img объемом 1 Гб.

Создание образа виртуальной машины, iso для KVM


Далее указываем в качестве первого жесткого диска hda только что созданный imagename.img, имя файла .iso и объем памяти, который будет выделяться машине

qemu -hda imagename.img -cdrom name.iso -boot d -m 512


Опция -boot d обеспечит загрузку с cdrom



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



Сейчас поскольку загрузились с imagename.img выделим на нем партиции и установим операционную систему на него



На гостевой системе:

fdisk /dev/hda



Партиции выделяем именно на диске hda, который указали изначально — создадим одну партицию


Просмотреть список существующих

p

Создаем новую партицию

n

Выбираем тип Primary

p

Номер партиции 1

1


Далее дважды нажимаем «Ввод» при указании начала и конца партиции — в этом случае она займет весь диск


Записываем изменения

w

На этом с партициями закончено.



Обращаемся к скрипту, запускающему установку ОС

./install-ubuntu

Файл находим в среди тех, что внутри в iso name.iso, который подключили из командной строки



В процессе установки указываем партицию /dev/hda1 (её создали ранее), остальные запрашиваемые опции можно оставить по-умолчанию



По окончании процесса система будет установлена в файл-образ iso для KVM

Выключаем гостевую машину в графическом интерфейсе (если используется desktop версия) или командой shotdown -h now в консоли.



Сейчас мы можем загрузиться в .img файл


Ищем информацию об опциях загрузки, потребуется использовать «c» для загрузки с жесткого диска

qemu --help | grep boot

qemu -hda imagename.img -cdrom name.iso --boot c -m 256



Или можно не использовать более cdrom и загрузиться сразу в .img файл

qemu -hda imagename.img -m 512



Гостевая система из imagename.img запускается и начинается процесс установки

Все сделанные изменения сейчас (например, установленные пакеты) будут сохранены в .img файл, его можно копировать через dd в HD, затем примонтировать и попасть внутрь через chroot



Chroot в .img файле KVM


Ранее был создан файл imagename.img, который теперь требуется примонтировать в произвольную точку файловой системы, например в /mnt



mount -o loop name.img /mnt

Может возникнуть ошибка

mount: you must specify the filesystem type



Причина ошибки в том, что файловая система на предыдущем шаге была создана только на одной партиции, не на всем диске — исправить это можно с помощью parted

parted name.img

unit

B

print



Последняя команда выведет информацию о всех существующих в name.img партициях, в примере она одна и имеет тип файловой системы ext3



Также в выводе присутствует значение в байтах, с которого начинается партиция и значение на котором она заканчивается. Потребуется значение для начала — это 32256

Выходим из parted

q



mount -o loop,offset=32256 name.img /mnt



После указания offset монтирование завершается корректно

cd /mnt



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



Выполняем chroot


chroot /mnt



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

chroot /mnt /bin/sh



Оболочка shell будет запущена на гостевой системе и мы окажется внутри виртуальной машины



Сейчас гостевая машина недоступна по сети, чтобы исправить этот момент (в случае если сетевые настройки хосты получают автоматически по DHCP) достаточно выполнить:

dhcp eth0


Сейчас из консоли гостевой системы должны быть доступны узлы во внешнем мире

ping ya.ru



Читайте также про KVM виртуализацию в Linux

Сказать спасибо