我将正在运行的 debian8 安装文件复制到了映像中。以下是操作步骤。
- 创建一个 vdisk 映像 - raw/vdi。
- 将其安装到本地。
- 对正在运行的 Linux 发行版进行文件复制:
rsync -aAXv --delete --exclude={"/dev/","/proc/","/sys/","/tmp/“,“/跑步/","/mnt/“,“/媒体/","/失物招领","/家/“} /* “$TMPDIR”
- 安装
extlinux
引导加载程序和相关内容/boot/extlinux.conf
、更新/etc/fstab
、卸载和启动。
我能够使用 qemu 进行启动。能够登录到控制台模式。
问题:
- 尝试挂载交换分区失败,但 /etc/fstab 中没有提供任何参考。
- 无法加载内核模块。
- 我看到了启动 lightdm 的消息,但显示下一个 VT 来登录。
- 我还没有为目标重新创建 initram-fs,这会导致问题吗?
请帮忙。
——问候,JB
答案1
已经能够解决一些问题,从而从正在运行的系统创建可启动的虚拟机映像。
问题:
- 没有效果。
- 没有效果。
- 这实际上是 1 个问题和 1 个错误,我有一个带有特定驱动程序的自定义 xorg.conf,删除 xorg.conf 会使 qemu 启动到图形模式。另一个原因是 qemu 速度太慢,你只需要等待很长时间才能启动 lightdm。
- 没有效果。
为了方便起见,我将整个过程总结在一个脚本中:
#!/bin/bash
# create bootable image from running linux distro
IMG_format="raw"
IMG_name="debian8"
IMG_size="13G"
LNX_image="vmlinuz-4.4.3"
LNX_initrd="initrd.img-4.4.3"
LNX_rootdev="/dev/sda"
TMPDIR="/mnt/vmd/"
WRKDIR="/media/domnic/tmp1"
create_img(){
IMG="$WRKDIR/$IMG_name.$IMG_format"
echo "image => $IMG"
if [ -a "$IMG"]; then
echo "vm [$IMG] already exists... skipped!"
else
if [ "vdi" == "$IMG_format" ]; then
#- create .vdi
VBoxManage createhd --filename $IMG --size $(( IMG_size * 1024 ))
else
#- or create image on .raw disk
fallocate -l $IMG_size $IMG
mkfs.ext4 -F $IMG
fi
fi
}
mount_img(){
echo "mount => $TMPDIR"
IMG="$WRKDIR/$IMG_name.$IMG_format"
if [ ! -d "$TMPDIR" ]; then
mkdir -p $TMPDIR
fi
if [ "vdi" == "$IMG_format" ]; then
#- mount .vdi
vdfuse -a -f $IMG /mnt/vdi
mount -o loop /mnt/vdi/1 $TMPDIR
else
#- mount image to tmpdir
mount $IMG $TMPDIR
fi
}
clone_img(){
echo "clone => $TMPDIR"
#- copy files
rsync -aAX --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"} /* "$TMPDIR"
#- install bootloader
extlinux --install $TMPDIR/boot
#- update bootloader
#-- qemu default: root=/dev/sda
cat > $TMPDIR/boot/syslinux/extlinux.conf <<- EOM
DEFAULT $IMG_name_$LNX_image
LABEL $IMG_name_$LNX_image
SAY Booting $IMG_name - $LNX_image
LINUX /boot/$LNX_image
INITRD /boot/$LNX_initrd
APPEND root=$LNX_rootdev rw
EOM
#-- remove invalid entries from $TMPDIR/etc/fstab
echo "/dev/sda / ext4 defaults 0 1" > $TMPDIR/etc/fstab
#- unmount image and boot
umount $TMPDIR
if [ "vdi" == "$IMG_format" ]; then
umount /mnt/vdi
fi
}
start_vm(){
IMG="$WRKDIR/$IMG_name.$IMG_format"
echo "vm => $IMG"
qemu-system-i386 \
-display sdl \
-soundhw ac97 \
-vga cirrus \
$IMG
}
case $1 in
create_img)
create_img
;;
mount_img)
mount_img
;;
clone_img)
clone_img
;;
start_vm)
start_vm
;;
esac