Java 如何检测vmware Esx(i)server/Vcenter中的虚拟机磁盘是GPT还是MBR

Java 如何检测vmware Esx(i)server/Vcenter中的虚拟机磁盘是GPT还是MBR,java,c++,vmware,esxi,mbr,Java,C++,Vmware,Esxi,Mbr,我需要找到一种方法,通过编程确定来宾虚拟机磁盘是GPT还是MBR分区。我无法通过vijava或Vddk api实现这一点。还有其他C++或java库可以帮助我实现这一点。或者手动解析MBR是唯一可用的解决方案 提前感谢, Thiyagarajan A.您需要使用安装在来宾计算机上的VMWare工具,并在来宾计算机中运行命令。本文演示了如何使用vijava执行此操作: 如果使用windows,我建议使用PowerCLI+Invoke-VmScriptcmdlet() 它将允许您运行powershe

我需要找到一种方法,通过编程确定来宾虚拟机磁盘是GPT还是MBR分区。我无法通过vijava或Vddk api实现这一点。还有其他C++或java库可以帮助我实现这一点。或者手动解析MBR是唯一可用的解决方案

提前感谢,


Thiyagarajan A.

您需要使用安装在来宾计算机上的VMWare工具,并在来宾计算机中运行命令。本文演示了如何使用vijava执行此操作:

如果使用windows,我建议使用PowerCLI+
Invoke-VmScript
cmdlet()

它将允许您运行powershell命令(用于windows框)以确定分区布局。如果检测到GPT分区,以下行将返回
$True

$disks = gwmi -query "Select * from Win32_DiskPartition" 
foreach($disk in $disks) { 
    if ($disk.Type.StartsWith("GPT")){ 
        return $true
    }
}
类似地,在linux客户机上,类似这样的操作将达到预期效果:

fdisk -l | grep -i gpt > /dev/null ; echo $?

如果GPT分区退出,上述命令将返回0,因为您应该得到一个警告“警告:在..上检测到GPT(GUID分区表)”,
grep-i GPT
将拾取该警告。

我还没有实际验证,但API似乎不太可能提供这些信息,因为VMware不需要知道磁盘上有什么类型的数据。VMware需要做的只是将块设备呈现给虚拟机,并开始执行BIOS或UEFI代码。它不需要知道磁盘上有什么(如果有的话)就可以做到这一点。我想你必须亲自检查磁盘。