Вопрос или проблема
Я пытаюсь включить трассировку событий, используя опцию trace-file on в qemu.
Когда я выполнил следующую команду:
sudo qemu-system-x86_64 -drive format=raw,file=/var/lib/libvirt/images/ubuntu-box1-vm-disk1-5G ./build/trace/trace-events-all on
отображается следующее сообщение:
qemu-system-x86_64: ./build/trace/trace-events-all: drive with bus=0, unit=0 (index=0) exists
Я попробовал изменить индекс, добавив index=1,media=disk
,
но это все равно не работает.
У вас нет выбора, кроме как переустановить QEMU.
Безопасный способ будет выполнить:
sudo apt update
sudo apt install --reinstall qemu-system
.
Ответ или решение
Проблема, с которой вы столкнулись при попытке включить трассировку в QEMU, связана с конфликтом размещения устройства, который обычно происходит, когда две или более виртуальные машины или устройства пытаются использовать одно и то же место на виртуальной шине. Это известная проблема, и её решение обычно требует точного понимания конфигурации командной строки QEMU и как системные ресурсы виртуальной машины распределяются при её запуске.
Теория:
При запуске виртуальной машины с использованием QEMU, каждый компонент, включая дисковые образы, подключается к виртуальным шинам и контроллерам. Каждому устройству назначается определённая позиция на шине, идентифицируемая по "шине" (bus) и "устройству" (unit). Ошибка "drive with bus=0, unit=0 (index=0) exists" указывает на то, что попытка подключить новое устройство конфликтует с уже существующим устройством на той же позиции.
Флаг -drive
используется для указания файлов, которые QEMU должен использовать как виртуальные диски, и предполагает определённые параметры, такие как file
, format
, index
, media
и другие. Команда, которую вы пытались выполнить, содержала параметр format=raw
, что указывает, что используется необработанный формат диска. Ошибка подразумевает, что уже есть устройство (или диск) с аналогичными параметрами, установленное в той же позиции (bus=0, unit=0).
Пример:
Рассмотрим аналогичную команду:
sudo qemu-system-x86_64 -drive file=/path/to/disk1.img,format=raw,bus=0,unit=0 -drive file=/path/to/disk2.img,format=raw,bus=0,unit=0
В этом примере возникает конфликт, поскольку оба диска disk1.img
и disk2.img
пытаются занять одно и то же место на шине (bus=0, unit=0). QEMU воспринимает это как попытку использовать одну и ту же шину более чем для одного устройства, что невозможно без явного указания других параметров.
Применение:
Чтобы решить вашу проблему, нужно правильно настраивать параметры командной строки:
-
Проверка существующих конфигураций. Убедитесь, что ни одно устройство или файл, подключаемый через
-drive
, не использует одинаковые параметры шины и устройства. Распределите уникальные значения дляbus
иunit
для каждого устройства. -
Использование правильных индексов. Если несколько дисков должны использоваться, они должны иметь уникальные индексы и позиции на шине. Например:
sudo qemu-system-x86_64 -drive file=/var/lib/libvirt/images/ubuntu-box1-vm-disk1-5G,format=raw,index=0 -drive file=/var/lib/libvirt/images/another-disk.img,format=raw,index=1
-
Использование управления шинами. Если вы используете более сложные конфигурации, например, с несколькими контроллерами, то, возможно, стоит явно указать другой контроллер шины:
sudo qemu-system-x86_64 -drive file=/var/lib/libvirt/images/ubuntu-box1-vm-disk1-5G,format=raw,bus=1,unit=0
-
Изучение документации. Ознакомьтесь с официальной документацией QEMU по теме шины и устройств, чтобы лучше понять, как QEMU управляет виртуальными устройствами и какие параметры доступны для усовершенствования вашей конфигурации.
-
Трассировка и отладка. Попробуйте включить расширенную трассировку и отладку, чтобы получить больше информации о том, что вызывает конфликт.
Кроме вышеупомянутых шагов, рекомендуется обновить и, возможно, переустановить QEMU, чтобы убедиться, что у вас последняя версия, свободная от известных ошибок в управлении шинами и устройствами. Это может быть выполнено через:
sudo apt update
sudo apt install --reinstall qemu-system
Заключив, правильная конфигурация QEMU требует точного понимания псевдоструктуры виртуальной архитектуры, которую он создает. Внимательное изучение параметров командной строки и документации могут предоставить лучшие решения для ваших задач.