VirtualBox/在虛擬機中安裝 Arch Linux
本文介紹如何在 VirtualBox 中安裝 Arch linux。
在虛擬機的虛擬光碟機裡加載 Arch Linux 的安裝鏡像,然後按照安裝指南裡的步驟繼續即可。
如果你想在 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 再看看。
若要開機自動加載模塊,啟用 vboxservice.service 服務即可。該服務還能起到將客戶機時間與宿主機同步的功能。
若要手動加載模塊,使用這個命令:
# modprobe -a vboxguest vboxsf vboxvideo
安裝並加載了 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 自啟動,那麼你就需要手動配置。詳見自動啟動#桌面環境。
至此,你的 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
在虛擬機設置的 Network 標籤頁 -> 右側打開 Advanced 摺疊 -> 單擊 Port Forwarding 按鈕,可以設置埠。
假如我們設置了將宿主機的 3022 埠轉發到客體機的 22 埠。然後在宿主機執行:
user@host$ ssh -p 3022 $USER@localhost
即可 SSH 登錄客體機。
配置好了埠轉發,再裝上 SSHFS,只要在宿主機運行這個命令就可以把客體機的目錄掛載到宿主機:
user@host$ sshfs -p 3022 $USER@localhost:$HOME ~/shared_folder
這樣也能實現互傳文件。
在主機上的VirtualBox管理器中,將顯示比例設置為2.00或3.00。
出現這一問題的原因是驅動程序缺失或有錯。例如:[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。
在 VirtualBox 裡運行時,Linux 內核的 AC97 音效卡驅動偶爾會猜錯時鐘頻率設定。這就會造成聲音播放速度太慢 / 太快。在 /etc/modprobe.d 目錄裡創建一個內容如下的文件即可解決:
options snd-intel8x0 ac97_clock=48000
在某些情況下,音頻可能會出現延遲性能問題(例如在在線視頻流媒體中音頻與視頻不同步)。一個可能的解決方法是在VirtualBox中使用Intel HD音頻控制器,並通過在客戶作業系統的/etc/modprobe.d/ 目錄下的文件中添加以下行來禁用其節能功能:
options snd_hda_intel power_save=0 power_save_controller=N
如果在安裝 Arch 系統時,還沒有啟動至新安裝到虛擬盤的系統,就用 pactrap 直接安裝客體機插件,需要以 root 身份運行一次 umount -l /mnt/dev 然後再次運行 pactrap。否則新裝的系統就不可用。
為了能在 Windows 宿主機上讀取 RAW 格式的 VMDK 鏡像,VirtualBox GUI 需要以管理員權限啟動。
virtualbox-guest-utils包 包的版本5.2.16-2缺少文件VBoxEGL.so. 這導致Arch Linux虛擬機無法正常使用3D加速。請參閱 FS#49752.
為了解決這個問題,請按照FS#49752#comment152254中提供的補丁集進行修復。需要對補丁集進行一些修復,以使其適用於版本5.2.16-2。
See KDE#Cannot change screen resolution when running in a virtual machine.
如果您使用的是 plasma-desktop 最小安裝,而不是 plasma (包含Wayland支持), 那麼在啟動Plasma-X11會話後,可能會出現黑屏但有光標的情況。
要解決此問題,請在VirtualBox窗口中多次調整虛擬機窗口大小,然後通過以下方式手動設置解析度。
View -> Virtual Screen 1 -> Resize to 1024x768 (or other resolution you like)
Open in KDE launcher System Settings -> Startup and Shutdown -> Background Services, stop and unselect KScreen2 and save settings. Issue should go away forever