Создание образа виртуальной машины позволяет подготовить шаблон ISO KVM для будущих виртуальных машин.
А именно: выполнить все необходимые настройки в системе и поставить системные пакеты, которые могут потребоваться.
Работа с образами ISO для KVM будет рассмотрена в рамках данного материала.
Образ диска виртуальной машины на KVM
Образ это файл — обычно в формате QCOW2 или RAW (про создание образов).
Файл содержит операционную систему, все настройки и данные из гостевой операционной системы. Имея образ можно запустить из него виртуальную машину в том же состоянии в котором она была на момент создания образа.
Имея доступ к гипервизору можно получит образ машину остановив её и скопировав файл — образ машины. Без доступа к гипервизору можно сделать то же самое используя утилиту dd, которой диск копируется на внешний сервер из режима восстановления.
Будем рассматривать создание образа виртуальной машины как начальную подготовку шаблона для новых VM
Используем физическую машину с qemu-kvm.
Подготовим образ, на основе которого в дальнейшем можно будет делать создавать виртуальные сервера.
Изначально потребуется .img, выделенный под гостевую систему. Создаем его следующей командой
qemu-img create imagename.img 1G
После выполнения команды в текущем каталоге можно будет видеть файл imagename.img объемом 1 Гб.
Далее указываем в качестве первого жесткого диска 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
Последняя команда выведет информацию о всех существующих в 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