获取虚拟磁盘信息
对虚拟机进行备份时,需要获取指定虚拟机的磁盘相关信息,包含磁盘容量、磁盘路径、磁盘 key 等信息,这些信息可以在快照创建完成之后通过快照来获取,下面给出根据虚拟机获取虚拟磁盘信息代码:/*** @Title: getDiskInfo* @Description: 获取磁盘信息* @param vmmor* @param vmName* @return* @throws...
·
对虚拟机进行备份时,需要获取指定虚拟机的磁盘相关信息,包含磁盘容量、磁盘路径、磁盘 key 等信息,这些信息可以在快照创建完成之后通过快照来获取,下面给出根据虚拟机获取虚拟磁盘信息代码:
/**
* @Title: getDiskInfo
* @Description: 获取磁盘信息
* @param vmmor
* @param vmName
* @return
* @throws RuntimeFaultFaultMsg
* @throws InvalidPropertyFaultMsg
* @version 1.0
* @throws Exception
*/
@Override
public DiskInfo getDiskInfo(ManagedObjectReference vmMor, String vmName, String snapshotName)
throws RuntimeFaultFaultMsg, InvalidPropertyFaultMsg, Exception {
// 虚拟磁盘属性列表
String[] propsArr = new String[] {"snapshot"};
// 获取属性对应的实体,并设置到DiskInfo
DiskInfo info = new DiskInfo();
info.setName(vmName);
VirtualMachineSnapshotInfo snap = (VirtualMachineSnapshotInfo) retrieveEntityProps(vmMor, propsArr).get("snapshot");
info.setSnapshot(snap);
if (StringUtils.isNotBlank(snapshotName)) {
// 获取快照托管对象引用
ManagedObjectReference snMor = getSnapshotReference(vmMor, vmName, snapshotName);
// 遍历虚拟设备 获取虚拟磁盘
ArrayOfVirtualDevice devs =
(ArrayOfVirtualDevice) retrieveEntityProps(snMor, new String[] {"config.hardware.device"})
.get("config.hardware.device");
for (VirtualDevice vd : devs.getVirtualDevice()) {
if (vd instanceof VirtualDisk) {
VirtualDisk disk = (VirtualDisk) vd;
VirtualDiskFlatVer2BackingInfo bi = (VirtualDiskFlatVer2BackingInfo) disk.getBacking();
info.setCapacity(disk.getCapacityInKB()); // 磁盘容量
info.setPath(bi.getFileName()); // 磁盘路径"[datastore1] vnname/vnname.vmdk"
info.setKey(vd.getKey()); // 磁盘 key
break;
}
}
} else { // 获取新建虚拟机的磁盘路径
ArrayOfVirtualDevice devs =
(ArrayOfVirtualDevice) retrieveEntityProps(vmMor, new String[] {"config.hardware.device"})
.get("config.hardware.device");
for (VirtualDevice vd : devs.getVirtualDevice()) {
if (vd instanceof VirtualDisk) {
VirtualDisk disk = (VirtualDisk) vd;
VirtualDiskFlatVer2BackingInfo bi = (VirtualDiskFlatVer2BackingInfo) disk.getBacking();
// String path = rebuildDiskPath(bi.getFileName());
info.setPath(bi.getFileName()); // 磁盘路径"[datastore1] vnname/vnname.vmdk"
break;
}
}
}
return info;
}
DiskInfo实体对象如下:
import com.vmware.vim25.VirtualMachineSnapshotInfo;
/**
* @ClassName: DiskInfo
* @Description: 磁盘信息
*/
public class DiskInfo {
private String name;
private long capacity;
private int key;
private String path;
private VirtualMachineSnapshotInfo snapshot;
// getter、setter 方法省略...
}
代码仅供学习参考。
更多推荐
已为社区贡献19条内容
所有评论(0)