Чтобы сервер корректно запустился в Рег.облаке, его операционная система должна содержать нужные компоненты и не иметь привязок к старому оборудованию. Эта подготовка выполняется внутри виртуальной машины до того, как вы создадите из нее файл образа. Если пропустить ключевые шаги, сервер создастся, но останется без сети или не будет выполнять команды из панели.
Ниже приведена пошаговая инструкция по подготовке образов для Linux и Windows.
Общие требования
Перед началом убедитесь, что образ соответствует требованиям платформы:
формат: RAW или QCOW2 — это форматы дисков, которые поддерживает гипервизор;
архитектура: x86_64/amd64 — стандарт для серверных решений;
тип загрузки: BIOS (MBR) или UEFI;
виртуализация: KVM/QEMU.
Обязательные компоненты
Внутри операционной системы обязательно должны быть установлены и настроены 2 ключевых компонента:
-
1
Cloud-init для Linux или Cloudbase-Init для Windows. Отвечает за первичную настройку сервера при запуске в облаке: назначение IP-адреса по DHCP, установку имени хоста, добавление SSH-ключей или задание пароля администратора. Без него вы не сможете получить доступ к серверу после создания.
-
2
Qemu-guest-agent. Обеспечивает корректное взаимодействие с платформой виртуализации. Позволяет выполнять мягкую перезагрузку из панели управления, завершать работу и получать актуальный статус виртуальной машины. Без агента функции управления будут недоступны или будут работать с ошибками.
Также для быстрой и корректной загрузки в среде KVM ядро системы должно содержать модули virtio_net, virtio_scsi, ata_piix и sr_mod. Инструкции по их добавлению приведены для каждой ОС в соответствующем разделе.
Подготовка образа
Для исключения ручных ошибок и обеспечения повторяемости рекомендуется применять Packer со встроенным билдером QEMU/KVM. Пример конфигурационного файла packer.json с ключевыми секциями:
---code
{ «builders»: [{ «type»: «qemu», «format»: «qcow2», «accelerator»: «kvm», «disksize»: «30000», «isourl»: «…», «sshusername»: «root», «shutdowncommand»: «shutdown —h now» }], «provisioners»: [ { «type»: «shell», «scripts»: [ «scripts/install-cloud-init.sh», «scripts/install-qemu-guest-agent.sh», «scripts/configure-cloud-init.sh», «scripts/add-virtio-drivers.sh», «scripts/cleanup.sh» ] } ] }
Где:
add-virtio-drivers.sh — скрипт, добавляющий модули VirtIO и sr_mod в initramfs;
cleanup.sh — очистка системы с помощью cloud-init clean.
После выполнения Packer автоматически создаст готовый QCOW2-файл образа. Для окончательной очистки и сжатия образа используйте утилиту virt-sysprep, как описано в шаге 4 ручной установки.
Пошаговая ручная установка
Если Packer недоступен, выполните следующие шаги вручную.
Шаг 1. Установка компонентов
-
1
Создайте виртуальную машину в локальной среде (VirtualBox или VMware). Рекомендуется использовать один диск и стандартную разметку — это снижает риск проблем при переносе.
-
2
Установите операционную систему.
-
3
Подключитесь к серверу и установите необходимые пакеты:
Для Debian/Ubuntu:
sudo apt update sudo apt install -y cloud-init qemu-guest-agentДля RHEL-подобных систем (CentOS, AlmaLinux, Rocky Linux):
sudo yum install -y cloud-init qemu-guest-agent -
4
Включите автоматический запуск сервисов при загрузке:
sudo systemctl enable cloud-init sudo systemctl enable qemu-guest-agent
Шаг 2. Добавление модулей VirtIO в initramfs
Чтобы система могла загрузиться и получить доступ к диску и сети в среде KVM, необходимые модули ядра должны быть загружены на самом раннем этапе.
Для RHEL-подобных систем:
echo 'add_drivers+=" virtio_net virtio_scsi ata_piix sr_mod "' > /etc/dracut.conf.d/virtio_net.conf
dracut --regenerate-all --force
Для Debian-подобных систем:
printf "virtio_net\nata_piix\nsr_mod" >> /etc/initramfs-tools/modules
update-initramfs -u -k all
Шаг 3. Настройка источников данных Cloud-Init
-
1
Создайте конфигурационный файл, указывающий, откуда cloud-init будет получать настройки при первом запуске:
sudo nano /etc/cloud/cloud.cfg.d/99_datasource.cfg -
2
Добавьте в него следующее содержимое:
datasource_list: [ ConfigDrive, OpenStack, None ]
Где datasource — указывает, что искать данные конфигурации необходимо в сервисе метаданных OpenStack.
Важно
Указание ConfigDrive в приоритете ускоряет получение настроек, т. к. система сначала проверит подключенный CD-ROM, и только потом перейдет к ожиданию доступа к серверу метаданных по сети (169.254.169.254).
Шаг 4. Очистка системы
-
1
Перед созданием образа удалите временные данные и следы предыдущих запусков. Это можно сделать вручную:
sudo cloud-init clean --logs sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \; -
2
Затем выключите виртуальную машину:
sudo shutdown -h now
Шаг 5. Финализация и сжатие образа
На хостовой системе выполните окончательную очистку, а затем сжатие и конвертацию диска с помощью утилит из пакета libguestfs-tools:
virt-sysprep -a /путь/к/исходному_образу.raw
virt-sparsify --convert qcow2 --compress /путь/к/исходному_образу.raw /путь/к/итоговому_образу.qcow2
Где:
/путь/к/исходному_образу.raw — путь к файлу диска виртуальной машины в формате RAW, полученному после экспорта из гипервизора;
/путь/к/итоговому_образу.qcow2 — путь и имя результирующего файла образа в формате QCOW2.
Если вы планируете использовать RAW-образ, просто пропустите шаг с virt-sparsify.
Шаг 6. Проверка перед загрузкой
Внимание
Перед загрузкой в облако проверьте образ в локальной среде KVM. Запускайте виртуальную машину из копии полученного файла образа.
-
1
Создайте копию финального образа:
cp /путь/к/итоговому_обрауз.qcow2 /путь/к/тестовой_копии.qcow2 -
2
Запустите ВМ из файла копии и убедитесь, что:
система загружается без ошибок, возможен вход по SSH или через консоль;
сервисы qemu-guest-agent и cloud-init отработали корректно: статус ВМ отображается в гипервизоре, применены сетевые настройки из ConfigDrive или сервера метаданных.
~~ Windows
Шаг 1. Установка компонентов и драйверов
-
1
Создайте виртуальную машину и установите Windows Server. В настройках виртуальной машины выберите режим BIOS (Legacy) или UEFI.
-
2
Установите последние обновления операционной системы. Это необходимо для закрытия уязвимостей и обеспечения совместимости с облачной платформой.
-
3
Установите драйверы VirtIO с официального сайта Fedora для корректной работы дисков и сетевых интерфейсов в среде KVM.
-
4
Установите QEMU Guest Agent из состава драйверов VirtIO. Без него управление сервером из панели будет ограничено.
-
5
Включите протокол RDP (Remote Desktop Protocol) для возможности удаленного подключения к серверу:
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0 Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Шаг 2. Подготовка системы к клонированию
Перед созданием образа выполните подготовку к его безопасному клонированию:
-
1
Очистите неиспользуемые блоки и уменьшите итоговый размер образа:
Optimize-Volume -DriveLetter C -ReTrim -Verbose -
2
Запустите sysprep с обобщением и выключением:
sysprep /oobe /generalize /shutdown
Система автоматически завершит работу после подготовки.
Шаг 3. Создание образа
После выключения экспортируйте диск в формат QCOW2 или RAW средствами вашей виртуализации. Если образ получен в другом формате, преобразуйте его:
qemu-img convert -f vmdk -O qcow2 /путь/к/исходному_файлу.vmdk /путь/к/итоговому_образу.qcow2
Использование QCOW2 дает выигрыш за счет сжатия нулей и разреженности, что ускоряет загрузку и экономит место при хранении.
Шаг 4. Локальная проверка
-
1
Проверьте образ перед загрузкой в облако. Как и в случае с Linux, запустите виртуальную машину из копии полученного файла, чтобы не испортить очищенный образ процессом настройки:
cp /путь/к/итоговому_образу.qcow2 /путь/к/тестовой_копии.qcow2Где:
/путь/к/итоговому_образу.qcow2 — путь к финальному файлу образа;
/путь/к/тестовой_копии.qcow2 — путь к временной копии для тестового запуска.
-
2
Запустите ВМ из файла копии и убедитесь:
система загружается без ошибок и запускается процесс OOBE (начальной настройки Windows);
после настройки доступно подключение по RDP;
QEMU Guest Agent корректно отрабатывает (статус ВМ отображается в гипервизоре, команды из панели управления выполняются).
Была ли статья полезна?
Спасибо за оценку. Рады помочь 😊