配置平台:VMware虚拟机+Ubuntu
Linux liuhao-virtual-machine 5.4.0-26-generic
初始化流程:PC机加电(加电)-》ROM上的BIOS固件检测和初始化 CPU、内存及主板平台(自检)-》加载引导设备到硬盘的第一个扇区(grub放置)-》OS
生成虚拟硬盘
大多数虚拟机都是用文件来模拟硬盘的,即主机系统下特定格式的文件,虚拟机中操作系统的数据只是写入了这个文件中。
生成一个100MB的纯二进制文件(就是1~100M字节的文件里面填充为0)
dd bs=512 if=/dev/zero of=hd.img count=204800
下面我们要格式化这个文件为虚拟硬盘
sudo losetup /dev/loop0 hd.img
建立文件系统
sudo mkfs.ext4 -q /dev/loop0
挂载目录
sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
sudo mkdir ./hdisk/boot/ ;建立boot目录
这是因为 mount 命令只能识别在纯二进制文件上建立的文件系统,如果使用虚拟机自己生成的硬盘文件,mount 就无法识别我们的文件系统了
进行到这里,我们会发现 hdisk 目录下多了一个 boot 目录,这说明我们挂载成功了
安装grub
sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0
可以看到,现在 /hdisk/boot/ 目录下多了一个 grub 目录,表示我们的 GRUB 安装成功。请注意,这里还要在 /hdisk/boot/grub/ 目录下建立一个 grub.cfg 文本文件,GRUB 正是通过这个文件内容,查找到我们的操作系统映像文件的
menuentry 'HelloOS' {
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
multiboot2 /boot/HelloOS.eki
boot
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10
fi
让虚拟机能够识别虚拟硬盘
转换成让虚拟机能识别的虚拟硬盘
VBoxManage convertfromraw ./hd.img --format VDI ./hd.vdi
安装虚拟硬盘
VBoxManage storagectl HelloOS --name "SATA" --add sata --controller IntelAhci --portcount 1
VBoxManage closemedium disk ./hd.vdi
VBoxManage storageattach HelloOS --storagectl "SATA" --port 1 --device 0 --type hdd --medium ./hd.vdi
启动
VBoxManage startvm HelloOS
|