この動作は、vSphere Client ユーザー インターフェイスの Datastore Browser を使用して VMDK 記述子ファイルを手動で移動する場合、ESXi のコマンド ライン インターフェイスで「mv」コマンドを使用する場合、および MoveDatastoreFile_Task などの vSphere API を使用して VMDKS を移動する場合に再現できます。
以下のシナリオ例では、2 台の仮想マシンの例を使用して、この動作を再現および修正するプロセスを説明します。仮想マシン 1 および 2 :
「仮想マシン 1」のパス:/vmfs/volumes/vsan:529e00851e70c3b9-215f############/10b10b5d-3071-b7cb-a2be-############
「仮想マシン 2」のパス:/vmfs/volumes/vsan:529e00851e70c3b9-215f############/6fb10b5d-5bd1-f2aa-219a-############
- 最初に、単に cat コマンドを実行して、VMDK 記述子ファイルを出力し「Virtual Machine 1.vmdk」のオブジェクト UUID を取得します -
[root@vSAN-1:~] grep RW "/vmfs/volumes/vsan:529e00851e70c3b9-215f############/10b10b5d-3071-b7cb-a2be-############/Virtual Machine 1.vmdk"
RW 20971520 VMFS "vsan://19b10b5d-48fd-733d-a2f0-############"
- 次に、「mv」コマンドを使用して「Virtual Machine 1.vmdk」を仮想マシン 2 のディレクトリに移動できます -
[root@vSAN-1:~] mv "/vmfs/volumes/vsanDatastore/10b10b5d-3071-b7cb-a2be-############/Virtual Machine 1.vmdk" "/vmfs/volumes/vsanDatastore/6fb10b5d-5bd1-f2aa-219a-############"
- vSphere Client ユーザー インターフェイスを使用して、「Virtual Machine 1.vmdk」を仮想マシン 2 にアタッチできます:


- esxcli vsan debug object list の出力を確認すると、実際には存在している VMDK 記述子が (Missing) として報告されていることがわかります:
[root@vSAN-1:~] esxcli vsan debug object list
Object UUID: 19b10b5d-48fd-733d-a2f0-############
Version: 7
Health: healthy
Owner: vSAN-1.gsslabs.org
Size: 10.00 GB
Used: 0.01 GB
Policy:
CSN: 2
stripeWidth: 1
cacheReservation: 0
proportionalCapacity: 0
spbmProfileName: vSAN Default Storage Policy
forceProvisioning: 0
spbmProfileId: aa6d5a82-1c88-45da-85d3-############
hostFailuresToTolerate: 1
spbmProfileGenerationNumber: 0
Type: vdisk
Path: /vmfs/volumes/vsan:529e00851e70c3b9-215f############/10b10b5d-3071-b7cb-a2be-############/Virtual Machine 1.vmdk (Missing)
Group UUID: 10b10b5d-3071-b7cb-a2be-############
Directory Name: N/A
これは、このオブジェクトのパス属性がまだ仮想マシン 1 の以前のディレクトリを参照しているためです。これは、「objtool getAttr」(オブジェクト ツールの属性取得)コマンドで確認できます -
* コマンドの構文:/usr/lib/vmware/osfs/bin/objtool getAttr -u <Object UUID>
[root@vSAN-1:~] /usr/lib/vmware/osfs/bin/objtool getAttr -u 19b10b5d-48fd-733d-a2f0-############
Object Attributes --
UUID:19b10b5d-48fd-733d-a2f0-############
Object type:vsan
Object size:10737418240
User friendly name:(null)
HA metadata:(null)
Allocation type:Thin
Policy:((\"stripeWidth\" i1) (\"cacheReservation\" i0) (\"proportionalCapacity\" i0) (\"hostFailuresToTolerate\" i1) (\"forceProvisioning\" i0) (\"spbmProfileId\" \"aa6d5a82-1c88-45da-85d3-############\") (\"spbmProfileGenerationNumber\" l+0) (\"spbmProfileName\" \"vSAN Default Storage Policy\"))
Object class: vdisk
Object capabilities: NONE
Object path: /vmfs/volumes/vsan:529e00851e70c3b9-215f############/10b10b5d-3071-b7cb-a2be-############/Virtual Machine 1.vmdk
Group uuid: 10b10b5d-3071-b7cb-a2be-############
Container uuid: (null)
- 「objtool setAttr」(オブジェクト ツールの属性設定)コマンドを使用して、パス属性を更新する必要があります。
* コマンドの構文:/usr/lib/vmware/osfs/bin/objtool setAttr -u <Object UUID> -d <Path to VMDK>
[root@vSAN-1:~] /usr/lib/vmware/osfs/bin/objtool setAttr -u 19b10b5d-48fd-733d-a2f0-############ -d "/vmfs/volumes/vsan:529e00851e70c3b9-215f67dee5e0391b/6fb10b5d-5bd1-f2aa-219a-############/Virtual Machine 1.vmdk"
Object set attribute succeeded
esxcli vsan debug object list を再実行すると、VMDK 記述子ファイルが (Missing) として報告されなくなったことがわかります --
[root@vSAN-1:~] esxcli vsan debug object list
Object UUID: 19b10b5d-48fd-733d-a2f0-############
Version: 7
Health: healthy
Owner: vSAN-1.gsslabs.org
Size: 10.00 GB
Used: 0.01 GB
Policy:
stripeWidth: 1
spbmProfileGenerationNumber: 0
cacheReservation: 0
spbmProfileName: vSAN Default Storage Policy
forceProvisioning: 0
proportionalCapacity: 0
spbmProfileId: aa6d5a82-1c88-45da-85d3-############
hostFailuresToTolerate: 1
CSN: 2
Type: vdisk
Path: /vmfs/volumes/vsan:529e00851e70c3b9-############/6fb10b5d-5bd1-f2aa-219a-############/Virtual Machine 1.vmdk (Exists)
Group UUID: 10b10b5d-3071-b7cb-a2be-############
Directory Name: N/A
注意:特定の vSAN バージョンで 「esxcli vsan debug object list」 を使用すると、100 オブジェクトしか表示されず、探しているオブジェクトが表示されないことがあります。
フラグ 「--all」 を追加する必要がありますが、これはホストの機能に影響を与える可能性があるため、コマンドを実行し、出力を txt ファイルに送信することをお勧めします。
ここでは、「esxcli vsan debug object list --all > /tmp/objects.txt 」とする。その後、特定のオブジェクトを検索するためにファイルを「less」することができます。
vSAN DOM オブジェクト UUID がわかっている場合は、次の構文を使用できます。
esxcli vsan debug object list -u <DOM Object UUID>