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ファイルがあること
【ロックしてる仮想マシンの特定】
- 以下のコマンドで、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まで表示されるので、接続したほうがよい
- 以下のコマンドで、ロックしている仮想マシンを調べる
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ファイルの削除】
- VMX Cartel IDで確定した仮想マシンをシャットダウンする
- 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.
- ESXiからログアウトする
- vSphere Clientでディスクの統合を試す
- ディスクの統合がうまく行かなかったら、該当するvmdk(及び関連する-flat.vmdkや-sesparse.vmdk)を削除する
- 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 = ""
- シャットダウンしていた仮想マシンを再起動する
これで警告もスッキリ。
ちな、ISP for VEで割とこの現象が頻発…(げふんげふん