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

Создание образа виртуальной машины позволяет выполнить все необходимые настройки в системе и поставить системные пакеты, которые могут потребоваться, затем упаковать всю конфигурацию в образ из которого можно будет создавать сколько угодно много гостевых систем. Работа с образами iso для KVM будет рассмотрена в рамках данного материала.

 

 

Образ представляет собой iso для KVM который используется при создании новых серверов

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

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

qemu-img create imagename.img 1G

 

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

 

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

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

 

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

 

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

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

 

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

fdisk /dev/hda

 

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

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

p

 

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

n

 

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

p

 

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

1

 

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

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

w

 

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

./install-ubuntu

 

Файл находим в среди тех, что находятся в iso внутри которого сейчас находимся

 

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

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

 

Выключаем гостевую машину в графическом интерфейсе (если используется дескотоп версия) или командой 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