最近在Arch下使用VirtualBox,遇到一点小问题,在此记录分享一下。

VitrualBox简介

VirtualBox是一款开源的虚拟机软件,由德国的Innotek公司开发,但似乎已经被Oracle收购了。所谓虚拟机,就是相较于“真机”而言,并不直接安装在真实的物理媒介上接触真实的接口,而是在抽象层上重新模拟出虚拟的真实环境,就像沙盒一样。使用虚拟机的好处就是可以多个系统同时使用,并且互不干扰;缺点就是相对于真机而言受到更大的资源限制,比如调用网络、I/O之类的速度受限等等,但是随着虚拟机技术的成熟,已经越来越接近真机的体验了。

VirtualBox安装

在Arch上安装VirtualBox分两种情况:

  1. 使用默认的linux内核
    pacman -S virtualbox virtualbox-host-modules-arch linux-headers
  2. 使用其他内核,以linux-lts为例
    pacman -S virtualbox virtualbox-host-dkms linux-lts-headers

virtualbox就是主要的程序,virtualbox-host-modules-arch linux-headers等是为了VirtualBox和linux内核自动编译模块。

自行编译的内核请参考Archwiki:VirtualBox

VirtualBox配置

VirtualBox在启动前要先加载对应的linux内核模块,可以在安装后手动加载模块,但是重启之后系统会自动加载对应模块,所以不如重启来的方便。
启动前请先将用户加入vboxusers用户组

sudo usermod -a -G vboxusers username

VirtualBox提供了多种启动方式:

  1. 如果你想通过常规 GUI 使用 VirtualBox,使用 VirtualBox 命令来启动 VirtualBox。
  2. 如果你想在命令行下启动与管理 VirtualBox,可以使用 VBoxSDL 命令。从 VBoxSDL 启动的虚拟机,其窗口仅包含虚拟机的画面,没有菜单或是其他控制项。
  3. 如果你想使用不想由任何 GUI(例如在服务器上)来使用 VirtualBox,使用 VBoxHeadless 命令。如果还想登录到这种虚拟机的图形界面,就需要安装 VRDP 扩展。

正常情况下使用VirtualBox即可。

虚拟机创建

  1. 打开VirtualBox,选择新建
  2. 输入名称,名称将用于不同虚拟机的标识
  3. 选择文件夹,VirtualBox将在该文件夹下面新建一个名为’vbox’的文件夹,并将虚拟机建立在里面

jDEBOf.png虚拟机信息

  1. 类型和版本根据自己将要安装的系统选择
  2. 分配内存大小,建议不要超过真实内存的一半,当然也得达到虚拟机系统内存的要求。

jDVKAg.png内存设置

  1. 创建虚拟硬盘,之前选文件夹的时候确保所在硬盘有足够的空间大小,选择创建虚拟硬盘

jDVIgI.png创建虚拟硬盘

  1. 选择虚拟硬盘类型,其中VDI是VirtualBox的虚拟硬盘类型,而VHD和VMDK分别是微软和VMware的虚拟硬盘格式,VirtualBox可以将各种虚拟硬盘格式进行转换。正常使用选择默认即可,其他请参见Archwiki:VirtualBox

jDV7KP.png虚拟硬盘类型

  1. 选择虚拟硬盘是动态分配还是固定大小,随个人喜好吧,我选择的动态分配感觉不出来速度上有什么问题。

jDZZG9.png

  1. 创建虚拟硬盘的大小,根据自己的需求,选择动态分配的话,这里的大小只是上限而非实际占用,文件位置默认即可。

jDe9Wd.png虚拟硬盘大小

  1. (可选)Oracle Extension Pack 为虚拟机提供了额外功能。但它并不是以自由软件协议发布的,仅供个人使用。尽管aur上有打包好的,但是手动下载也比较方便。在Download页面选择 All supported platforms下载。然后在VirtualBox的开始界面的最顶端中选择管理-全局设定-扩展,加入下载的扩展文件

客体机配置

客体机只需要正常安装即可,但是客体机的扩展提供了很好的体验,解决了许多问题,前往Downloads找到最新的版本(或者对应的版本),下载 VBoxGuestAdditions.iso

  1. 启动,第一次启动的时候需要选择启动镜像,就是要安装的那个系统的iso镜像,选择注册打开镜像
  2. 正常安装
  3. 挂载客体机扩展的镜像,在VirtualBox的开始界面中选中虚拟机,选择设置-存储,在第二个设备的地方选择镜像

jDKcDI.png客体机扩展挂载

  1. 在虚拟机中,找到挂载的镜像,安装之。

然后,你会发现分辨率有所提高,还支持文件双向拖放,还有无缝模式等等。

Tips and tricks

在启动虚拟机的时候卡在了20%的进度条没有反应(据”教授”说Windows下VirtualBox最近也这样?)
解决方案:参考

  1. Virtualbox hangs on Starting virtual machine window
  2. KVM busted in linux 5.18 due to Intel CET
  3. Virtualbox hangs on booting VM

简单来说,就是较新的内核(arch-5.18)之后,linux的内核为了提升intel上的表现引入了ibt的功能,但是似乎与VirtualBox的虚拟化产生了一定的冲突。因此在启动linux内核的时候需要把ibt关掉。

具体做法:在grub界面按e进入配置,找到linux /boot/vmlinuz-linux ···这一行,在末尾加上ibt=off,用空格隔开。由于我自己写的grub.cfg,所以我直接改grub.cfg了,这样也行。

这里不得不称赞archlinux的社区,Linux那边刚刚更新的内核,大家一下就解决了问题,甚至把Linux的源码给翻了出来。(至于windows那边卡住,只能坐等VirtualBox更新了)