Вопрос или проблема
У меня была установка чистого сервера Ubuntu. Я создал полный образ диска с помощью dd и конвертировал его в qcow2.
qemu-img convert -O qcow2 full_disk.dd.img full_disk.qcow2
Затем я установил свежую серверную версию Ubuntu 22.04 на эту машину.
Позже я хотел импортировать диск с помощью virt-install:
virt-install --name guest-host --memory 16384 --vcpus 4 --disk path=/var/lib/libvirt/images/full_disk.qcow2,format=qcow2 --os-variant ubuntu20.04 --network network=default --graphics none --import
После этого запускается “консоль” без вывода. qemu-system-x86 работает с загрузкой 100% (на одном ядре) почти бесконечно.
Я могу подключиться с помощью:
virsh --connect qemu:///system console guest-host
но всё равно вывода нет.
virsh edit guest-host
содержит:
<serial type="pty">
<target type="isa-serial" port="0">
<model name="isa-serial"/>
</target>
</serial>
<console type="pty">
<target type="serial" port="0"/>
</console>
--extra-args="console=ttyS0"
аргумент не принимается для импорта.
ОШИБКА Kernel аргументы поддерживаются только для установки с помощью location или kernel.
Что я делаю не так? Как узнать, работает ли гостевая ОС на самом деле?
Ответ или решение
Для того чтобы переместить физический сервер Ubuntu на платформу KVM и обеспечить доступ к консоли, необходимо разобраться с несколькими важными аспектами. Давайте рассмотрим текущий подход и предложим решения для устранения возникших проблем.
Теория
Перемещение операционной системы с физического носителя на виртуальную среду требует тщательной настройки, особенно когда дело касается фактора консоли, которая обеспечивает взаимодействие с гостевой системой. Ключевые моменты:
-
Конвертация диска: Вы правильно выполнили конвертацию образа диска с использованием
qemu-img
. Однако, случается, что конфигурация или драйвера после переноса требуют дополнительных действий для правильной работы в виртуализованной среде. -
Консольный доступ: Чаще всего настройка консольного доступа требует корректного указания параметров загрузки системы, таких как
console=ttyS0
. Эти параметры указывают ядру использовать конкретный терминал для вывода сообщений. -
Производительность: Когда виртуальная машина использует 100% CPU на одном ядре, это может быть признаком конфликта аппаратных ресурсов или некорректной настройки виртуального оборудования (например, недостаточно выделенной памяти или проблем с сетевым адаптером).
Пример
Рассмотрим несколько шагов, которые можно предпринять для решения вашей задачи:
-
Проверка конфигурации ядра: Убедитесь, что в системных файлах гостевой ОС правильно настроены параметры для использования последовательного терминала. Это можно сделать прямым редактированием файла
/etc/default/grub
в гостевой системе. Добавьте или измените строку:GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"
После этого выполните
update-grub
для применения изменений. -
Редактирование XML-конфигурации libvirt: Используйте
virsh edit guest-host
, чтобы просмотреть и при необходимости изменить конфигурацию гостя. Обратите внимание на раздел<channel>
в XML-файле – он может содержать настройки для подключения черезvirtio
. -
Удостоверитесь в корректности команд: Хотя параметр
--extra-args
недоступен для импорта, он может быть полезен, если вы будете создавать новую виртуальную машину с загрузкой через ISO или PXE.
Практическое применение
-
Примените изменения в вашей гостевой машине, правильно указав параметры загрузки ядра для использования необходимого терминала.
-
В случае отсутствия прогресса, рассмотрите создание новой VM и установку с нуля, однако, используя ваш образ для данных и настроек (возможна ручная миграция данных, настройка сервисов и конфигураций).
Посмотрите на упрощение и отлаживание конфигурационных параметров вашей виртуальной машины, чтобы минимизировать возможные точки отказа. Это улучшит ваше понимание происходящего и обеспечит более стабильную работу системы после переноса на KVM.