---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
								
									
								 
							
							
								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的更新,  像这些非官方支持的办法估计也很有可能出问题,  毕竟苹果并不对这些情况进行任何形式的保障,  也许以后苹果的哪次更新这个方法就用不了了呢……