govcの小ネタ: VMのディスクを確認する

(この記事は、[個人ブログ](https://volatile-notepad.netlify.app/post/20220321_govc_disk/)の再投稿です)

先日に引き続き [govc](https://github.com/vmware/govmomi/tree/master/govc)の小ネタです。今回はディスク確認のコマンドについてです。

## TL; DR

VMのディスクを確認するには

```bash
$ govc device.info -vm myvm disk-*
Name:           disk-1000-0
  Type:         VirtualDisk
  Label:        Hard disk 1
  Summary:      512,000 KB
  Key:          2000
  Controller:   pvscsi-1000
  Unit number:  0
  File:         [datastore1] myvm/myvm.vmdk
```

ディスクのパスから確認するには

```bash
$ govc datastore.disk.info -ds datastore1 myvm/myvm.vmdk
Name:      myvm/myvm.vmdk
  Type:    eagerZeroedThick
  Parent:
```

# はじめに

ディスク取得コマンドはいろいろあってややこしいので、整理のためにまとめておきます。

# VMのデバイス取得 `govc device.info`

NICやディスク等、VMに接続しているデバイスがすべて取得できます。

```bash
$ govc device.info -vm myvm
Name:               ide-200
  Type:             VirtualIDEController
  Label:            IDE 0
  Summary:          IDE 0
  Key:              200
  Devices:
Name:               ide-201
  Type:             VirtualIDEController
  Label:            IDE 1
  Summary:          IDE 1
  Key:              201
  Devices:
Name:               ps2-300
  Type:             VirtualPS2Controller
  Label:            PS2 controller 0
  Summary:          PS2 controller 0
  Key:              300
  Devices:          keyboard-600, pointing-700
…
```

ディスクの名前は `disk-` ではじまるので、名前で絞り込めば冒頭のようにディスクだけ取得できます。

```bash
$ govc device.info -vm myvm disk-*
Name:           disk-1000-0
  Type:         VirtualDisk
  Label:        Hard disk 1
  Summary:      512,000 KB
  Key:          2000
  Controller:   pvscsi-1000
  Unit number:  0
  File:         [datastore1] myvm/myvm.vmdk
```

# データストア内のディスク確認 `datastore.disk.info`

こちらはデータストアに紐づいた情報なので、プロビジョニングポリシーが確認できます。

```bash
$ govc datastore.disk.info -ds datastore1 myvm/myvm.vmdk
Name:      myvm/myvm.vmdk
  Type:    eagerZeroedThick
  Parent:
# UUIDも確認できる
$ govc datastore.disk.info -uuid -ds datastore1 myvm/myvm.vmdk
Name:      myvm/myvm.vmdk
  UUID:    60 00 C2 93 88 2a d7 97-99 19 52 74 93 fa 1f 3c
  Type:    eagerZeroedThick
  Parent:
```

# First Class Diskの取得: `disk.ls`

一見すると `govc disk.ls` が一番手っ取り早そうですが、**VMのディスクは取れません**。

```bash
# 何も出ない？
$ govc disk.ls
```

このコマンドは、VMに紐づかないFirst Class Disk (FCD)を取得するものでした。

[vRealize Automation Cloud の First Class Disk ストレージで実行できること](https://docs.vmware.com/jp/vRealize-Automation/services/Using-and-Managing-Cloud-Assembly/GUID-64FB525D-CDE5-48BC-8B87-8DAAA6369776.html)

どうやらk8sのPVC等、「VM以外の単位でディスクを管理したい」際に使うようです。

https://blog.vpantry.net/2019/08/vsan-67u3-k8s/

せっかくなのでFCDを作って確認してみます。

```bash
$ govc disk.create -size 10M mydisk
[21-03-22 09:47:58] Creating mydisk...OK
0e62faf6-4420-4aba-b9bb-67f34a03d1c4
```

今度はちゃんと確認できました。

```bash
$ govc disk.ls
0e62faf6-4420-4aba-b9bb-67f34a03d1c4  mydisk
```

作成したディスクはVMに紐づかないので `/fcd` 配下に格納されます。

```bash
$ govc datastore.ls /fcd
d870784bfa58431084602b9e1644a75c-flat.vmdk
d870784bfa58431084602b9e1644a75c.vmdk

$ govc datastore.disk.info fcd/d870784bfa58431084602b9e1644a75c.vmdk
Name:      fcd/d870784bfa58431084602b9e1644a75c.vmdk
  Type:    thin
  Parent:
```

vSphere Client上でもディスクが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239887/d640f951-05ec-983b-db2d-4b4c24eace8d.png)

# おわりに

ディスク取得コマンドのおさらいをすることで、vSphereの新しい機能も知ることができました。govcネタはまだいくつかありそうなので、随時まとめていきたいと思います。