CLIによるESXiのデータストアの拡張

#前置き
ESXiのデータストアを拡張をCLIから実施した際のメモになります。

作業はVMware Workstation 14 Player上にESXi6.5を立てるネステッド環境で実施しました。
また、今回の手順は[Growing a local datastore from the command line in vSphere ESXi (2002461)](https://kb.vmware.com/s/article/2002461?docid=2002461)を参考にさせて頂きました。

#やりたかったこと
ESXiのデータストア容量が少なくなってきたため、拡張をしようと考えました。
※VMware Workstation 14 Player上での拡張手順については省略しています。

当初は以下のとおり、GUI画面より拡張を行おうとしましたが、デバイスの選択画面でロードが終わらず、先に進まなくなってしまいました。


ストレージ-データストアタブで拡張したいデータストアを選択。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/f7c78dcb-550a-2303-c239-aade13832529.png)

容量の増加を選択するとロード画面で止まりました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/b00c42e4-9816-687d-4d42-37403e80e837.png)


#CLIでのデータストア拡張
そこで以下の手順でCLIよりデータストアの拡張を実施しました。

###１．SSHでESXiに接続
Teratarmを使用してESXiにログインする。
接続する際には「チャレンジレスポンス」を選択する必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/e5da3671-b8b7-df0a-ecb3-0630fc303751.png)

###２．データストアのデバイス名を確認
`vmkfstools -P -h [データストアパス]`
容量が52.5GB、デバイス名が「mpx.vmhba0:C0:T0:L0」であることが確認できました。
なお、デバイス名の最後の**3**はパーティション番号になります。

```
[root@localhost:] vmkfstools -P -h /vmfs/volumes/5ae69265-91f87491-c20b-000c2910f04f
VMFS-5.81 (Raw Major Version: 14) file system spanning 1 partitions.
File system label (if any): datastore1
Mode: public
Capacity 52.5 GB, 17.0 GB available, file block size 1 MB, max supported file size 62.9 TB
UUID: 5ae69265-91f87491-c20b-000c2910f04f
Partitions spanned (on "lvm"):
        mpx.vmhba0:C0:T0:L0:3
Is Native Snapshot Capable: YES
[root@localhost:]
```
###３．パーティション構成とセクタ数を確認
partedUtil コマンドで、デバイス上のパーティション構成を特定します。
`partedUtil get "[デバイス名]"`
結果は[パーティション番号][セクタ開始番号][セクタ終了番号][タイプ][属性]と表示されます。
最終行がパーティション3の情報になります。今回拡張対象となるパーティション3のセクタは**15,472,640～125,829,086**であることが確認できました。
先頭行はデバイス全体の情報で、全部で**419,430,400セクタ**であることが判ります。
つまり、125,829,087～419,430,400セクタが使用されていない領域になります。

```
[root@localhost:] partedUtil get "/dev/disks/mpx.vmhba0:C0:T0:L0"
26108 255 63 419430400
1 64 8191 0 128
5 8224 520191 0 0
6 520224 1032191 0 0
7 1032224 1257471 0 0
8 1257504 1843199 0 0
9 1843200 7086079 0 0
2 7086080 15472639 0 0
3 15472640 125829086 0 0
[root@localhost:]
```
###４．パーティションの拡張
パーティション3のセクタ番号を指定して拡張を行います。
`partedUtil resize "[デバイス名]" [パーティション番号] [セクタ開始番号] [拡張後のセクタ終了番号]`
今回は**419,430,000セクタ**まで拡張します。[^1]


```
[root@localhost:] partedUtil resize "/dev/disks/mpx.vmhba0:C0:T0:L0" 3 15472640 419430000
[root@localhost:] partedUtil get "/dev/disks/mpx.vmhba0:C0:T0:L0"
26108 255 63 419430400
1 64 8191 0 128
5 8224 520191 0 0
6 520224 1032191 0 0
7 1032224 1257471 0 0
8 1257504 1843199 0 0
9 1843200 7086079 0 0
2 7086080 15472639 0 0
3 15472640 419430000 0 0
[root@localhost:] 
```

無事パーティション3が419,430,000セクタまで拡張されました。

###５．バックアップgptヘッダーの再構成
パーティーション構成が変わったため、gptヘッダーの再構成が必要となります。
`partedUtil fixGpt "[デバイス名]"`
コマンドを入力後、yを返答します。

```
[root@localhost:] partedUtil fixGpt "/dev/disks/mpx.vmhba0:C0:T0:L0"

FixGpt tries to fix any problems detected in GPT table.
Please ensure that you don't run this on any RDM (Raw Device Mapping) disk.
Are you sure you want to continue (Y/N): y
gpt
26108 255 63 419430400
1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0
8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
9 1843200 7086079 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0
2 7086080 15472639 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
3 15472640 419430000 AA31E02A400F11DB9590000C2911D1B8 vmfs 0
[root@localhost:]
```
###６．VMFSボリュームの更新
VMFSボリュームのリフレッシュを行います。

```
vmkfstools -V
```

###７．VMFSパーティションを拡張
引数にデバイス名を二回指定する必要があります。
`vmkfstools --growfs "[デバイス名]:[パーティション番号]" "[デバイス名]:[パーティション番号]"`

```
[root@localhost:] vmkfstools --growfs "/dev/disks/mpx.vmhba0:C0:T0:L0:3" "/dev/disks/mpx.vmhba0:C0:T0:L0:3"
[root@localhost:]
````

###８．データストアが拡張されたことを確認
`vmkfstools -P -h [データストアパス]`
容量が192.5GBに拡張されたことが確認できました。

```
[root@localhost:] vmkfstools -P -h /vmfs/volumes/5ae69265-91f87491-c20
b-000c2910f04f
VMFS-5.81 (Raw Major Version: 14) file system spanning 1 partitions.
File system label (if any): datastore1
Mode: public
Capacity 192.5 GB, 157.0 GB available, file block size 1 MB, max supported file size 62.9 TB
UUID: 5ae69265-91f87491-c20b-000c2910f04f
Partitions spanned (on "lvm"):
        mpx.vmhba0:C0:T0:L0:3
Is Native Snapshot Capable: YES
[root@localhost:]
```
GUI画面でも拡張できていることを確認できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/c07b8bf4-1892-9b34-06a4-de6c98bc459f.png)

# おわりに
ESXi自体の変更は仮想ホストと違い、失敗したらスナップショットより戻すということができないので慎重に対応する必要があります。
今回の手順も失敗した場合はESXi自体が起動しなくなる可能性もありますので、十分な検証とリカバリープランを策定した上で実施するようにしてください。

以上

[^1]: 全体の最終セクタ番号まで拡張しようとすると`Error: Can't have a partition outside the disk!`というエラーが表示されます。最大で「最終セクタ番号-1セクタ」までで指定するようにしてください。