Recently while performing some skunkworks testing in my personal lab, I came across a slew of documented and undocumented virtual machine .vmx configuration parameters. Using one of my favorite UNIX/Linux utility strings, I was able to uncover some interesting things in the /usr/lib/vmware/bin/vmware-vmx binary which is used to load a virtual machines configuration file.
Here are some of the interesting observations I have made:
vSphere is hypervisor aware?
%s: %s detected by CPUID
%s: VMware detected
Microsoft Hyper-V
%s: Xen detected by hypercall
Xen detected but hypervisor unrecognized (Xen variant?)
I noticed the following strings around detecting certain guest hypervisors, is this a hint that VMware is going to support other virtual "hypervisors", specifically Microsoft and Xen?
vSphere to support Mac OSX?
Linux Host
Windows Host
Mac OS Host
There were some text that listed the various types of host, including Mac OSX.
Make sure that you have installed all available Mac OS X software updates.
@&!*@*@(msg.cdrom.darwindisconnect)Your Mac OS guest is using this CD-ROM device. The safest way to disconnect this virtual CD-ROM is by pressing %s, then ej
ecting the media from inside the guest%s. To continue anyway, press %s.%s
@&!*@*@(msg.Backdoor.OsNotMacOSXServer)The guest operating system is not Mac OS X Server.
@&!*@*@(msg.cpuid.darwinWithBTHV)Mac OS X is not supported with software virtualization. Change the execution mode to automatic.
@&!*@*@(msg.cpuid.darwinWithBT)Mac OS X is not supported with software virtualization. To run Mac OS X you need a host on which %s supports hardware virtuali
zation.
isolation.bios.IsGOS.Darwin
There were some text that listed various messages regarding Mac OSX
sbios
vbios
bios440
efi32
efi64
nvram
lsibios
nbios
nxbios
nx3bios
e1000bios
vmibios
vmmmods
sas1068bios
pvscsibios
As you can see, there is mention of EFI support which is required to boot Mac OSX. Does this mean future version of vSphere will support virtualizing Mac OSX?
New guestOS types?
darwin10
darwin10-64
darwin-64
mandrake-64
opensuse
opensuse-64
winServer2008Cluster-32
winServer2008Cluster-64
winServer2008Datacenter-32
winServer2008Datacenter-64
winServer2008DatacenterCore-32
winServer2008DatacenterCore-64
winServer2008Enterprise-32
winServer2008Enterprise-64
winServer2008EnterpriseCore-32
winServer2008EnterpriseCore-64
winServer2008SmallBusiness-32
winServer2008SmallBusiness-64
winServer2008SmallBusinessPremium-32
winServer2008SmallBusinessPremium-64
winServer2008Standard-32
winServer2008Standard-64
winServer2008StandardCore-32
winServer2008StandardCore-64
winServer2008Web-32
winServer2008Web-64
XenVMMXenVMM
There was a section that I came across which listed all supported guestOS types, here you can see there have been a few more that were added between vSphere 4.0 and 4.1. One interesting thing that I am not sure if a lot of people have noticed, is the VirtualMachineGuestOsIdentifier in the vSphere API. This basically provides the guestos identifier that is supported in each release of VI/vSphere. Interesting enough, a darwin guestos support has been documented as of vSphere 4.0:
Though we all know we can not run Mac OSX on ESX(i) ... at least not just yet from what the above is hinting at.
These were just a few of the interesting things I found while parsing through the strings output when looking at the ESX 4.1's vmware-vmx binary.
Here is a collection of over 1200+ documented and undocumented .vmx configuration parameters.
http://https://s3.amazonaws.com/virtuallyghetto-download/hidden_vmx_params.html
Some of these hidden .vmx entries have been shared by the VMware and the community, here are just a few:
- http://www.virtuallyghetto.com/2010/10/how-to-control-maximum-number-of-vmware.html
- snapshot.maxSnapshots = Control the maximum number of VMware snapshots
- http://www.vcritical.com/2009/05/vmware-esx-4-can-even-virtualize-itself/
- monitor_control.restrict_backdoor = Run virtual ESX(i) hosts on top of ESX or ESXi
- http://vinf.net/2009/06/07/vsphere-cannot-enable-ft-for-a-nested-vm/
- replay.allowBTOnly = Allow FT to be enabled on vVM running on vESX(i)
- replay.allowBT = Allow FT to be enabled on vVM running on vESX(i)
- http://kb.vmware.com/kb/1010184
- cpuid.coresPerSocket = Specify the number of cores per physical socket
- http://www.sanbarrow.com/vmx/vmx-advanced.html
I did a bunch of work to run Mac OS X on Workstation, Server and ESX(i). Currently running Snow Leopard on ESXi 4.1 using some undocumented tricks and a hacked boot loader. The settings do enable various emulation features for the virtual hardware; e.g SMC controller and adding ICH7M root to PCI.
OK as for the other hypervisor's being detected I think it is to stop nesting. The IDs you have found are returned by the vendor specific CPUID instructions which can identify the running hypervisor. See this KB article http://goo.gl/RRl9E for VMware version and http://goo.gl/H4lGT for Xen detection code.
These strings have been in Workstation for some time as have most of the parameters you have noted as the code is shared.
The vmware-vmx file is also the core of talking to the hypervisor and also contains other things such as the virtual BIOS and option BIOSes for SCSI and so on.
Note that VMWare already supports virtualising OS X Server, but Apple's licensing means its restricted to when VMWare is itself running on Apple hardware. You can, perfectly legally, get a Mac Pro, install VMWare, and install any number of OS X Server images on top of it as long as you buy a licence for each one. This existing support is probably what your strings investigation is picking up on, so it probably doesn't mean much one way or the other about future support.
Anyway this can be done for ESXi? The file structure is different than in ESX. I used a hexdump on the VMX binary in the bin folder but the information from the binary data is vague at best. Any ideas?