Запуск QEMU с корневым каталогом файловой системы вместо образа диска

Запуск QEMU с корневым каталогом файловой системы вместо образа диска

Чтобы протестировать корневую файловую систему, мне нужно запустить QEMU с созданным образом диска в качестве корневой файловой системы. QEMU принимает параметр -kernel, который можно использовать для указания ядра напрямую, без его развертывания в корневой файловой системе. Однако мне нужна аналогичная функция для корневой файловой системы, чтобы указать путь к извлеченной корневой файловой системе вместо создания образа диска и использовать его с параметрами -hda или -usbdisk.

возможно ли это вообще с помощью одного QEMU?! Или с помощью сторонних инструментов (типа эмулятора образа виртуального диска)

Моя цель — протестировать tar-архив корневой файловой системы без создания образа диска.

решение1

Если ваш rootfs не слишком большой, вы можете использовать initd. Используйте -initrdопцию qemu и предоставьте (сжатый) файл cpio с rootfs. Поэтому, если у вас есть файл tar, вы должны распаковать его и создать вместо этого cpio. Вы должны использовать -H newcформат для cpio. Пример;

mkdir /tmp/rootfs
cd /tmp/rootfs
tar xf /path/to/rootfs.tar
find | cpio --quiet -o -H newc | bzip2 -c > /tmp/rootfs.cpio

Приятно то, что для этого вам не нужны права root или sudo.

решение2

Вы можете записать свою файловую систему на USB-накопитель, а затем подключить его к виртуальной машине QEMU.

Затем смонтируйте его как корневую файловую систему с параметрами ядра в GRUB.

  1. Активировать загрузочное меню в виртуальной машине
  2. Подключите внешний диск, на котором находится ваша файловая система, включая ядро.
  3. Если в вашей файловой системе есть ядро ​​и grub, то все в порядке. В противном случае подключите любой linux live CD также с виртуальной машиной. Отредактируйте командную строку GRUB и используйте свое ядро ​​и корневую файловую систему.

Допустим, у вас есть флешка /dev/sdB(учитывая, что вы также подключили образ жесткого диска, и он есть /dev/sdA, в любом случае вы можете его найти), ваша команда grub будет выглядеть так:

kernel (hd1,gpt0)/location_of-kernel root=/dev/sdB
initramfs mention_if_you_have
boot

Замените gpt0на правильный раздел и /dev/sdBс правильной буквой live /dev/sdb1или /dev/sdb(в случае, если на USB-накопителе нет раздела)

Связанный контент