Introduction

VMWare ESXi 7 の話。
掲題通り、作成した仮想ディスク (*.vmdk) を別の仮想マシンにアタッチすることができない。
既存の仮想ディスクを GUI から追加すると下記のようにある。

Error

How to resolve?

最終バージョンの ESXi 8 でも治っていないもよう。

という感じで報告多数。

回避策は vim-cmd でアタッチすることである。

まず、SSH で ESXi のホストマシンにログイン。
次に、仮想マシンの一覧を取得し、仮想ディスクを追加する対象のマシンの Vmid を調べる。

1
2
3
4
5
6
7
8
9
10
11
$ vim-cmd vmsvc/getallvms
Vmid Name File Guest OS Version Annotation
1 Rocky 9.1 [datastore] Rocky 9.1/Rocky 9.1.vmx coreos64Guest vmx-19
10 Gitlab AlmaLinux OS 9.3 [datastore] Gitlab AlmaLinux OS 9.3/Gitlab AlmaLinux OS 9.3.vmx otherLinux64Guest vmx-19
11 Snipe-IT Ubuntu 24.04 [datastore] Snipe-IT Ubuntu 24.04/Snipe-IT Ubuntu 24.04.vmx ubuntu64Guest vmx-19
12 Windows 11 [datastore] Windows 11/Windows 11.vmx windows9_64Guest vmx-19
13 PXE Alpine 3.20.2 [datastore] PXE Alpine 3.20.2/PXE Alpine 3.20.2.vmx other5xLinux64Guest vmx-19
14 PXE Test [datastore] PXE Test/PXE Test.vmx other5xLinuxGuest vmx-19
2 Ubuntu 22.04 [datastore] Ubuntu 22.04/Ubuntu 22.04.vmx ubuntu64Guest vmx-19
3 Ubuntu 20.04 [datastore] Ubuntu 20.04/Ubuntu 20.04.vmx ubuntu64Guest vmx-19
4 CentOS 8.1 [datastore] CentOS 8.1/CentOS 8.1.vmx centos8_64Guest vmx-19

そして、追加する仮想ディスクのフルパス、仮想ディスクを接続する先のコントローラを確認して下記の構文に従ってコマンドを実行。

1
$ vim-cmd vmsvc/device.diskaddexisting <vmid> <disk_file> <controller_number> <unit_number> [ctlr_type]
引数 概要
vmid 仮想マシンの ID
disk_file *vmdk ファイルへのフルパス
controller_number コントローラ番号。scsiX:Y の場合、 X がコントローラ番号
unit_number ユニット番号。scsiX:Y の場合、 Y がユニット番号
ctlr_type 省略可能。デフォルトは SCSI
NOTE

フルパスを使う旨は Hot adding a virtual disk to a virtual machine from command line interface に記載されているので素直に従う。

下記は一例

1
$ vim-cmd vmsvc/device.diskaddexisting 2 /vmfs/volumes/63ad6330-f4510bfc-beb2-64006a60542f/share/share.vmdk 0 2

注意するのは、既に使用しているユニット番号を指定すると

1
2
3
4
5
6
Reconfigure failed: (vim.fault.InvalidDeviceSpec) {
faultCause = (vmodl.MethodFault) null,
faultMessage = <unset>,
property = "virtualDeviceSpec.operation",
deviceIndex = 0
msg = "Invalid configuration for device '0'."

のようなエラーが出るので注意。