1. 程式人生 > >通過 vSphere WS API 獲取 vCenter Datastore Provisioned Space 置備空間

通過 vSphere WS API 獲取 vCenter Datastore Provisioned Space 置備空間

目錄

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

擴充套件:置備率的計算公式

除此之外,還可以得到 Datastore ProvisionedSpare%(置備率)的計算公式:

floatProvisionedSpareRatio = ($longProvisionedBytes / $dstoreSummary.Capacity) * 100

通常的,我們建議 floatProvisionedSpareRatio <= 1.5