迷子のスナップショットを強制的に削除する方法

vCenterで「ディスクの統合が必要です」警告が出続けてるのに、

  • ディスク統合しようとするとエラーが出る
  • 該当スナップショットが見つからない(迷子のスナップショットがいる)

場合の対処方法。

参考KBはこれ↓…なんだけど、2110152が消えておるorz
まあ、10051が生きてるからいいんだけど、、、
ってかこれ、10051が2110152がの代替っぽいので、リンク切れにせずリダイレクトにして欲しいよな…

KB2017072
https://kb.vmware.com/s/article/2017072?lang=ja
KB2017072に記載のKB2110152(リンク切れ)
https://kb.vmware.com/s/article/2110152
KB10051(タイトルから類推すると、多分2110152と同内容と思われ)
https://kb.vmware.com/s/article/10051?lang=ja

そもそもこの現象は、vmdkをバックアップするVeeamとかTSM(ISP) for VE とかのサードパーティのバックアップソリューションを使ってる場合に、
バックアップサーバ(というかコマンド発行サーバ)が本来離すべき該当vmdkをロックしちゃって、vCenterから操作できなくなる、というのが原因だったりする。

だもんで、

  • 該当vmdkをロックしてるサーバを特定
  • 仮想ディスクを統合(できなかったら削除)

をしないと延々と警告が出続ける上に、
「既にスナップショットがあるからバックアップとれねーぜ!」的エラーを吐くこともあったりする…のでその対処法。

【前提】

  • ESXiのSSHが有効化されていること
  • /vmfs/volumes/datastore/対象VM/に移動し、ロックされているvmdkファイルがあること

【ロックしてる仮想マシンの特定】

  1. 以下のコマンドで、vmdkファイルのロックモードとロックしている仮想マシンがあるホストを調べる
vmfsfilelockinfo -p /vmfs/volumes/datasoter1/対象VM/対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmdk) -v vCenterのIP -u administrator@vsphere.local

#結果
vmfsfilelockinfo Version 2.0
Looking for lock owners on "対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmd)k"
"対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmdk)" is locked in Read-Only mode by host having mac address ['ロックしてる仮想マシンが稼働しているホストのMACアドレス']
Trying to use information from VMFS Heartbeat

Host owning the lock on file is データムーバーが稼働しているホストのIP, lockMode : Read-Only(ロックモードはKB2110152参照)
Total time taken : 4.3203209256753325 seconds.

# -vオプションはvCenterへの接続オプションのため、なくてもESXiホストのMACアドレスまでは調べられるが、vCenterに接続すると該当するホストのIPまで表示されるので、接続したほうがよい

  1. 以下のコマンドで、ロックしている仮想マシンを調べる
lsof | egrep 'Cartel|対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmdk)'

#結果
Cartel    |      World name     |        Type         |   fd   |  Description
2647761     vmx                   FILE                      123   該当するvmdkのフルパス

#Cartel=該当する仮想マシンのID。この場合Cartel ID:2647761の仮想マシンがvmdkをロックしている

esxcli vm process list

#結果(一部のみ)
仮想マシン名1
   World ID: 2647762
   Process ID: 0
   VMX Cartel ID: 2647761 #Cartel IDが一致
   UUID: 42 3f b0 5e ed a7 09 81-2c a1 e8 f9 15 0d 1f 5a
   Display Name: 仮想マシン1
   Config File: /vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/仮想マシン1/仮想マシン1.vmx

仮想マシン2
   World ID: 2648795
   Process ID: 0
   VMX Cartel ID: 2648794
   UUID: 42 3f 89 df 69 24 d7 be-7b df 19 96 76 0b 1b 73
   Display Name: 仮想マシン2
   Config File: /vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/仮想マシン2/仮想マシン2.vmx

#lsofで表示されたCartel IDとesxcli vm process listのvmx Cartel IDが一致したので、ロックしているのは仮想マシン1だとわかる

【ロックされたvmdkファイルの削除】

  1. VMX Cartel IDで確定した仮想マシンをシャットダウンする
  2. vmdkファイルのロックが外れていることを確認する
vmfsfilelockinfo -p /vmfs/volumes/datasoter1/対象VM/対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmdk) -v vCenterのIP -u administrator@vsphere.local 

#結果
vmfsfilelockinfo Version 2.0
Looking for lock owners on "対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmd)k"
"対象vmdk名-sesparse.vmdk(対象vmdk名-flat.vmdk)" is not locked by any ESX host and is free
Total time taken : 4.3203209256753325 seconds.
  1. ESXiからログアウトする
  2. vSphere Clientでディスクの統合を試す
  3. ディスクの統合がうまく行かなかったら、該当するvmdk(及び関連する-flat.vmdkや-sesparse.vmdk)を削除する
  4. vSphere Clientのデータストア→ファイルから、シャットダウンした仮想マシンのvmxファイルをローカルにダウンロードし、削除のvmdkがscsiデバイスとして記述されていないかをファイル内検索で確認する。記述されていた場合は「〇〇〇〇.vmdkが見つからないため、仮想マシン〇〇が起動できません」とエラーが表示され、仮想マシンが起動しないため、該当箇所を削除し、データストアに再アップロードして置き換える)
    <.vmxファイルサンプル>
.encoding = "UTF-8"
config.version = "8"
virtualHW.version = "15"

(中略)

#元々持っているvmdk
scsi0.virtualDev = "pvscsi"
scsi0.present = "TRUE"
sata0.present = "TRUE"
sata0:0.deviceType = "atapi-cdrom"
sata0:0.fileName = "emptyBackingString"
sata0:0.present = "TRUE"
scsi0:0.deviceType = "scsi-hardDisk"
scsi0:0.fileName = "仮想マシン1-000002.vmdk"
sched.scsi0:0.shares = "normal"
sched.scsi0:0.throughputCap = "off"

(中略)

#ロックされていたvmdkの記述(ここを削除)
scsi0:0.present = "TRUE"
scsi0:1.deviceType = "scsi-hardDisk"
scsi0:1.fileName = "/vmfs/volumes/xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx/ロックされたホスト名/ロックされたホスト名_2-000002.vmdk"
scsi0:1.mode = "independent-nonpersistent"
scsi0:1.present = "TRUE"
scsi0:1.redo = ""

  1. シャットダウンしていた仮想マシンを再起動する

これで警告もスッキリ。
ちな、ISP for VEで割とこの現象が頻発…(げふんげふん