获取虚拟磁盘信息

对虚拟机进行备份时,需要获取指定虚拟机的磁盘相关信息,包含磁盘容量、磁盘路径、磁盘 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 方法省略...
}

代码仅供学习参考。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值