如何在Linux系統安裝Windows 11虛擬機(QEMU/KVM) + 常用技巧

這篇文章Ivon將解說在GNU/Linux系統,用Virt Manager安裝Microsoft Windows 11系統虛擬機的過程。並解說一些常用操作技巧,讓你可以在自在的於Linux系統跑Windows VM。

Windows 11與Windows 10虛擬機的安裝方式略有不同,所以Ivon單獨寫一篇解說。Windows 11的"WSA"以及"WSL"在虛擬機內部也可以正常使用。

使用的虛擬機軟體為自由開源的Virt Manager,配上QEMU/KVM。該虛擬機軟體除了免費又高效率外,好處是即使電腦不支援TPM 2.0也可以用套件模擬,讓Windows 11能成功安裝,不需要破解登錄檔。

即使是虛擬機,安裝Windows 11也需要購買序號啟用,否則請低調找Github的Microsoft Activation Scripts這類工具繞過。

1. 確認電腦虛擬化與KVM支援狀況

要安裝Windows 11虛擬機,CPU需為x86_64架構,還要支援虛擬化,通常在BIOS可以啟用。

CPU不支援TPM 2.0沒關係,可以用模擬的。

  1. 檢查CPU是否支援虛擬化,回傳值不應為0。
1
sudo grep -E -c '(vmx|svm)' /proc/cpuinfo
  1. 檢查KVM核心模組是否已經載入,會看到intel_kvm或是amd_kvm出現在列表
1
lsmod | grep kvm

2. 安裝QEMU與Virt Manager

QEMU是作業系統模擬器,透過KVM核心模組加速。Virt Manager則為包含Libvirt的虛擬機管理工具。

Ubuntu參考這篇安裝

Arch Linux參考這篇安裝

3. 新增Windows 11虛擬機組態

Windows 11的安裝ISO可以免費在微軟官網下載。

  1. 開啟Virt Manager,點選左上角新增虛擬機

  2. 點選手動安裝

  3. 輸入Windows 11

  4. RAM至少給8GB,CPU至少給四核心

  5. 建立至少64GB的虛擬硬碟。虛擬硬碟格式是qcow2,會逐漸吃滿分配的硬碟空間。

  6. 勾選在安裝前自訂配置

  7. 晶片組改為Q35,韌體選擇OVMF_CODE.secboot.fd

  8. 點選左下角新增硬體 → 新增虛擬TPM硬體

  9. 點選新增儲存 → 裝置類型選擇CDROM,然後再選擇Windows 11的ISO

  10. 點選開機選項,確認CDROM在第一順位。

  11. 硬碟部份,儘管virtio可以改善硬碟讀取效能,但Windows的virtio常常一更新就出狀況,導致進入BSOD,所以Ivon仍使用較為穩定的SATA。

  12. Windows 11只要UEFI(上面選擇的是OVMF)支援Secure Boot即可安裝,不需要真的啟用Secure Boot。如果你想啟用真正加密,請參考這篇

  13. 設定就緒之後,點選左上角「開始安裝」

4. 開始安裝Windows 11虛擬機

  1. 開機後一直下一步即可

  2. 點選我沒有產品金鑰

  3. 為擁有全部Windows功能,建議安裝專業版

  4. 安裝至預設的虛擬硬碟

  5. 安裝後它會重開機,按照指示設定,進入桌面,等待Windows完成更新。如果開機後還是進入安裝媒體,則自行移除CDROM硬體裝置再重新開機。

5. 常用技巧

5.1. 安裝Spice Tools

在Windows虛擬機裡面,到官網下載安裝檔。

Spice Tools能讓虛擬機與實體機共用剪貼簿,Windows也會自動隨著虛擬機視窗大小縮放解析度 (虛擬機工具列→檢視→縮放檢視→自動將VM調整至與視窗大小相同)。

如果之後要GPU直通,請勿安裝Spice Tools。

5.2. 共享資料夾

如果想要與QEMU虛擬機共享資料夾,可考慮用SSHFS-win掛載本機Linux的目錄。

Linux實體機的區域IP可以用ip addr指令查看。

由於Virt Manager預設是使用NAT網路,所以每個虛擬機會分配到一個區域IP,就像區域網路多出一部電腦。於是在Windows虛擬機內,要掛載SSHFS,就是輸入Linux實體機IP:要掛載的路徑來掛載SSHFS。

5.3. 隱藏KVM虛擬化狀態

(選擇性) 不讓Windows工作管理員偵測到目前是處於虛擬環境。以前Nvidia的驅動一偵測到虛擬環境就會不給裝,但現在新版驅動已經無必要隱藏KVM。

  1. 開啟Virt Manager首頁,點選編輯 → 偏好設定 → 啟用XML編輯

  2. 確認Windows 11的硬體列表 → CPU數的設定為「複製主機CPU配置」

  3. 於概覽 → 編輯XML,找到</features>欄位,於上方加入<kvm><hidden state='on'/></kvm>,點選套用。

5.4. 於KVM虛擬機內部啟用Hyper-V

參考自Nested Virtualization - Hyper-V 2019 in qemu-kvm – /techblog

QEMu要達成巢狀虛擬化是有可能的。透過調整QEMU的設定,即可在虛擬機裡啟用Hyper-V,讓Windows跑Winsows Subsystem for Linux(WSL)與Windows Susbsytem for Android(WSA)。

編輯虛擬機硬體 → CPU數,編輯XML,找到<features>處,加入以下內容,將CPU設定為虛擬Skylake-Server-noTSX-IBRS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 <features>
    <acpi/>
    <apic/>
    <pae/>
    <hyperv>
      <synic state='on'/>
    </hyperv>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Skylake-Server-noTSX-IBRS</model>
    <feature policy='disable' name='hypervisor'/>
    <feature policy='require' name='vmx'/>
  </cpu>
  <clock offset='utc' />

再點選套用。

5.4. GPU直通改善圖形效能

QEMU/KVM的顯示卡Virtio可以透過Virglrenderer達成3D硬體加速,但僅適用於Linux客體機,不適用Windows。所以不論用哪個顯示卡,效能都不會太高。

最好的作法是將Linux的獨立顯示卡pass給Windows 11的虛擬機,使其能執行3D應用程式與跑AI計算,值得一提的是現在Nvidia不再禁止虛擬機安裝驅動了。

參見Ubuntu:Windows虛擬機顯示卡直通

5.5. 遠端存取Windows虛擬機

從手機、筆記型電腦的遠端連線程式,存取Windows虛擬機桌面。

這邊提供一個Ivon用過的簡單暴力解決方案:

  1. 於Linux實體機啟用SSH服務,並安裝ZeroTier

  2. 在Windows虛擬機也安裝ZeroTier

  3. 參考微軟說明,啟用Windows內建的RDP遠端桌面。此遠端桌面協定傳輸效率高,即使在低頻寬的情況下仍反應迅速。

  4. 在筆電下載Remmina客戶端,協定選RDP,輸入Windows虛擬機的ZeroTier IP,即可連線到遠端Windows桌面。

  5. 順帶一提,Virt Manager的Windows虛擬機可以用指令遠端開機:

1
sudo virsh start windows11

5.6. 備份與還原虛擬機

參考自Backup and Restore KVM Vms. Introduction - Sylia CH

在備份Windows 11虛擬機的時候,除了備份組態與虛擬硬碟以外,還要記得備份EFI Variables。

  1. 首先是備份,先將虛擬機關機。備份虛擬機XML組態到/run/media/user/SSD2/的第二個硬碟
1
2
3
4
5
su
# 列出虛擬機
virsh list --all
# 將虛擬機組態儲存為XML
virsh dumpxml windows11 > /run/media/user/SSD2/windows11.xml
  1. 備份虛擬機硬碟到SSD2硬碟
1
2
cp /var/lib/libvirt/images/windows11.qcow2 /run/media/user/SSD2/windows11.qcow2
cp /usr/share/edk2/x64/OVMF_CODE.secboot.fd /run/media/user/SSD2/OVMF_CODE.secboot.fd
  1. 接著是儲存EFI Variables的OVMF_VARS
1
cp /var/lib/libvirt/qemu/nvram/Windows11_VARS.fd /run/media/user/SSD2/Windows11_VARS.fd
  1. 若要還原虛擬機:
1
2
3
4
5
6
# 將虛擬硬碟移動至原本位置
su
cp /run/media/user/SSD2/windows11.qcow2 /var/lib/libvirt/images/windows11.qcow2
cp /run/media/user/SSD2/Windows11_VARS.fd /var/lib/libvirt/qemu/nvram/Windows11_VARS.fd
# 按照備份的XML組態建立虛擬機
virsh define --file  /run/media/user/SSD2/windows11.xml

感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。

這是Giscus留言板,需要登入Github帳號才能留言。方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。