文章目录
- 方法
- 失败情况分析:
- 参考文档
方法
虚拟机关机,整个文件夹压缩后拷贝到新机器中,开机启用即可
成功的情况:
- Mac (intel i5) -> Mac (intel i7)
- Mac (intel, MacOS - VMware Fusion) -> DELL (intel, Windows - VMware Workstation)
失败的情况:
- DELL (intel) -> Mac (M3)
失败情况分析:
原先的认知: 虚拟机技术会从硬件开始虚拟化,其上层OS kernel(内核)、libraries(系统函数库)、dependencies、softwares都会被封装在虚拟机中。
所以虚拟机不会依赖于宿主机是Windows还是Unix/Linux,因此 Mac (intel) -> DELL是成功的。
原先认知之外的地方: 既然硬件也会被虚拟化,并且VMware的软件已经支持M3芯(ARM架构)能在上面运行了,为什么不能虚拟出一套ARM架构的虚拟CPU呢?即,x86架构 -> ARM架构 为什么会失败。
排查和结论:
首先,“从硬件开始虚拟化”这一点没问题。官方文档3:支持虚拟机的基础架构至少包含两个软件层:虚拟化层和管理层。在 vSphere 中,ESXi提供虚拟化功能,用于将主机硬件作为一组标准化资源进行聚合并将其提供给虚拟机。在 vCenter Server管理的 ESXi 主机上运行虚拟机。
但是,VMware虚拟机技术中的硬件虚拟化,目的并不在于支持不同的CPU处理器架构,而在于隔离:每个虚拟机都在其自己的专用操作系统上运行,并分配有单独的资源,例如 CPU、内存和存储。这种隔离可确保一个虚拟机中的应用程序不会干扰其他虚拟机中的应用程序,从而增强安全性和稳定性。
基于这个目的,VMware选择(这是一个设计选择)尽可能调用基础物理资源、比如用宿主机的机器码,会是更好的做法,因为性能会好很多。
资料佐证:
-
官方文档在“虚拟机中的硬件设备”一节提到1 :虚拟机的每个虚拟硬件设备与物理机上的硬件执行相同的功能。每个虚拟机都有 CPU、内存和磁盘资源。CPU 虚拟化着重于性能,只要有可能就会直接在处理器上运行。只要有可能就会使用基础物理资源。 虚拟化层仅在需要时才运行指令,使得虚拟机就像直接在物理机上运行一样。
-
AWS文档提到2:虚拟机是物理计算机的数字副本,将物理硬件划分为多个环境。
-
Atlassian文档 4:
- Virtualbox
Virtualbox 是甲骨文旗下的免费开源 x86 架构仿真系统。Virtualbox 是最受欢迎、最成熟的虚拟机平台之一,其辅助工具生态系统可帮助开发和分发虚拟机镜像。
- VMware
VMware 是一家上市公司,其业务建立在最早的 x86 硬件虚拟化技术之上。VMware 附带了一个虚拟机管理程序,该管理程序是一种用于部署和管理多个虚拟机的实用程序。VMware 具有用于管理虚拟机的强大用户界面。VMware 是提供支持的绝佳企业虚拟机选项。 - QEMU
QEMU 是最强大的硬件仿真虚拟机选项。它支持任何通用硬件架构。QEMU 是一个仅限命令行的实用程序,不提供用于配置或执行的图形用户界面。这种权衡使得 QEMU 成为最快的虚拟机选项之一。
- Virtualbox
-
Apple社区的讨论5 :
- it’s true that most virtualization software support only ARM-compiled images but UTM does compile and emulate X64 virtual machines # UTM就是基于前面提到的QEMU
- The key word being “emulate”. The way that a regular virtual machine gets its speed is by running almost everything natively on the host CPU. That requires native machine code …
实验佐证:
- 通过VMware,M3芯的Mac上能跑ARM架构的Ubuntu发行版,但不能跑amd架构的Ubuntu发行版。(不过x86_64宿主机上跑x86还是可以的)
- 通过UTM(QEMU),M3芯的Mac上能跑amd架构的Ubuntu发行版。
参考文档
1 https://docs.vmware.com/cn/VMware-vSphere/8.0/vsphere-vm-administration/GUID-A70B7BF0-923E-443A-A1DD-11D99B6330EE.html
2 https://aws.amazon.com/compare/the-difference-between-containers-and-virtual-machines/
3 https://docs.vmware.com/cn/VMware-vSphere/8.0/vsphere-vm-administration/GUID-00D086B8-6D10-4644-8845-156095748D23.html
4 https://www.atlassian.com//microservices/cloud-computing/containers-vs-vms
5 https://discussions.apple.com/thread/255243487