qemu не может найти коревое устройство для монтирования

Вопрос или проблема

Я эмулировал встроенную систему Linux FlyOS.img, которая включает загрузочный сектор DOS/MBR и два раздела. Перед этим я извлек vmlinuz и initrd.img из загрузочного раздела img. Команда qemu была выполнена следующим образом:

qemu-system-aarch64 \
-M virt \
-m 1024 \
-cpu cortex-a53 \
-kernel vmlinuz \
-initrd initrd.img \
-drive file=FlyOS.img,format=raw,if=none,id=drive0 \
-device virtio-blk-device,drive=drive0 \
-append 'root=/dev/mmcblk0p2 noresume rw' \
-nographic

Система действительно загрузила img, но она зависла на несколько секунд при монтировании корневой файловой системы, затем появилось сообщение Alert: device does not exist. Dropping to a shell! и система перешла в initramfs. Я пробовал /dev/vda2, /dev/sda2 и т.д., но ни один из них не работает. Может кто-то помочь мне выяснить точную проблему.

Ответ или решение

Проблема «qemu cannot find root device to mount» часто встречается при работе с эмуляторами, такими как QEMU, и может иметь несколько причин. Рассмотрим ваш случай, когда вы пытаетесь запустить эмуляцию встроенной системы на базе образа FlyOS.img с использованием ядра, извлеченного из загрузочного раздела.

1. Проверьте правильность устройства root

Первой причиной проблемы может быть неправильное указание устройства root. В вашем случае командная строка QEMU использует root=/dev/mmcblk0p2, что предполагает, что ваше устройство имеет схему разбиения, аналогичную SD-карте, но при использовании виртуального устройства у вас могут быть другие обозначения.

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

  • /dev/vda2 — для виртуального жесткого диска (VirtIO).
  • /dev/sda2 — для стандартного SCSI-устройства.

Для получения списка доступных устройств, попробуйте выполнить в initramfs команду ls /dev/. Это может помочь вам найти правильное устройство.

2. Проверьте корректность разбиения образа

Убедитесь, что FlyOS.img действительно содержит два раздела и что второй раздел (где находится корневая файловая система) правильно прописан. Вы можете использовать инструменты, такие как fdisk или parted, для просмотра структуры разделов образа. Выполните следующую команду:

fdisk -l FlyOS.img

Это покажет, как разделы распределены в образе. Убедитесь, что второй раздел совпадает с тем, что вы указываете в root=.

3. Убедитесь в наличии необходимых драйверов

Так как вы используете VirtIO для устройства, убедитесь, что ваш initramfs содержит необходимые драйверы для работы с VirtIO. В некоторых случаях может потребоваться пересоздать initramfs, включив в него поддержку VirtIO.

4. Посмотрите на конфигурацию ядра

Также стоит проверить, правильно ли скомпилировано ваше ядро vmlinuz. Оно должно поддерживать необходимые файловые системы (например, ext4, если ваша корневая файловая система на ext4) и драйверы для поддерживаемых устройств.

5. Проверьте параметры QEMU

Параметры запуска QEMU могут повлиять на работоспособность вашей конфигурации. Убедитесь, что все необходимые параметры (такие как -device и -drive) заданы корректно и соответствуют архитектуре и типу вашего образа.

Заключение

Если после всех вышеперечисленных проверок проблема остается нерешенной, рекомендуется обратиться к логам запуска для получения более детальной информации о том, что происходит во время процесса загрузки. Логи могут помочь выявить причину ошибки «device does not exist» и позволят более точно диагностировать проблему.

Помните, что работа с виртуальными машинами требует тщательной проверки всех параметров и настроек. Успехов в вашей работе с QEMU и FlyOS!

Оцените материал
Добавить комментарий

Капча загружается...