操作系统实战45讲-搭建操作系统测试环境
该博客是对课程讲解的记录,很多坑是通过评论区留言解决的。课程:https://time.geekbang.org/column/article/379291实验目的:搭建操作系统测试环境系统环境:Windows10虚拟机:VMware创建硬盘大多数虚拟机都是用文件来模拟硬盘的,即主机系统(HOST OS 即你使用的物理机系统 )下特定格式的文件,虚拟机中操作系统的数据只是写入了这个文件中。创建虚拟
该博客是对课程讲解的记录,很多坑是通过评论区留言解决的。
课程:极客时间45讲
实验目的:搭建操作系统测试环境
系统环境:Windows10
虚拟机:VMware
创建硬盘
大多数虚拟机都是用文件来模拟硬盘的,即主机系统(HOST OS 即你使用的物理机系统 )下特定格式的文件,虚拟机中操作系统的数据只是写入了这个文件中。创建虚拟硬盘就变成了生成对应格式的文件。
-
Linux home目录下生成100MB的纯二进制文件(文件数据全为0)
dd bs=512 if=/dev/zero of=hd.img count=204800 ;bs:表示块大小,这里是512字节 ;if:表示输入文件,/dev/zero就是Linux下专门返回0数据的设备文件,读取它就返回0 ;of:表示输出文件,即我们的硬盘文件。 ;count:表示输出多少块
格式化硬盘
-
格式化虚拟硬盘(在硬盘上建立文件系统)
-
把虚拟硬盘文件变成 Linux 下的回环设备
sudo losetup /dev/loop0 hd.img
我执行这步报错:
解决方案:
losetup -f 可以发现第一个空闲的/dev/loop设备,换成对应的设备即可,我换成了loop10
-
将 losetup 命令用于设置回环设备(回环设备可以把文件虚拟成 Linux 块设备,用来模拟整个文件系统,让用户可以将其看作硬盘、光驱或软驱等设备,并且可用 mount 命令挂载当作目录来使用)
sudo mkfs.ext4 -q /dev/loop10
-
在 /dev 文件下创建 ./hdisk/boot文件;将hd.img当作块设备挂载到hdisk目录下
sudo mkdir ./hdisk/boot/ ;建立boot目录 sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
-
安装GRUB
正常安装系统的情况下,Linux 会把 GRUB 安装在物理硬盘上,可是我们现在要把 GRUB 安装在我们的虚拟硬盘上
sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0
;--boot-directory 指向先前我们在虚拟硬盘中建立的boot目录。
;--force --allow-floppy :指向我们的虚拟硬盘设备文件/dev/loop0
在 /hdisk/boot/grub/ 目录下建立一个 grub.cfg 文本文件,GRUB 正是通过这个文件内容,查找到我们的操作系统映像文件的。我们需要在这个文件里写入如下内容:
menuentry 'HelloOS' {
insmod part_msdos
insmod ext2
set root='hd0,msdos1' #我们的硬盘只有一个分区所以是'hd0,msdos1'
multiboot2 /boot/HelloOS.eki #加载boot目录下的HelloOS.eki文件
boot #引导启动
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10 #等待10秒钟自动启动
fi
转换格式
将生成的hd.img文件拷贝至windows系统下,用starwindconverter工具转换为vmdk格式。新建虚拟机,硬盘选择转换后的vmdk文件即可。
总结
-
在虚拟机A中完成:
- hd.img的创建
- 文件系统的格式化
- grub的安装,生成最终的hd.img文件
-
在window中利用starwindconverter将hd.img转换为hd.vmdk文件
-
新建虚拟机B,硬盘选择hd.vmdk即可
Q:为什么要把虚拟硬盘格式化成 ext4 文件系统格式呢?
A:我们需要向虚拟硬盘中挂载boot目录和grub,而这种mount操作是建立在文件系统的基础上的,而块设备是不支持的。
更多推荐
所有评论(0)