OS实战笔记(8)-- 设置基本OS基本工作环境

news2024/9/22 19:22:22

        本笔记会搭建OS实战所需的虚拟机环境,主要是创建好虚拟机,设置虚拟机启动硬盘,在启动盘上安装Grub。

        由于本专题是个人在业余时间除了Unity学习之外做的,没有时间和精力去解答具体的问题。本笔记中的实验个人在做的过程中除了遇到权限问题外,没有遇到大的问题。如果遇到了问题,请百度或google看看原因。

安装VirtualBox

        假设Host为Ubuntu,我们直接用apt-get install安装即可(例子安装的版本是6.1):


sudo apt-get install virtualbox-6.1

        安装完成后,运行Virtualbox,能正常出现以下界面就OK了。

新建虚拟机

         点击VirtualBox界面上的“新建”,进入新建虚拟电脑的流程。在专家模式中选择好各种配置参数即可。需要注意的是,虚拟硬盘这里,选择“不添加虚拟硬盘”。

        案例中选择的配置是:虚拟机名称HelloOS, 64 bit架构,1024MB内存,默认显卡VBoxVGA,勾选硬件加速(不用非得按照这个来,新版本的VirtualBox默认VBoxVGA的显存配置等地方可能会略有差异,根据自身机器配置修改修改即可)。

创建虚拟机用的虚拟硬盘

        VirtualBox所用的硬盘,实际是Host系统上的一个文件来模拟的(*.vdi)。这个VDI文件有特殊的格式要求,我们首先在Ubuntu Host上创建一个hd.img文件,将其挂载成loop设备后,用EXT文件系统格式化一下;然后安装好grub;最后再将hd.img转换成hd.vdi,用这个vdi文件作为虚拟机的硬盘使用。

dd命令创建hd.img

        我们用dd命令来生成一个100M的二进制文件:


dd bs=512 if=/dev/zero of=hd.img count=204800

;bs:表示块大小,这里是512字节
;if:表示输入文件,/dev/zero就是Linux下专门返回0数据的设备文件,读取它就返回0
;of:表示输出文件,即我们的硬盘文件。
;count:表示输出多少块

格式化hd.img

        这个hd.img本身只是Host系统下的一个普通文件,虚拟硬盘本身也需要格式化后才能使用。要对hd.img进行格式化,首先要骗一下Host系统,让Ubuntu将它看成是一个块设备来对待。

        我们用losetup命令,将hd.img从普通文件变成是一个回环设备:


sudo losetup /dev/loop0 hd.img

        做完这一步后,/dev/loop0这个回环设备就和hd.img关联起来了(如果出现失败打印Device or resource busy,就用/dev/目录下的其它loop设备比如loop15看看,或者用losetup -f hd.img让系统自己去找一个没用使用的loop设备。具体用的是哪个,可以通过losetup -a来查看)。回环设备可以把文件虚拟成Linux设备,用来挂载模拟整个文件系统,让用户可以将其作为硬盘、光驱或软驱等设备使用。可以通过mount和umount等命令进行设备的挂载和卸载,也可以用mkfs.ext4对其进行格式化。下面我们用mkfs.ext4格式化一下/dev/loop0


sudo mkfs.ext4 -q /dev/loop0  

         Grub安装,需要硬盘中存在boot目录,接下来我们创建boot目录


sudo mount /dev/loop0 ./hdisk/ ;挂载硬盘文件
sudo mkdir ./hdisk/boot/ ;建立boot目录

安装GRUB到虚拟硬盘

        这一步比较简单,在hd.img通过loop设备挂载到了hdisk目录,并且hdisk目录下存在boot目录后,通过下面的命令就能安装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安装成功。此时我们还需要在hdisk/boot/grub下新建一个grub.cfg配置文件。这个配置文件被GRUB用来查到所要用的OS映像文件的。我们在这个文件里输入一下内容并保存:


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

        做完这些步骤后,我们可以用umount hdisk卸载掉hd.img。 

 将hd.img转换成hd.vdi,让VirtualBox可以将其当成硬盘使用

        VirtualBox本身不能直接使用hd.img,我们需要将它转换成vdi文件,以便VirtualBox能够将它作为硬盘使用。

        安装VirtualBox的时候,会带一个VBoxManage工具(Windows下也有一个VBoxManage.exe存放在安装目录下),这个工具可以用来将hd.img转成VDI格式。


VBoxManage convertfromraw ./hd.img --format VDI ./hd.vdi
;convertfromraw 指向原始格式文件
;--format VDI  表示转换成虚拟需要的VDI格式

 VirtualBox安装hd.vdi

          有两种方法可以为HelloOS虚拟机安装hd.vdi作为其硬盘,一种是通过命令行,一种是通过图形化界面。

        1. 首先,看看图形化界面方式,选中HelloOS后点击设置

         在存储页面中,选择增加硬盘选项

         选择注册,然后选择hd.vdi文件(通过文件浏览器导航到文件所在的目录并选择hd.vdi即可)。

         2. 命令行方式,以SATA类型硬盘、控制器是IntelAHCI为例:


#第一步 SATA的硬盘其控制器是intelAHCI
VBoxManage storagectl HelloOS --name "SATA" --add sata --controller IntelAhci --portcount 1
#第二步
VBoxManage closemedium disk ./hd.vdi #删除虚拟硬盘UUID并重新分配
#将虚拟硬盘挂到虚拟机的硬盘控制器
VBoxManage storageattach HelloOS --storagectl "SATA" --port 1 --device 0 --type hdd --medium ./hd.vdi

        需要注意的是: VirtualBox 虚拟机用 UUID 管理硬盘,所以每次挂载硬盘时,都需要删除虚拟硬盘的 UUID 并重新分配。

启动虚拟机

        双击HelloOS或者通过VBoxManage startvm HelloOS启动虚拟机。

        如果没有问题,我们应该能够看到下面的GRUB引导菜单。

         此时按下回车键,Grub会尝试加载HelloOS。当然现在会失败,因为我们还没有做HelloOS.eki文件。但是这是万里长征第一步,表明我们的基本环境已经设置完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17.集合

集合 集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是…

整理现有的wiki私服项目

文章目录 核心功能现有项目wikijsBookStackmediawikiTiddlyWikigollumdokuwikixwiki 总结参考 核心功能 查找编辑 在线/离线内链【核心】代码高亮图表、表达式生成多媒体(图片、音频、视频)管理 协作(用户管理模式/github模式) 修…

JVM 关键点详解

一,JVM 的主要组成部分及其作用 JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎); 两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类装载): 根据给定的全限定名类…

【Linux网络】部署YUM仓库及NFS服务

部署YUM仓库及NSF服务 一、YUM仓库1.1、YUM仓库概述1.2准备安装来源1.3在软件仓库加载非官方RPM包组1.4yum与apt 二、配置yam源与制作索引表2.1配置FTP源2.2配置国内在线yum源2.3在线源与本地源同时使用2.4建立软件包索引关系表的三种方法 三、nfs共享存储服务3.1安装软件&…

LVS负载均衡群集——NAT模式实操

1.1 群集的的定义及意义 群集的定义 Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。 群集的作用 对于企业服务的的性能提升…

数学知识四

容斥原理 S表示面积,下面公式可求出不相交的面积 2个圆的公式是这样 4个圆的面积是 总面积-所有俩俩相交的面积所有三三相交的面积-四四相交的面积,公式里加和减互相出现。 从n个集合里面挑一个一直到从n个集合里面挑n个 1-10中,能被2&#x…

【KingSCADA】如何创建新应用

大家好,我是雷工! 今天学习使用KingSCADA3.8创建一个新的应用,以下为学习过程和操作笔记。 一、前言 KingSCADA3.8集成开发环境是基于工程的应用管理模式,实现了对多个应用的集中开发和管理的功能,一个工程可以同时管理多个应用…

【WinForm】Android手机群控工具-桌面程序开发实现

如何将手下多个Android手机统一管理起来呢,这里是用通过终端输入adb命令来实现控制多个手机的,具体怎么做,接下来给讲一讲。 使用adb工具包 首先,需要准备一套工具,以下是adb工具套件,是在Android SDK开发…

lanuage-driven semantic segmentation

CLIP 改进工作串讲(上)【论文精读42】_哔哩哔哩_bilibili更多论文:https://github.com/mli/paper-reading, 视频播放量 64310、弹幕量 274、点赞数 1939、投硬币枚数 1332、收藏人数 821、转发人数 438, 视频作者 跟李沐学AI, 作者简介 &…

window安装cplex20.1.0启动报错: ilog.odms.ide.opllang.IloOplLangPlugin

通过0-1背包问题看穷举法、贪心算法、启发式算法(JAVA) 模拟退火(SA)算法实例介绍(JAVA) 遗传算法(GA)实例介绍(JAVA) CPLEX求解器入门案例 java集成Cplex:Cplex下载、IDEA环境搭建、docker部署 windo…

线性链表 反转 -(递归与非递归算法)_20230420

线性链表 反转 -(递归与非递归算法)_20230420 前言 线性链表反转是非常有趣的算法,它可以采用多种方式实现,比较简洁的方法是递归反转;传统的方式是利用迭代反转,设定三个变量,采用类似滚动数组的方式,实…

React Hooks生命周期

文章目录 前言一、类组件的生命周期1、什么是类组件2、生命周期钩子 二、函数组件生命周期1、什么是函数组件2、模拟类组件生命周期钩子 三、为什么要使用生命周期1、我们能在钩子里面干什么2、PureComponent和React.memo区别 总结 前言 最近在写react项目,所以一直…

【Java网络编程】Socket套接字

哈喽,大家好~我是你们的老朋友: 保护小周ღ,本期为大家带来的是网络编程的前提概念 Socket 套接字,操作系统提供Socket 用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的…

在poetry虚拟环境下打包exe

本博客介绍了在poetry虚拟环境下打包exe的流程,包含两个部分 打包的基本流程打包过程中遇到的问题 打包的基本流程 copy打包工具到本地,(share:\公用共享\芯片部\乔羽\img_generate\系统部提供的打包exe工具) 用poetry搭建虚拟环境 在打包…

微积分入门

文章目录 前言初期积分微分微积分问题 后期极限 ε \varepsilon ε- δ \delta δ极限勒贝格积分 结语 前言 微积分总共走过了两个时期。首先是牛顿和莱布尼茨利用无穷小量定义微分和积分,并且发现了微分和积分的关系,这是第一个时期,这时的…

如何在元宇宙中促进品牌增长:消费者喜好的热点调查

欢迎来到Hubbleverse 🌍 关注我们 关注宇宙新鲜事 📌 预计阅读时长:5分钟 本文仅代表作者个人观点,不代表平台意见,不构成投资建议。 音乐和旅游是用户被元宇宙虚拟体验所吸引的前两个领域。根据Reach 3 Insights的…

ArrayList 的特点及优缺点

前面讲过,数组有很多缺点且使用不太方便,但是我们存储数据的时候很多情况又不得不使用它,那么有没有对数组封装一下的类,让我们更方便呢?答案是有的,他就是 ArrayList,他是一个基于数组的集合&a…

Ceph入门到精通- storcli安装

storcli 是LSI公司官方提供的Raid卡管理工具,storcli已经基本代替了megacli,是一款比较简单易用的小工具。将命令写成一个个的小脚本,会将使用变得更方便。 安装简单,Windows系统下解压出来以后可以直接运行。 Linux系统默认位置…

CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂

1. CGI # 1、通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。 # 2、CGI程序可以…

今儿咱就看看redis的淘汰策略你知道多少

一、前言 Redis在我们日常开发中是经常用到的,Redis也是功能非常强大,可以进行缓存,还会有一些排行榜、点赞、消息队列、购物车等等;当然还有分布式锁Redisson,我们使用肯定少不了集群!小编最近学习到一些…