以下操作环境是:Windows10+VirtualBox(新建虚拟机: Ubuntu-64-bit; HelloOS)

安装VBox增强工具(物理主机与虚拟机共享剪切板数据等)

注:在虚拟机里安装好Ubuntu操作系统后--启动,按提示安装组件增强功能等后,下图VBox下存储栏由原来下载安装的ubuntu...iso变为了如下VBoxGuestAdditions.iso,即增强功能包(Guest Additions),但此时就算启动虚拟机后勾选了设备中的双向(如下图2),依然无法实现与win10物理主机共享剪切板数据,需要如图3进入目录(/media/....)下执行 sudo ./VBoxLinuxAdditions.run ,之后在控制-重启,然后就可以与win10主机共享剪切板数据了。


虚拟机Ubuntu访问物理主机win10下的文件夹

1. 共享文件夹--新建--设置win10目录下的共享路径,共享文件夹名称(执行一次即可)
2. Ubuntu-终端-执行如下命令(在cd ~即家目录),新建一个共享路径/mnt/shared,与1中的共享文件夹Hello关联起来,之后进入/mnt/shared目录下,ll就可以看到win10目录下D:\HelloOS文件夹下的内容了。
(第一条建立目录执行一次就可以了,第二步在每次启动Ubuntu后需再执行一次,也有自动挂载不用每次执行的命令,但是没有尝试过)
sudo mkdir /mnt/shared
sudo mount -t vboxsf Hello /mnt/shared

格式化虚拟硬盘

1. lsblk查看当前的的设备:

2. 上述loop0-loop5均已有挂载点,需使用一个没有用到的,与课程中不同,如:sudo losetup /dev/loop6 hd.img 将 hd.img 变成 Linux 的回环设备
3. 再执行lsblk查看,结果如图:

4. 后续操作时也都应用/dev/loop6,即:
sudo mkfs.ext4 -q /dev/loop6
sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
sudo mkdir ./hdisk/boot/ ;建立boot目录
sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop6
安装GRUB
;--boot-directory 指向先前我们在虚拟硬盘中建立的boot目录。
;--force --allow-floppy :指向我们的虚拟硬盘设备文件/dev/loop6。
执行之后:(实际上在win10对应共享目录下只能看到\hdisk\boot,看不到grub文件夹及其内容)
5. sudo touch grub.cfg
6. sudo chmod -R 777 * ; -R, --recursive 递归修改文件和目录
7. vi grub.cfg ; 粘贴如下内容
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
输入 :wq 保存并退出(可再次vi grub.cfg查看是否写入完成,输入 :q 退出
8. 由于纯二进制格式只能被 Linux 系统识别,不能被虚拟机本身识别,所以为了让虚拟机可以加载这个虚拟硬盘(进而从中启动我们开发的操作系统),需执行下面这条命令:
VBoxManage convertfromraw ./hd.img --format VDI ./hd.vdi
;convertfromraw 指向原始格式文件
;--format VDI  表示转换成虚拟需要的VDI格式
执行后生成的文件如下,与hd.img在同一级目录下,且hd.vdi在win10对应的共享目录下也可以看到

9. 关闭该Linux虚拟机,如下在Windows10物理主机下VirtualBox软件中--选择第10讲最初建立的虚拟机HelloOS-设置:
(对应第10讲课程中安装虚拟硬盘操作
选择第8步的目录下生成的hd.vdi文件:
目前不知道勾选下图这个有什么用,好像见过博文上说可以勾选的,先勾上后面再说:
点击完成后HelloOS设置界面下存储栏如上图。
10. 在VirtualBox软件中-HelloOS-点击启动,如下图:
鼠标点击黑框内,捕获,按下enter
(按右ctrl键将鼠标切回win10物理主机)

上面显示的与老师课程中的有差异,然后发现可能是grub.cfg文件有问题,强制关闭HelloOS后,再次打开前面使用的Ubuntu虚拟机;设置并进入共享目录(即sudo mount -t vboxsf Hello /mnt/shared)后,发现之前hdisk/boot/目录下建立的grub目录没有了,且lsblk下的loop6及其挂载点也没有了,如下图,可能是由于HelloOS使用了hd.vdi或者windows10物理主机下grub目录本身不可见?暂时没有搞懂...
需要重新进行上述相关操作,不同点:
grub.cfg文件修改为:
menuentry 'HelloOS' {
insmod part_msdos
insmod ext2
set root='hd0' #只有一个硬盘,因此设置根目录为hd0(就是hd.vdi)-----修改了这里,改了之后成功了。(注:这里原来是'hd0,msdos1',暂时还没搞懂二者的区别,后面再说)
multiboot2 /boot/HelloOS.eki #加载boot目录下的HelloOS.eki文件
boot #引导启动
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=10 #等待10秒钟自动启动
fi
再次生成进行到第9步发现hd.vdi无法访问了:
直接点击启动弹出错误提示如下图,应该就是课程中提到的这个--VirtualBox 虚拟机用 UUID 管理硬盘,每次挂载硬盘时,都需要删除虚拟硬盘的 UUID 并重新分配
错误提示的意思大概应该是说:注册的hd.vdi对应的UUID与现在获取到的hd.vdi的UUID不同(上面操作时更改了grub.cfg文件),替换为之前生成的hd.vdi文件就显示的是可以访问。
所以接下来应该是要删除虚拟硬盘的 UUID ,在下图处找到了虚拟介质管理器-虚拟硬盘
点击属性--明细可以查看到UUID值:
点击释放

释放之后就可以删除了:
然后可以直接在此处点击注册,注册刚才新生成的hd.vdi文件,现在就变为可以访问了:
再将其分配到HelloOS中,与之前操作一致(第9步后面部分),再次点击启动:
与课程中的启动界面一致,第10讲内容完成!

参考文章链接汇总:

使用 virtualbox 新建一个 linuxOS-Ubuntu(64bit) 虚拟电脑(机):https://www.huaweicloud.com/articles/28f9f8529b6e0317167c56f25d825fee.html
专栏中的部分操作可这样理解: https://blog.csdn.net/ll15982534415/article/details/118771286
windows10物理主机和虚拟机的文件共享:https://www.cnblogs.com/zhxiaomiao/archive/2011/09/28/2193927.html
VirtualBox 与 宿主机剪贴板共享问题:https://www.cnblogs.com/gaojian/archive/2012/10/24/2736785.html