VirtualBox (简体中文)/Install Arch Linux as a guest (简体中文) - ArchWiki

Jump to content
< VirtualBox (简体中文)

本文或本节需要翻译。要贡献翻译，请访问简体中文翻译团队。

附注： Partial translation（在 Talk:VirtualBox (简体中文)/Install Arch Linux as a guest (简体中文)# 中讨论）
翻译状态：本文是 VirtualBox/Install Arch Linux as a guest 的翻译。上次翻译日期：2022-10-23。如果英文版本有所更改，则您可以帮助同步翻译。

Related articles

- VirtualBox (简体中文)

本文介绍如何在 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 系统里：

- 若需要支持 X，安装 virtualbox-guest-utils 这个包
- 若不需支持 X，安装 virtualbox-guest-utils-nox

注意：

- 另一个安装方案是从宿主机（如果也是 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-only，Auto-mount, Make permanent 等杂项。还有一种管理方法是使用 `VBoxManage`。详情可以参阅 VirtualBox 手册。

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

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

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

- 安装 virtualbox-guest-utils 软件包时会创建用户组 `vboxsf`（在前面的步骤就装过了）
- 你的用户需要加入到 `vboxsf` 用户组

#### 手动挂载

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

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

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

    # mount.vboxsf

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

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

其中 uid 和 gid 的值要与接受授权的用户的值相对应。用 `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 install kscreen.

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

Categories:

- Installation process (简体中文)
- Hypervisors (简体中文)

Hidden category:

- Pages or sections flagged with Template:Translateme (简体中文)