操作系统实战45讲-搭建操作系统测试环境

该博客是对课程讲解的记录,很多坑是通过评论区留言解决的。

课程:极客时间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
      

      我执行这步报错:image-20210623161442147

      解决方案:

      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文件即可。

image-20210623154905030

总结

  • 在虚拟机A中完成:

    • hd.img的创建
    • 文件系统的格式化
    • grub的安装,生成最终的hd.img文件
  • 在window中利用starwindconverter将hd.img转换为hd.vmdk文件

  • 新建虚拟机B,硬盘选择hd.vmdk即可

Q:为什么要把虚拟硬盘格式化成 ext4 文件系统格式呢?

A:我们需要向虚拟硬盘中挂载boot目录和grub,而这种mount操作是建立在文件系统的基础上的,而块设备是不支持的。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值