VirtualBox/在虚拟机中安装 Arch Linux

来自 Arch Linux 中文维基

Tango-preferences-desktop-locale.png本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队Tango-preferences-desktop-locale.png

附注: Partial translation(在 Talk:VirtualBox/在虚拟机中安装 Arch Linux# 中讨论)

本文介绍如何在 VirtualBox 中安装 Arch linux。

在虚拟机的虚拟光驱里加载 Arch Linux 的安装镜像,然后按照安装指南里的步骤继续即可。

安装[编辑 | 编辑源代码]

以 EFI 模式安装(可选)[编辑 | 编辑源代码]

Enabling EFI for Arch, 如果你想在 VirtualBox 里以 EFI 模式安装 Arch Linux,这需要在虚拟机的设置窗口里,先从左侧选择 System,再从右侧选择 Motherboard 标签页,最后勾选 Enable EFI (special OSes only) 选项。从安装镜像的启动菜单里选好 Arch Linux 的内核之后,这时启动过程要卡顿一两分钟,之后就能正常进入系统。稍安勿躁。

等系统和启动引导程序安装成功之后,VirtualBox 会首先尝试从 ESP 加载 /EFI/BOOT/BOOTX64.EFI。如果这个首选的文件加载失败,VirtualBox 会从 ESP 根目录尝试加载 EFI shell 脚本 startup.nsh。这样来说,为了能顺利进入系统,你需要从下面几种方案选一个:

  • 每次都从 EFI shell 手动选择启动引导程序
  • 把启动引导程序的 .EFI 文件移动到默认位置:/EFI/BOOT/BOOTX64.EFI
  • 自己编写 ESP 分区的 /startup.nsh 脚本,用这个脚本加载想使用的引导程序(例如 \EFI\grub\grubx64.efi
  • 从 ESP 分区的 startup.nsh 脚本直接启动到 Linux

虽然 VirtualBox 支持按 F2 进入自带的 VirtualBox Boot Manager 来管理 EFI 启动过程,但这部分功能还不完整而且有 bug。它还不能持久保存交互式设置的 EFI 变量。也就是说,开机时按下 F12 之后手动添加的、或者用 efibootmgr 添加的 EFI 项目,重启后依然可以生效,但关机之后就会失效。

另见:UEFI VirtualBox installation boot problems.

安装客体机插件[编辑 | 编辑源代码]

VirtualBox 客体机插件 为客体系统提供了必要的驱动与应用软件,其作用包括改善图像分辨率与鼠标支持等。在客体机的 Arch Linux 系统里:

注意:
  • 另一个安装方案是从宿主机(如果也是 Arch 系统)安装 virtualbox-guest-iso,这个软件包里有供客体机安装插件的 ISO 文件。装好这个包之后,启动客体机,点击菜单项目 Devices -> Insert Guest Additions CD Image 即可加载安装镜像。
  • 若要手动重新编译客体机的 VirtualBox 内核模块,以 root 权限运行 rcvboxadd setup 即可。

客体机里运行的插件和主体机上的 VirtualBox 程序版本需要匹配。否则某些功能(比如剪贴板互通)可能会失效。如果你在客体机里升级系统(比如运行了 pacman -Syu),那么宿主机上的 VirtualBox 也要跟进更新到最新版。VirtualBox GUI 菜单里的 "Check for updates" 功能未必够用,可以去官网 VirtualBox.org 再看看。

加载 VirtualBox 内核模块[编辑 | 编辑源代码]

若要开机自动加载模块,启用 vboxservice.service 服务即可。该服务还能起到将客户机时间与宿主机同步的功能。

若要手动加载模块,使用这个命令:

# modprobe -a vboxguest vboxsf vboxvideo

启动 VirtualBox 客体机服务[编辑 | 编辑源代码]

安装并加载了 VirtualBox 内核模块之后,如果你在虚拟机系统里使用 X,那么推荐启动这样一个客体机服务:服务的程序名字叫 VBoxClient,它与 X 窗口系统沟通来实现其功能。具体功能包括:

  • 在宿主机与客体机之间互通剪贴板,实现鼠标拖拽文件
  • 无缝窗口模式
  • 宿主机的虚拟机窗口缩放之后,使客体机的显示分辨率与之自动匹配
  • 检查宿主机的 VirtualBox 的版本

上述功能由专门的命令行参数来各自启用:

$ VBoxClient --clipboard --draganddrop --seamless --display --checkhostversion

为了方便,VBoxClient-all 这个 shell 脚本能取代上面这一整行命令。

virtualbox-guest-utils 包提供了 XDG 自启动项目 /etc/xdg/autostart/vboxclient.desktop,这会在登录 X 时自动运行 VBoxClient-all。然而,如果你在用的桌面环境窗口管理器不支持 XDG 自启动,那么你就需要手动配置。详见 Autostarting#桌面环境

至此,你的 Arch Linux 应该能在虚拟机里正常运行了。需要指出的是,某些功能(如剪贴板互通)在 VirtualBox 里是默认禁用的。这需要在各个虚拟机的设置选项里手动开启(Settings > General > Advanced > Shared Clipboard)。

显卡加速[编辑 | 编辑源代码]

从 VirtualBox 选项里可以开启显卡加速。已知 GDM 显示管理器从 3.16 版本起会导致显卡加速失效。[1] 如果你遇到类似问题,可以换另一种显示管理器(比如 LightDM)试试看。[2] [3]

启用共享目录[编辑 | 编辑源代码]

共享目录的设置在宿主机这边操作。启动 VirtualBox 的图形管理界面,在虚拟机的设置界面的 Shared Folders 标签页可以找到相关设置。可以设置的项目包括:目录在宿主机的位置 Folder Path,客户机挂载点的名字 Folder name,还有 Read-onlyAuto-mount, Make permanent 等杂项。还有一种管理方法是使用 VBoxManage。详情可以参阅 VirtualBox 手册

无论用哪一种方法来挂载共享目录,首先都要做些准备工作。

为了避免出现 /sbin/mount.vboxsf: mounting failed with the error: No such device 这种错误,首先要确保 vboxsf 内核模块已经加载。只要按照前面的步骤在加载客体机里加载内核模块,这一步应该没问题。

为了让挂载之后的目录能让 root 之外的用户也直接读写,还要:

手动挂载[编辑 | 编辑源代码]

在 Arch Linux 客体系统里挂载共享目录的命令是:

# mount -t vboxsf <共享目录的名字> <客户机系统的挂载点>

这个命令可以查看 vboxsf 的挂载参数:

# mount.vboxsf

假如用户不在 vboxsf 组里,用这个命令可以把挂载点的读写权限授权给他:

# mount -t vboxsf -o uid=1000,gid=1000 home /mnt/

其中 uidgid 的值要与接受授权的用户的值相对应。用 id 命令可以为该用户找到这两个值。

自动挂载[编辑 | 编辑源代码]

注意: 自动挂载需要启用 vboxservice 服务才能生效

为使用自动挂载功能,首先需要在 GUI 的管理界面里勾选自动挂载,或者为命令行工具 VBoxManage sharedfolder 加上参数 --automount

此时,共享目录应该已经在 /media/sf_<共享目录的名字> 挂载上了。如果用户没有读写权限,确认一下该目录的权限是否是 755。如果是 750 的话,确保该目录属于 vboxsf 组。

可以用软链接把共享目录链接到方便的位置,这样就不必进入那么远的目录了:

$ ln -s /media/sf_共享目录的名字 ~/my_documents

按配置于启动时挂载[编辑 | 编辑源代码]

fstab 可以用来挂载目录。然而,为了避免 Systemd 启动可能带来的问题,要在 /etc/fstab 配置里为共享目录加上挂载选项 noauto,x-systemd.automount。这样,共享目录会在开机后初次访问时挂载,而不是在系统启动过程里挂载。这可以避免 Systemd 在客体机插件加载之前就按 fstab 挂载目录而导致的出错。

sharedFolderName  /path/to/mntPtOnGuestMachine  vboxsf  uid=user,gid=group,rw,dmode=700,fmode=600,noauto,x-systemd.automount 
  • sharedFolderName: 在虚拟机设置界面 Settings > SharedFolders > Edit > FolderName 里所设置的值。这个值和宿主机里实际的目录名可以不相同。要查看虚拟机的设置,在宿主机的 VirtualBox GUI 管理界面选中虚拟机,然后点击工具栏的 Settings 按钮,再从弹出的对话框里选择 Shared Folders
  • /path/to/mntPtOnGuestMachine: 如果这个路径在虚拟机里还不存在,那么需要在挂载之前手动创建(用 mkdir 就可以)。
  • dmode/fmode 分别用来指定挂载共享目录之后,下面的子目录与文件的属性。

mount.vboxsf 尚不支持 nofail 挂载参数:

desktop  /media/desktop  vboxsf  uid=user,gid=group,rw,dmode=700,fmode=600,nofail  0  0

从宿主机 SSH 登录客体机[编辑 | 编辑源代码]

在虚拟机设置的 Network 标签页 -> 右侧打开 Advanced 折叠 -> 单击 Port Forwarding 按钮,可以设置端口。

假如我们设置了将宿主机的 3022 端口转发到客体机的 22 端口。然后在宿主机执行:

user@host$ ssh -p 3022 $USER@localhost

即可 SSH 登录客体机。

用 SSHFS 来实现共享目录[编辑 | 编辑源代码]

配置好了端口转发,再装上 SSHFS,只要在宿主机运行这个命令就可以把客体机的目录挂载到宿主机:

user@host$ sshfs -p 3022 $USER@localhost:$HOME ~/shared_folder

这样也能实现互传文件。

Troubleshooting[编辑 | 编辑源代码]

Access serial port from guest[编辑 | 编辑源代码]

See Working with the serial console#Connect using a terminal emulator program.

TTY text too small during installation[编辑 | 编辑源代码]

From the host, VirtualBox Manager, set the Display Scale-factor to 2.00 or 3.00.

启动 Xorg 之后虚拟机卡死[编辑 | 编辑源代码]

出现这一问题的原因是驱动程序缺失或有错。例如:[4][5]。试试从菜单项 Settings > Display 里关闭 3D 加速,并确认要用的 Xorg 驱动都已装好。

全屏模式只能看到黑屏[编辑 | 编辑源代码]

在某些窗口管理器(i3, awesome)下运行 VirtualBox 时,由于顶层状态栏(overlay bar)的问题,VirtualBox 的全屏模式会出现问题。试试在菜单项 "Guest Settings > User Interface > Mini ToolBar" 里禁用 "Show in Full-screen/Seamless" 有可能绕过这一问题。详情可见上游的问题汇报

如果屏幕是在某个大小之后开始黑屏,例如大于 2048 像素宽度时,请尝试增加 Settings > Display > Screen > Video Memory

Linux 客体机的声音缓慢 / 扭曲[编辑 | 编辑源代码]

在 VirtualBox 里运行时,Linux 内核的 AC97 声卡驱动偶尔会猜错时钟频率设定。这就会造成声音播放速度太慢 / 太快。在 /etc/modprobe.d 目录里创建一个内容如下的文件即可解决:

options snd-intel8x0 ac97_clock=48000

Linux guests have slow/laggy audio[编辑 | 编辑源代码]

In some cases, audio can have laggy performance (for example lag behind video when streaming video online). A possible workaround can be to use the Intel HD Audio controller in VirtualBox and disable its power saving by adding the following line in a file in /etc/modprobe.d/ in the guest OS:

options snd_hda_intel power_save=0 power_save_controller=N

Arch: pacstrap 脚本出错[编辑 | 编辑源代码]

如果在安装 Arch 系统时,还没有 启动至新安装到虚拟盘的系统,就用 pactrap 直接安装客体机插件,需要以 root 身份运行一次 umount -l /mnt/dev 然后再次运行 pactrap。否则新装的系统就不可用。

Windows 宿主机: VERR_ACCESS_DENIED[编辑 | 编辑源代码]

为了能在 Windows 宿主机上读取 RAW 格式的 VMDK 镜像,VirtualBox GUI 需要以管理员权限启动。

No hardware 3D acceleration in Arch Linux guest[编辑 | 编辑源代码]

virtualbox-guest-utils package as of version 5.2.16-2 does not contain the file VBoxEGL.so. This causes the Arch Linux guest to not have proper 3D acceleration. See FS#49752.

To deal with this problem, apply the patch set at FS#49752#comment152254. Some fix to the patch set is required to make it work for version 5.2.16-2.

Plasma resets guest's resolution to 800×600[编辑 | 编辑源代码]

See KDE#Cannot change screen resolution when running in a virtual machine.

Black screen with Plasma-X11 minimal install[编辑 | 编辑源代码]

If you used plasma-desktop minimal install instead of plasma (which includes Wayland support), then probably you will have black screen with cursor after starting Plasma-X11 session.

To fix this set resize vm window several times, then set resolution manually in VirtualBox window itself by:

View -> Virtual Screen 1 -> Resize to 1024x768 (or other resolution you like)

Then 安装 kscreen.

Open in KDE launcher System Settings -> Startup and Shutdown -> Background Services, stop and unselect KScreen2 and save settings. Issue should go away forever