blog/_posts/2025-03-25-utm.md

39 lines
7.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: 在UTM中使用苹果虚拟化的各种尝试
tags: [虚拟化, 苹果, UTM]
---
用官方的方式做非官方的事!<!--more-->
# 起因
在几年前刚[收到MacBook Pro](/2023/02/03/mbp.html)的时候,我曾安装过虚拟机软件[UTM](https://github.com/utmapp/UTM)。但是因为我的Mac内存很小用虚拟机的体验很差所以就把UTM卸载掉了。不过以前还我还[装过一台黑苹果](/2024/06/16/hackintosh.html)在上面也安装了UTM。
最近正好由于某些原因我需要在macOS上安装虚拟机既然有UTM用就继续用UTM了。当然正常情况就是按正常的方式安装系统然后正常的用这并没有什么意思。所以我想整点有意思的事情想试试不太正常的使用UTM😝。
# 在UTM中使用苹果虚拟化框架安装Windows
如果用过UTM的话应该知道UTM有很多选项比如底层的虚拟化框架可以用QEMU或者[Virtualization.framework](https://developer.apple.com/documentation/Virtualization)VZ而QEMU的后端可以选TCG或者是[Hypervisor.framework](https://developer.apple.com/documentation/hypervisor)HVF。它们有很多特色像TCG的兼容性最好可以模拟任何架构的CPU但是性能最差HVF使用硬件虚拟化加速只能运行宿主机架构的程序但是性能比较好而VZ经过了苹果官方优化性能最好。
那么现在我想安装Windows又想有最好的性能那我应该选择VZ吧可是UTM不允许我这样选择如果选择安装Windows就会强制使用QEMU……只有Linux或者macOS在ARM处理器才能使用VZ……那我应该如何绕过这个限制呢
我想起来之前[让没用的主机感染木马](/2024/11/02/trojan.html)的文章中使用了[一键DD/重装脚本](https://github.com/bin456789/reinstall)把我服务器的Linux系统重装成了Windows系统那么我能不能用相同的方式先按照正常的方式用VZ安装一个Linux系统然后使用这个脚本重装成Windows我觉得理论上应该没问题所以就尝试了一下。
我在这之前已经安装过了一个用了VZ的Ubuntu虚拟机新建比较费时间所以就直接把这个虚拟机复制了一份。然后下载了重装脚本准备重装系统但是看说明现在不能让脚本自己查找系统镜像安装了不过没关系前段时间我下了一份Windows 10的镜像接下来我只需要在镜像所在目录执行
```bash
python3 -m http.server
```
开启一个文件服务器,然后在虚拟机中执行
```bash
bash reinstall.sh windows --image-name "Windows 10 Pro" --iso "http://192.168.64.1:8000/windows.iso"
```
就可以了执行后重启就可以在UTM的虚拟机界面中看到脚本执行的一系列操作。在这期间都很顺利然而在它执行完之后虚拟机的屏幕就黑了而且重启也没有任何变化看来是实验失败了不过也可能是因为苹果整的虚拟显示器在Windows中识别不出来所以显示不出东西因为我看活动监视器中CPU的占用率也在跳变虚拟机应该仍然在运行于是我下载了[Windows App](https://apps.apple.com/us/app/windows-app/id1295203466)以前的远程桌面使用虚拟机之前的IP进行连接结果连接成功了😆。看来苹果的虚拟化框架是能运行Windows的嘛居然没有一个人尝试一下。
不过屏幕不能亮是真的没有驱动吗我看了眼设备管理器搜了一下那个没有安装驱动的视频控制器的设备ID“1af4:1050”好像是Virtio GPU这个驱动我记得在[virtio-win](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/)里是有的而且重装脚本也会自动下载这个驱动为什么会没有自动安装呢可能是设备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的更新像这些非官方支持的办法估计也很有可能出问题毕竟苹果并不对这些情况进行任何形式的保障也许以后苹果的哪次更新这个方法就用不了了呢……