在UTM中使用苹果虚拟化的各种尝试 | Mayx的博客
Author: mayx
Description: 用官方的方式做非官方的事！
Date: 2025-03-25T00:00:00+08:00

25 March 2025 - 字数统计：2781 - 阅读大约需要9分钟 - Hits: Loading...

# 在UTM中使用苹果虚拟化的各种尝试

by mayx

这是一篇创建于 天前的文章，其中的信息可能已经有所发展或是发生改变。

AI摘要

这篇文章讲述了作者在苹果设备的UTM虚拟机环境中尝试使用苹果虚拟化框架进行非传统操作，即通过UTM的Virtio GPU和Virtualization.framework（VZ）安装Windows系统。作者首先复制了一个已有的VZUbuntu虚拟机，然后尝试使用重装脚本来转换为Windows，但遇到黑屏问题。通过安装Windows驱动和调整显示器设置，作者成功让Windows在虚拟机中运行，且发现VZ在性能上优于HVF。文章最后提到，虽然在macOS 12中使用VZ安装Linux存在一些挑战，如不支持UEFI和需要手动准备内核，但作者仍然成功进行了实验，认为苹果的虚拟化技术潜力未被充分利用。作者也指出，这些非官方方法可能随着macOS更新而变得不稳定。

- 起因
- 在UTM中使用苹果虚拟化框架安装Windows
- 在macOS 12中的UTM使用苹果虚拟化框架安装Linux
- 感想

用官方的方式做非官方的事！

#
起因

在几年前刚收到MacBook Pro的时候，我曾安装过虚拟机软件UTM。但是因为我的Mac内存很小，用虚拟机的体验很差，所以就把UTM卸载掉了。不过以前还我还装过一台黑苹果，在上面也安装了UTM。

最近正好由于某些原因我需要在macOS上安装虚拟机，既然有UTM用就继续用UTM了。当然正常情况就是按正常的方式安装系统然后正常的用，这并没有什么意思。所以我想整点有意思的事情，想试试不太正常的使用UTM😝。

#
在UTM中使用苹果虚拟化框架安装Windows

如果用过UTM的话应该知道，UTM有很多选项，比如底层的虚拟化框架可以用QEMU或者Virtualization.framework（VZ），而QEMU的后端可以选TCG或者是Hypervisor.framework（HVF）。它们有很多特色，像TCG的兼容性最好，可以模拟任何架构的CPU，但是性能最差，HVF使用硬件虚拟化加速，只能运行宿主机架构的程序，但是性能比较好，而VZ经过了苹果官方优化，性能最好。

那么现在我想安装Windows，又想有最好的性能，那我应该选择VZ吧？可是UTM不允许我这样选择，如果选择安装Windows就会强制使用QEMU……只有Linux或者macOS（在ARM处理器）才能使用VZ……那我应该如何绕过这个限制呢？

我想起来之前让没用的主机感染木马的文章中使用了一键DD/重装脚本把我服务器的Linux系统重装成了Windows系统，那么我能不能用相同的方式先按照正常的方式用VZ安装一个Linux系统然后使用这个脚本重装成Windows？我觉得理论上应该没问题，所以就尝试了一下。

我在这之前已经安装过了一个用了VZ的Ubuntu虚拟机，新建比较费时间所以就直接把这个虚拟机复制了一份。然后下载了重装脚本准备重装系统，但是看说明现在不能让脚本自己查找系统镜像安装了，不过没关系，前段时间我下了一份Windows 10的镜像，接下来我只需要在镜像所在目录执行

    python3 -m http.server

开启一个文件服务器，然后在虚拟机中执行

    bash reinstall.sh windows --image-name "Windows 10 Pro" --iso "http://192.168.64.1:8000/windows.iso"

就可以了，执行后重启就可以在UTM的虚拟机界面中看到脚本执行的一系列操作。在这期间都很顺利，然而在它执行完之后，虚拟机的屏幕就黑了，而且重启也没有任何变化，看来是实验失败了？不过也可能是因为苹果整的虚拟显示器在Windows中识别不出来，所以显示不出东西，因为我看活动监视器中CPU的占用率也在跳变，虚拟机应该仍然在运行，于是我下载了Windows App（以前的远程桌面），使用虚拟机之前的IP进行连接，结果连接成功了😆。看来苹果的虚拟化框架是能运行Windows的嘛，居然没有一个人尝试一下。

不过屏幕不能亮是真的没有驱动吗？我看了眼设备管理器，搜了一下那个没有安装驱动的视频控制器的设备ID“1af4:1050”，好像是Virtio GPU，这个驱动我记得在virtio-win里是有的，而且重装脚本也会自动下载这个驱动，为什么会没有自动安装呢？可能是设备ID和驱动不一致吧……不过不影响，我选择更新驱动，在列表中选择“Red Hat VirtIO GPU DOD controller”之后UTM的虚拟屏幕中就可以看到画面了，虽然分辨率只能是1024*768……不过能用就很不错了。

再接下来我就需要验证一下它的性能是不是最好的，我把这个虚拟机的硬盘复制了一份，新建了一个使用HVF后端的QEMU虚拟机，把这个硬盘挂载上，然后使用国际象棋跑分，看了一下VZ的跑分相比HVF的跑分高了大概5%-10%，还是挺厉害的。

至于其他方面，我看了一眼用HVF的QEMU虚拟机CPU不能显示正确的型号，而VZ是可以的，另外VZ的‌SMBIOS信息中也可以看到Apple的字样，证明这个Windows确确实实是跑在了苹果的虚拟化框架。不过以上的测试都是基于x86架构的macOS，等回头我的Mac Studio到了之后再在ARM架构的macOS上再测一下，看看能不能用相同的方式安装，如果可以的话，说明VZ的虚拟机没什么兼容性的问题，UTM应该放开使用VZ安装Windows的选项，让我们测测苹果的技术才对。

#
在macOS 12中的UTM使用苹果虚拟化框架安装Linux

虽然在刚刚的测试中，用VZ安装Linux就和其他普通的虚拟机安装Linux一样简单，但是之前的测试是在macOS 15上测的。现在我遇到了一个新问题，我现在有一台2016年的Mac，上面运行着macOS 12，而且不能用OCLP升级到macOS 15（因为不是我的电脑）。现在我想在这台电脑上用苹果虚拟化框架安装Linux，虽然用QEMU更简单，但是感觉没意思。在macOS 12中不支持UEFI bootloader，所以我需要手工准备内核镜像之类的东西。

当然从零开始有点难，我打算先用QEMU安装一遍Ubuntu Server。在创建虚拟机之后需要注意，要把刚创建好的虚拟机的硬盘删掉，因为那是qcow2格式的，在VZ中只支持img格式的硬盘，所以删掉之后需要创建一个“RAW映像”，然后按照正常的方式安装系统。

安装好之后从“/boot”目录中把“vmlinuz”和“initrd.img”复制出来，作为Linux内核和初始Ramdisk，我看说明上要未经压缩的Linux内核映像，但是好像是压缩的也能用🤔。随后关机把在QEMU中的硬盘映像复制出来，作为根文件系统映像。

至于启动参数，可以看“/boot/grub/grub.cfg”中内核后面跟的那串，然后再加上“console=hvc0”，因为macOS 12中使用VZ没有虚拟屏幕，只能用虚拟串口连接。在一切准备好之后就可以开机了，在一串内核信息不停滚动后，显示出了登录的提示符，实验就成功结束了。

不过这样启动的话在系统中所有对内核以及对initramfs的更新就全都不会生效了，毕竟虚拟机根本读不到内核了……这倒是影响不大，反正不更新也不是不能用，更何况macOS都不打算更新，虚拟机不更新又能怎样呢🤣。

#
感想

看来苹果的“不支持”不代表真的不支持，想想既然是虚拟机，当然就不应该限制系统类型啊，毕竟虚拟机虚拟的是硬件，又不是软件。不过倒是也能理解苹果不需要声明支持自己的竞品，所以也没必要做相应的兼容和测试，但居然没见到有人尝试一下，也挺奇怪，明明用Mac的人也有不少对技术很有探索精神的人啊……

不过随着macOS的更新，像这些非官方支持的办法估计也很有可能出问题，毕竟苹果并不对这些情况进行任何形式的保障，也许以后苹果的哪次更新这个方法就用不了了呢……

tags: 虚拟化 - 苹果 - UTM 查看原始文件

#### 推荐文章

Loading...

上一篇：关于HiFi的尝试与探索
下一篇：最近对博客搜索功能的优化记录
想问这篇文章
召唤伊斯特瓦尔