• 操作系统操作系统安装


    创建虚拟硬盘

    dd创建创建虚拟镜像文件

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

    格式化虚拟硬盘

    虚拟硬盘毕竟是个文件,如何让 Linux 在一个文件上建立文件系统呢?这个问题要分成三步来解决。

    • 第一步 -- 设置回环设备
      把虚拟硬盘文件变成 Linux 下的回环设备,使用losetup命令将 hd.img 变成 Linux 的回环设备,代码如下:
    sudo losetup /dev/loop0 hd.img
    

    losetup 命令用于设置回环设备。回环设备可以把文件虚拟成 Linux 块设备,用来模拟整个文件系统,让用户可以将其看作硬盘、光驱或软驱等设备,并且可用 mount 命令挂载当作目录来使用。

    • 第二步 -- 格式化文件系统
      Linux 下的 mkfs.ext4 命令格式化这个 /dev/loop0 回环块设备,在里面建立 EXT4 文件系统。
    sudo mkfs.ext4 -q /dev/loop0  
    
    • 第三步 -- 挂载
      inux 下的 mount 命令,将 hd.img 文件当作块设备,把它挂载到事先建立的 hdisk 目录下,并创建boot目录,用于后续安装GRUB引导
    sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
    sudo mkdir ./hdisk/boot/ ;建立boot目录
    

    安装GRUB

    正常安装系统的情况下,Linux 会把 GRUB 安装在我们的物理硬盘上,可是现在要把 GRUB 安装在的虚拟硬盘上,而且操作系统还没有安装程序。所以,得利用一下手上 Linux(HOST OS),通过 GRUB 的安装程序,把 GRUB 安装到指定的设备上(虚拟硬盘)。

    安装 GRUB分两步:

    • 第一步 -- 挂载虚拟硬盘文件为loop0回环设备
    sudo losetup /dev/loop0 hd.img
    sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
    
    • 第二步 -- 安装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 正是通过这个文件内容,查找到我们的操作系统映像文件的。

    menuentry 'HelloOS' {
    insmod part_msdos
    insmod ext2
    set root='hd0' #只有一个硬盘,因此设置根目录为hd0(就是hd.vdi)-----修改了这里,改了之后成功了。
    multiboot2 /boot/Cosmos.eki #加载boot目录下的HelloOS.eki文件
    boot #引导启动
    }
    set timeout_style=menu
    if [ "${timeout}" = 0 ]; then
      set timeout=10 #等待10秒钟自动启动
    fi
    

    转换虚拟硬盘格式

    面好不容易生产了 mount 命令能识别的虚拟硬盘,这里为什么又要转换虚拟硬盘的格式呢?
    因为这个纯二进制格式只能被我们使用的 Linux 系统识别,但不能被虚拟机本身识别,但是我们最终目的却是让这个虚拟机加载这个虚拟硬盘,从而启动其中的由我们开发的操作系统。
    好在虚拟机提供了专用的转换格式的工具,我们只要输入一行命令即可。

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

    将所生成的hd.vdi 拷贝出来,重新新建一个虚拟机,不要建硬盘,像安装虚拟机这样建一个空壳子,在该系统的设置中,添加我们上面生成的hd.vdi虚拟硬盘,然后保存启动

    便可看到系统引导界面

    因boot中并没有Cosmos.eki该文件,会出现类似下面的情况:

    Cosmos.eki文件拷贝至hdist/boot下,重新生成hd.vdi挂载虚拟硬盘,启动:

    _完美撒花_

    ----------------------------这是分界线----------------------

    注:VirtualBox 虚拟机用 UUID 管理硬盘,每次挂载硬盘时,都需要删除虚拟硬盘的 UUID 并重新分配。因此,重新挂载需要将删除虚拟硬盘的 UUID ,在下图处找到了虚拟介质管理器-虚拟硬盘:

    详细参考:https://blog.nowcoder.net/n/34c8fe00da124439a940dff41864fecf

  • 相关阅读:
    Failed to parse PID from file /run/nginx.pid: Invalid argument
    Ubuntu16.04环境下bashrc文件位置
    virtualenvwrapper.sh报错: There was a problem running the initialization hooks.解决
    pip安装virtualenvwrapper报错的解决办法
    争鸣|函数性质的综合应用辨析
    总结|静雅斋之2020高考备考回顾总结
    2020年全国卷Ⅱ卷文科数学图片版
    奇怪|说好的求最大值变成了求最小值
    探究|平面向量探究题
    平面向量错误收集
  • 原文地址:https://www.cnblogs.com/whiteBear/p/16321016.html
Copyright © 2020-2023  润新知