最近在Arch下使用VirtualBox,遇到一点小问题,在此记录分享一下。
VitrualBox简介
VirtualBox是一款开源的虚拟机软件,由德国的Innotek公司开发,但似乎已经被Oracle收购了。所谓虚拟机,就是相较于“真机”而言,并不直接安装在真实的物理媒介上接触真实的接口,而是在抽象层上重新模拟出虚拟的真实环境,就像沙盒一样。使用虚拟机的好处就是可以多个系统同时使用,并且互不干扰;缺点就是相对于真机而言受到更大的资源限制,比如调用网络、I/O之类的速度受限等等,但是随着虚拟机技术的成熟,已经越来越接近真机的体验了。
VirtualBox安装
在Arch上安装VirtualBox分两种情况:
- 使用默认的linux内核
pacman -S virtualbox virtualbox-host-modules-arch linux-headers
- 使用其他内核,以
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提供了多种启动方式:
- 如果你想通过常规 GUI 使用 VirtualBox,使用 VirtualBox 命令来启动 VirtualBox。
- 如果你想在命令行下启动与管理 VirtualBox,可以使用 VBoxSDL 命令。从 VBoxSDL 启动的虚拟机,其窗口仅包含虚拟机的画面,没有菜单或是其他控制项。
- 如果你想使用不想由任何 GUI(例如在服务器上)来使用 VirtualBox,使用 VBoxHeadless 命令。如果还想登录到这种虚拟机的图形界面,就需要安装 VRDP 扩展。
正常情况下使用VirtualBox
即可。
虚拟机创建
- 打开
VirtualBox
,选择新建 - 输入名称,名称将用于不同虚拟机的标识
- 选择文件夹,VirtualBox将在该文件夹下面新建一个名为’vbox’的文件夹,并将虚拟机建立在里面
虚拟机信息
- 类型和版本根据自己将要安装的系统选择
- 分配内存大小,建议不要超过真实内存的一半,当然也得达到虚拟机系统内存的要求。
内存设置
- 创建虚拟硬盘,之前选文件夹的时候确保所在硬盘有足够的空间大小,选择创建虚拟硬盘
创建虚拟硬盘
- 选择虚拟硬盘类型,其中VDI是VirtualBox的虚拟硬盘类型,而VHD和VMDK分别是微软和VMware的虚拟硬盘格式,VirtualBox可以将各种虚拟硬盘格式进行转换。正常使用选择默认即可,其他请参见Archwiki:VirtualBox
虚拟硬盘类型
- 选择虚拟硬盘是动态分配还是固定大小,随个人喜好吧,我选择的动态分配感觉不出来速度上有什么问题。
- 创建虚拟硬盘的大小,根据自己的需求,选择动态分配的话,这里的大小只是上限而非实际占用,文件位置默认即可。
虚拟硬盘大小
- (可选)Oracle Extension Pack 为虚拟机提供了额外功能。但它并不是以自由软件协议发布的,仅供个人使用。尽管
aur
上有打包好的,但是手动下载也比较方便。在Download页面选择 All supported platforms下载。然后在VirtualBox的开始界面的最顶端中选择管理-全局设定-扩展,加入下载的扩展文件
客体机配置
客体机只需要正常安装即可,但是客体机的扩展提供了很好的体验,解决了许多问题,前往Downloads找到最新的版本(或者对应的版本),下载 VBoxGuestAdditions.iso
- 启动,第一次启动的时候需要选择启动镜像,就是要安装的那个系统的iso镜像,选择注册打开镜像
- 正常安装
- 挂载客体机扩展的镜像,在VirtualBox的开始界面中选中虚拟机,选择设置-存储,在第二个设备的地方选择镜像
客体机扩展挂载
- 在虚拟机中,找到挂载的镜像,安装之。
然后,你会发现分辨率有所提高,还支持文件双向拖放,还有无缝模式等等。
Tips and tricks
在启动虚拟机的时候卡在了20%的进度条没有反应(据”教授”说Windows下VirtualBox最近也这样?)
解决方案:参考
- Virtualbox hangs on Starting virtual machine window
- KVM busted in linux 5.18 due to Intel CET
- 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更新了)