Как создать образ диска для VirtualBox

Простой пример.
Имеем ядро линукс, имеем файловую систему.
Как создать образ диска для VirtualBox?

Поскольку в openWrt этот механизм реализован, то будем использовать инструменты openwrt для реализации этой цели, поэтому необходимо собрать openWrt для конфигурации x86.

Всё описание приведено с использованием сборки openwrt для x86. Все скрипты и утилиты, которые используются здесь, присутствуют либо в target/linux/x86, либо в staging_dir/host.

1. создание образа openwrt-x86-generic-combined-ext4.img.

OPENWRT_DIR="/home/user1/MyWork/openWrt_X86/barrier_breaker"

cd $OPENWRT_DIR/target/linux/x86/image

PADDING="y" ./gen_image_generic.sh \
$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.img 4 \
$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/root.grub 48 \
$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/root.ext4 256

2. grub-bios-setup

grub-bios-setup --device-map="/home/user1/MyWork/openWrt_X86/barrier_breaker/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/grub2/device.map" -d "/home/user1/MyWork/openWrt_X86/barrier_breaker/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/grub2" -r "hd0,msdos1" "/home/user1/MyWork/openWrt_X86/barrier_breaker/bin/x86/openwrt-x86-generic-combined-ext4.img"

3. Создание VDI образа

qemu-img convert -f raw -O vdi \
$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.img \
$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.vdi

Весь скрипт целиком:

#!/bin/bash

OPENWRT_DIR="/home/user1/MyWork/openWrt_X86/barrier_breaker"

cd $OPENWRT_DIR/target/linux/x86/image

PADDING="y" ./gen_image_generic.sh \
$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.img 4 \
$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/root.grub 48 \
$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/root.ext4 256

./grub-bios-setup --device-map="$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/grub2/device.map" \
-d "$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/grub2" \
-r "hd0,msdos1" "$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.img"

qemu-img convert -f raw -O vdi \
$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.img \
$OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.vdi

Образ в формате VDI будет расположен в директории $OPENWRT_DIR/bin/x86/openwrt-x86-generic-combined-ext4.vdi

Ядро в формате vmlinuz располагается в директории:
$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/root.grub

Для получения образа vmlinuz при одиночной сборке ядра следует использовать команду:

make bzImage && cp ./arch/x86/boot/bzImage ./arch/x86/boot/vmlinuz

Корневая файловая система представлена в виде образа файлом в :
$OPENWRT_DIR/build_dir/target-i386_i486_uClibc-0.9.33.2/linux-x86_generic/root.ext4