
Чтобы протестировать корневую файловую систему, мне нужно запустить 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.
- Активировать загрузочное меню в виртуальной машине
- Подключите внешний диск, на котором находится ваша файловая система, включая ядро.
- Если в вашей файловой системе есть ядро и 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-накопителе нет раздела)