在Windows11 WSL上通过QEMU KVM流畅运行macOS虚拟机(2024)
前言
除了安装黑苹果(Hackintosh)外,在Windows PC上体验黑苹果的方法还有安装Mac OS虚拟机,由于授权、软件支持等因素,VMware、Virtual Box等虚拟机软件虽能运行Apple macOS,却十分缓慢。
本文中介绍的方法使用WSL及QEMU-KVM的方案,可以较为流畅地运行macOS虚拟机。
基本系统要求
- Windows 11
- 已安装vGPU驱动程序。参考
- 建议16GB RAM
- 建议至少一块固态硬盘
- 虚拟化已启用
- WSL 2
本教程的电脑配置如下:
名称 | 型号/规格 |
---|---|
CPU | Intel i7-14700KF |
RAM | 64GB DDR5 |
GPU | Nvidia GeForce RTX 4070 Super |
OS | Windows 11 |
WSL的安装
若已安装WSL2,请跳过本部分,本篇教程中使用Ubuntu环境。
以管理员权限打开Windows Terminal
或者PowerShell
,运行命令安装WSL
:
wsl --install
如果在此之前没有安装过WSL2,请先运行以下命令将新安装的WSL默认版本设置为第二代
wsl --set-default-version 2
按照屏幕提示操作即可
WSL的配置
需要编辑WSL的配置文件,允许嵌套虚拟化。
编辑用户目录下的WSL全局配置文件.wslconfig
,加入以下内容:
[wsl2]
networkingMode=bridged
vmSwitch=ex
memory=16G
processors=8
swap=16G
localhostForwarding=true
nestedVirtualization=true
pageReporting=true
kernelCommandLine=intel_iommu=on iommu=pt kvm.ignore_msrs=1 kvm-intel.nested=1 kvm-intel.ept=1 kvm-intel.emulate_invalid_guest_state=0 kvm-intel.enable_shadow_vmcs=1 kvm-intel.enable_apicv=1
其中的memory
一项是设置允许的WSL内存大小,swap
一项可根据需要设置。
如果你在你的用户目录找不到.wslconfig
,则可以修改局部的WSL配置文件wsl.conf
首先在终端/PowerShell中输入wsl
进入Ubuntu环境,接着通过你喜欢的任一编辑器修改/etc/wsl.conf
,将上述内容加入到此文件即可。
接着重启wsl
wsl --shutdown
安装macOS
安装必需软件
在上面的步骤中,我们已经配置好了一个支持嵌套虚拟化的环境,因此我们可以基于QEMU-KVM安装macOS虚拟机。得益于微软及各显卡厂商对WSL2
的优化,即便在WSL上运行的KVM虚拟机也能利用虚拟的GPU,从而进行一定的性能提升。
首先输入wsl
进入Ubuntu,安装必需软件(依次执行以下命令):
sudo apt update
sudo apt-get install qemu uml-utilities virt-manager git wget dmg2img libguestfs-tools p7zip-full make -y
配置KVM
首先配置KVM开关
echo 1 > /sys/module/kvm/parameters/ignore_msrs
设置权限(依次执行以下命令)
sudo usermod -aG kvm $(whoami)
sudo usermod -aG libvirt $(whoami)
OSX-KVM项目
OSX-KVM项目
可以使基于QEMU-KVM的macOS虚拟机配置更加容易,且无需自行下载镜像,创建磁盘,和一大堆复杂的QEMU命令打交道。配置它十分容易。
首先拉取OSX-KVM项目:
sudo git clone https://github.com/kholia/OSX-KVM.git
注意:此处的目录在接下来的步骤中将会是macOS安装镜像和硬盘文件的位置,默认在C盘的用户目录下,此处可先通过cd命令切换为其他盘符。例如切换为D盘,则先执行cd /mnt/d
切换目录:
cd OSX-KVM
下载macOS镜像
OSX-KVM项目
中提供了macOS镜像下载脚本,执行:
sudo ./fetch-macOS-v2.py
选择一个系统即可,该脚本会自动从Apple CDN下载macOS镜像,如果下载缓慢,请尝试断开代理并重新运行脚本尝试。
下载完毕后的macOS镜像为dmg
格式,使用命令将其转为img
格式
sudo dmg2img BaseSystem.dmg BaseSystem.img
创建磁盘镜像
需要至少一个磁盘进行安装macOS,执行下列命令生成一个512GB的磁盘
sudo qemu-img create -f qcow2 mac_hdd_ng.img 512G
将虚拟机加入Virt-manager
WSL2已支持systemd
,因此我们无需进行其他配置。在上文我们已经安装了Virt-manager
,这个软件包可以帮助我们通过图形化的方式管理虚拟机。
如果OSX-KVM
位于用户目录,依次执行:
sudo sed "s/CHANGEME/$USER/g" macOS-libvirt-Catalina.xml > macOS.xml
virt-xml-validate macOS.xml
virsh --connect qemu:///system define macOS.xml
将CHANGME
改为你的wsl用户名。
如果OSX-KVM
位于其他目录,则用任意文本编辑软件打开macOS-libvirt-Catalina.xml
文件,将所有文件的路径改为你的OSX-KVM
目录路径,如果没有改完或路径错误,将无法从Virt-manager
启动虚拟机
可通过pwd
命令查看OSX-KVM
目录位置。
改完后,依次运行以下命令:
virt-xml-validate macOS.xml
virsh --connect qemu:///system define macOS.xml
配置虚拟机
依次执行以下命令
sudo systemctl start libvirtd
sudo virt-manager
如果配置正确,则会出现virt-manager
的界面,且有一个名为macOS
的虚拟机
RAM设置
为了保证macOS的流畅,推荐使用8GB(8192MB)内存以上
同时可以设置核心个数,根据需求设置即可,可以选择和WSL配置一致。
安装macOS
请在进入macOS安装界面后先选择磁盘工具
,格式化虚拟机磁盘为APFS格式,再安装macOS。安装过程需要一定时间(视电脑配置及虚拟机分配到的资源为准。
在第一次重新启动及后续进入启动项选择时,选择macOS installer
或类似新出现的磁盘,即便它的名字可能不是你抹掉磁盘时设置的名字。
由于OSX-KVM
使用OpenCore进行引导,因此可使用OpenCore Configurator
挂载EFI分区,对设备序列号、类型进行定制,可参考其他教程。
请问这个对硬件有要求吗?
CPU和显卡必须要可以黑苹果的还是普通的就可以了啊?
硬件配置不能太低,至少16GB内存是必要的,毕竟如今macOS的最低内存要求是8GB。
至于硬件没有特别要求,因为是在qemu里跑的
qemu内部怎么调节mac系统的系统分辨率
.wslconfig部分有些问题:
1、未知密钥 'wsl2.pageReporting',能否注释?
2、找不到 VmSwitch 'ex'。注释掉后提示“桥接网络需要设置 wsl2.vmSwitch。”
1.可以,根据https://github.com/microsoft/WSL/issues/9899#issuecomment-1495319805
2.可能需要手动用Set-VMSwitch WSL -NetAdapterName xxx配置桥接网络,参考https://blog.csdn.net/chubbykkk/article/details/125216708
你好,首先非常感谢你分享的教程,其次我发现实际上macos是基于qemu来运行的,那是不是可以直接在windows宿主机上安装qemu来运行macos呢?而且我在网上还搜到qemu是可以支持宿主机的显卡直通的,请问用vGPU的形式来提供的显卡加速能力能否应付日常使用?
可以在Windows上的QEMU中运行macOS,但是Windows上的QEMU不支持KVM虚拟化,理论性能会打折扣。
不配置桥接网络会有影响吗
我并不想把wsl改成桥接模式,有什么解决办法么
您好,
修改完成macOS-libvirt-Catalina.xml后,我执行了
sudo sed "s/root/$USER/g" macOS-libvirt-Catalina.xml > macOS.xml
然后遇到了如下错误
root@xxx:/mnt/d/OSX-KVM# virt-xml-validate macOS.xml
macOS.xml validates
root@xxx:/mnt/d/OSX-KVM# virsh --connect qemu:///system define macOS.xml
error: Failed to define domain from macOS.xml
error: unsupported configuration: Emulator '/usr/bin/qemu-system-x86_64' does not support virt type 'kvm'
请问这个可能是什么导致的啊,只搜索到一篇相关内容,没太看懂,是说需要用非root用户去执行这些指令,而不是使用WSL默认的root用户吗
https://unix.stackexchange.com/questions/774669/virsh-sometimes-does-not-support-type-kvm
显存只有8MB,怎么解决,似乎无法调用集成显卡。
libvirt的网络似乎没有启动,手动启动发生以下报错
virsh net-start default
error: Failed to start network default
error: internal error: Child process (VIR_BRIDGE_NAME=virbr0 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper) unexpected exit status 2:
dnsmasq: failed to bind DHCP server socket: Address already in use