通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
2018-10-15 18:45 云物互联 阅读(1304) 评论(0) 编辑 收藏 举报目录
Provisioned Space & Used Space
Provisioned Space & Used Space 是 Datastore 中的概念,通过 vSphere Client 即可查看。其中 Provisioned Space 被翻译成 “置备空间”,实在令人费解,下面先简单介绍一下 Provisioned Space 的基本概念。
官方文档是这么描述的:Total allocated space that the virtual machine can commit up to. Includes vmdk, swap, snapshot, and other virtual machine files such as NVRAM, configuration files, and logs. This metric includes uncommitted space.
可见,置备空间并非单纯的指代 “预期分配容量”,还包含了 vmdk, swap, snapshot, NVRAM, configuration files, and logs 等可能会消耗存储空间的 “空间”。这就是虚拟磁盘的置备空间会比 “预期分配容量” 稍大的原因,所以我更愿意将置备空间称之为 “实际已分配空间”。
当 Datastore 存在 Thin Provision 类型虚拟磁盘时,就会出现 Provisioned Space 与 Used Space 不一致的情况。而 Lazy Zeroed Thick Provision 和 Eager Zeroed Thick Provision 类型虚拟磁盘的 Provisioned Space 和 Used Space 通常是保持一致的,因为 Thick Provision 类型虚拟磁盘会马上将需求的所有磁盘空间都占用掉。
e.g.
- aju-tst-thin-p 虚拟机使用了 100GB Thin Provision 类型磁盘,其 Provisioned Space = 102.18GB,Used Space = 2.18 GB;
- aju-tst-thick-p 虚拟机使用了 100GB Lazy Zeroed Thick Provision 类型磁盘,其 Provisioned Space = Used Space = 104.18GB,Eager Zeroed Thick Provision 类型磁盘同理。
Provisioned Space 的计算方式
通过 vSphere WS API 我们可以轻易的得到 $dstoreSummary.Capacity
和 $dstoreSummary.freeSpace
的数据,但 API 文档并没有直接给出 $dstoreSummary.provisionedSpace
属性参数,好在我们需要通过 $dstoreSummary.uncommitted
来得到它。
Uncommitted Space
Uncommitted Space is either from Thin-Provisioned VM disks, Snapshots or Linked Clones. Uncommitted space is the difference of how big the disk size is vs. the currently consumed size. Here is a breakdown of a particular example.
简单来说 Uncommitted space 就是虚拟磁盘 Provisioned Space 与当前 Used Space(实际已使用空间)的差值。
在理解了 Uncommitted Space 的概念之后,那么我们就可以得到计算 Provisioned Space 的公式:
$longProvisionedBytes = ($dstoreSummary.Capacity - $dstoreSummary.freeSpace) + $dstoreSummary.uncommitted
NOTE:需要注意的是 uncommitted 是 dstoreSummary data object 的可选属性,当 Datastore 不存在精简置备的 VMDK 时候,uncommitted 属性是不存在的,这是一个需要注意的边界问题。
扩展:置备率的计算公式
除此之外,还可以得到 Datastore ProvisionedSpare%(置备率)的计算公式:
floatProvisionedSpareRatio = ($longProvisionedBytes / $dstoreSummary.Capacity) * 100
通常的,我们建议 floatProvisionedSpareRatio <= 1.5
。