openSUSE Tumbleweed 中 VirtualBox 配置记录

VirtualBox 有 Linux 版本,跟 Windows 版本(使用方法)差别不大。openSUSE 官方源里面已经整合了 VirtualBox,可以直接安装。只是 Linux 版本的 VirtualBox 在安装扩展包(VirtualBox Extension Pack)和管理客户机的附加支持包(Guest Additions ISO)方面不如 Windows 版本方便。

而且因为安全原因,openSUSE 官方源里面的 VBox 默认没有开启 USB 2.0/3.0 的支持。

安装 VirtualBox

这里选用安装 openSUSE 官方源里面的 VirtualBox 版本。

安装使用 DKMS 以方便在升级内核的时候重新编译 VBox 相关配置,

# zypper -n in dkms

安装 VirtualBox,

# zypper -n in virtualbox

安装后需要运行配置程序,

# rcvboxdrv setup

要使一般用户能够使用 VirtualBox,需要将其加入 vboxusers 用户组(操作用户组),

# usermod -a -G vboxusers $YourUsername

替换上面的 $YourUsername 为实际的用户名。

安装扩展支持包和客户机附加功能包

扩展包(VirtualBox Extension Pack)及客户机附加光盘(VBoxGuestAdditions.iso)下载地址:http://download.virtualbox.org/virtualbox/

扩展支持包提供了对 USB 2.0 和 USB 3.0 设备、 VirtualBox RDP、PXE boot 以及磁盘加密等功能的支持。需要注意的是,根据授权协议,Extension Pack 只有在个人或者教育使用中是免费的,其它使用需要获取授权,包括家庭办公/个体商业用途。

扩展包的管理可以通过 VirtualBox 的图形界面(File 文件 – Preferences 首选项 – Extensions 扩展)来操作,也可以通过终端的 VirtualBox 内部指令来操作。

与扩展包相关的几个 VirtualBox 内部指令为,

# VBoxManage extpack install [--replace] <tarball>
# VBoxManage extpack uninstall [--force] <name>
# VBoxManage extpack cleanup

所以下载后直接安装就可以了(从网站点击链接下载的时候会将默认的 .vbox-extpack 扩展名改成 .bin 扩展名)。例如,

# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.14-105127.bin

安装扩展包的时候需要关闭所有客户机

然后下载附加光盘 VBoxGuestAdditions.iso,通过客户机的光驱挂载给客户机并在客户机中进行安装。

Bash 自动化脚本

因为有版本对应的关系,而且每次 VirtualBox 升级后都需要更新扩展包(不然无法启动客户机),同时顺便更新一下 VBoxGuestAdditions.iso 光盘(所以下面把这个光盘镜像的名字改成了没有版本好的名字以省去每次重新挂载光盘的操作),所以用 Bash 脚本来自动化操作会比较好。

# update the extension pack for VirtualBox
# ref: https://forums.virtualbox.org/viewtopic.php?f=7&t=44337
#!/bin/bash
# preparation
tmpfolder="tmpfolder"
oracleURLBase="http://download.virtualbox.org/virtualbox"
dirVBoxGuestAdditions="/path/to/the/folder_for_VBoxGuestAdditions_iso"
# 上面这三个是变量;特别是第三个,需要根据自己的需要指定。

mkdir ~/$tmpfolder
# the real url to the extension pack, e.g. 5.0.14_SUSEr105127 in openSUSE Tumbleweed
version=$(VBoxManage -v)
echo $version
var1=$(echo $version | cut -d '_' -f 1)
echo $var1
var2=$(echo $version | cut -d 'r' -f 2)
echo $var2
file="Oracle_VM_VirtualBox_Extension_Pack-$var1-$var2.vbox-extpack"
echo $file
# download
wget $oracleURLBase/$var1/$file -O ~/$tmpfolder/$file
# sudo VBoxManage extpack install ~/$tmpfolder/$file --replace
# 初次安装用下面这句以后升级用上面这句
sudo VBoxManage extpack install ~/$tmpfolder/$file
# remove temp folder and files in it
rm -Rf ~/$tmpfolder
# Guest Additions ISO
wget -q http://download.virtualbox.org/virtualbox/$var1/VBoxGuestAdditions_$var1.iso -O $dirVBoxGuestAdditions/VBoxGuestAdditions.iso

启用 USB 2.0/3.0 支持

openSUSE 默认禁用了 VirtualBox 的 USB 2.0/3.0 支持,说是因为可能导致的安全问题,参见这里。而如果是从 VirtualBox 官网下载安装的 VBox 就不需要这么折腾了。

要开启 USB 2.0/3.0 支持也很简单,使用下面的操作(都是在 Shell 命令行终端执行的指令)。这个在这里已经介绍过,详细信息请跳转阅读。下面是重点部分节录。

将 /usr/lib/udev/rules.d/60-vboxdrv.rules 复制到 /etc/udev/rules.d

# cp -v /usr/lib/udev/rules.d/60-vboxdrv.rules /etc/udev/rules.d

并注释掉其中包含 SUBSYSTEM 的行,

# printf '%s\n' 'g/^#SUBSYSTEM/s/^#//' w | ed -s /etc/udev/rules.d/60-vboxdrv.rules

然后重新启动计算机就可以了。

启动物理硬盘上的 Windows

之前曾经介绍过在 Windows 中使用虚拟机启动物理硬盘上安装的 openSUSE,反过来也可以从 openSUSE 中启动物理硬盘上安装的 Windows(已在本机 T420s 上测试过在 openSUSE 中启动物理硬盘 C 分区上的 Windows 10)。

在 Linux 下要让虚拟机能够启动物理硬盘上的系统就必须给它整个物理磁盘的完全访问权限。否则会出现“VERR_ACCESS_DENIED”错误。而这个并不是默认开启的,因为 Linux 不同于 Windows 的安全机制。所以跟使用 USB 2.0/3.0 功能类似,需要用户创建特别的 udev 规则并启用才行。具体参考了这里

在 /etc/udev/rules.d/ 下创建一个新的文件 61-vbox-vmdk.rules,内容为,

# Full disk needs to be readable by vboxusers
ENV{ID_SERIAL_SHORT}=="JG44446PG0TR1D", ENV{DEVTYPE}=="disk", GROUP="vboxusers", MODE="0640"
# sda2, 6 need to be R/W by vboxusers
ENV{ID_SERIAL_SHORT}=="JG44446PG0TR1D", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="2", GROUP="vboxusers", MODE="0660"
ENV{ID_SERIAL_SHORT}=="JG44446PG0TR1D", ENV{DEVTYPE}=="partition",ENV{ID_PART_ENTRY_NUMBER}=="6", GROUP="vboxusers", MODE="0660"

其中有三个参数(红色和蓝色字体标识出来的)需要根据各自的实际情况修改,

  • JG44446PG0TR1D 是一个示例用的硬盘驱动器在 Linux 系统中的内部 ID 号,可使用下面的指令查询,
    hdparm -I /dev/sda | grep Serial

    返回结果中的 Serial Number 就是。

  • 2 代表硬盘驱动器的 2 分区 sda2;
  • 相应的 6 代表分区 sda6。

这里只列出了如前面指出的文章中不同的地方,剩下的可以参考之前的文章:在 Windows 中使用虚拟机启动物理硬盘上安装的 openSUSE

USB 3.0 问题

错误信息可能是,“Failed to create a proxy device for the USB device. (Error: VERR_PDM_NO_USB_PORTS).”

已解决。目前 openSUSE 中的各虚拟机都运行良好(XP、Win7 以及物理磁盘上的 Win10),唯一的缺憾是,客户机中 USB 2.0 可用但是 USB 3.0 端口不可用。目前还不知道问题所在。

VirtualBox 中安装的 Windows 7 因为没有默认的 USB 3.0 控制器驱动而无法使用。嗯,一直不知道 Windows 7 居然没有内置 USB 3.0 控制器驱动。在 Intel 下载中心下载安装 USB-3-0-Driver-Intel-USB-3-0-eXtensible-Host-Controller-Driver-for-Intel-7-Series-C216-Chipset-Family 这个 USB 3.0 控制器驱动之后就解决了问题。参考了这里。另外,根据另一篇帖子,也可以用 Renesas 的驱动,据说更好,但水景一页没有测试。

暂时还没发现有其它问题。

2020.08.26 – 经过两三个月的试用,在 Linux 上还是 KVM/QEMU 做虚拟机比较方便,虽然其图形界面没有 VirtualBox 的好用。已切换至 KVM/QEMU/libvirt,本文可能不会再更新了。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/opensuse-tw-virtualbox/>。转载请保留此信息及相应链接。

7 条关于 “openSUSE Tumbleweed 中 VirtualBox 配置记录” 的评论

  1. 引用通告: openSUSE Tumbleweed 初始配置记录 | 水景一页

  2. 如果是UEFI启动的windows和openSUSE双系统,那么要启动物理硬盘的Windows的话需要将EFI分区的读写权限也加到udev的规则里,并在创建虚拟硬盘的时候将该分区加上。

    • 谢谢分享 :-) 我就是用 UEFI 启动双系统的。
      不过估计我不会有需要通过虚拟机启动物理硬盘上的 Windows 10 的时候了。现在新机器速度很快,重启很迅速。而且,似乎也没有需要用到 Win10 的地方。有需要用 Windows 的话我就用虚拟机跑 Windows 7。新机器买回来也就装系统(TW)之前压缩 Windows 系统硬盘的时候登录了 Windows 10。我到现在还不知道装完 TW 之后 Win10 还能不能正常启动。

      • 两个启动切换的确麻烦,主要是我要用Office和Acrobat。Linux下没有找到如Acrobat强大的、免费的PDF编辑工具(付费的如PDF Studio貌似还可以,不过价格贵!)。
        装TW的时候如果boot分区选在了windows10的EFI分区,那么\EFI分区会包含3个文件夹boot,Microsoft和opensuse,boot分区是备用的,因为有些系统支持在该分区启动,Microsoft和opensuse分别包含了两个系统的启动文件。最悲剧的是如果Windows10是默认启动项的话它每次启动都会把自己设置为默认启动,也就是导致再次重启之后就直接进入Windows10,了。现在只能用第三方的启动管理(例如rEFInd)或者将在windows里将opensuse设置为默认启动。
        另外请教一下,如果在windows里启动opensuse,只能用管理员权限创建的虚拟硬盘,那么每次启动VirtualBox都要用管理员权限来启动,有没有设什么方法?

        • 我之前尝试过这种方式,你可以看看之前的记录是否有帮助。
          我不记得用过管理员权限来创建虚拟硬盘的做法。

  3. 引用通告: openSUSE Tumbleweed 更新 Linux 内核 4.15.4、KDE Frameworks 5.43.0 和 KDE Plasma 5.12.1 等 | 水景一页

  4. 引用通告: openSUSE Tumbleweed 更新 Amarok 2.9.0、KDE Plasma 5.12.3 和 Linux 内核 4.15.8 等 | 水景一页

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>