vSAN 上の仮想ディスクファイルロックの調査
search cancel

vSAN 上の仮想ディスクファイルロックの調査

book

Article ID: 437131

calendar_today

Updated On:

Products

VMware vSAN

Issue/Introduction

  • 仮想マシンのパワーオンが失敗します。
  • スナップショットの削除または統合に失敗します。
  • 仮想マシンのクローン作成または vMotion が失敗します。

VMFSデータストアでは、ファイルロックは多くの場合、-flat または -delta の仮想ディスクファイル上で検証されます。vSANはオブジェクトベースのシステムであるため、これらのファイルは存在しません。この記事では、これらの仮想ディスクオブジェクトのロックを確認する方法について説明します。
ファイルロックの問題は、さまざまな問題を引き起こす可能性があります。たとえば、仮想マシンのパワーオンやスナップショットの統合に失敗する場合があります。 

Cause

vSANには、仮想ディスク専用のオブジェクトタイプであるvdiskがあります。これらは、ネームスペースディレクトリ内の仮想マシン構成ファイルとは別に保存されます。

Resolution

バックアッププロキシサーバーが使用されているか確認してください。使用されている場合は、影響を受けているディスクがプロキシサーバーに接続されているかどうかを確認してください。ディスクがプロキシサーバーに接続されている場合は、「ディスクから削除」のチェックが選択されていないことを確認して、プロキシサーバーからディスクを取り外してください。

:プロキシサーバーが複数使用されている場合があります。すべてのプロキシサーバーを確認してください。
vSAN
は.lckファイルを使用します。.lckファイルの名前は、vSANオブジェクトのUUIDになります。

ディスクリプタを確認するには、仮想マシンネームスペース内のディレクトリに移動します。
         cd /vmfs/volumes/vsanDatastore/<VM_Namespace>

関連するUUIDを取得するには、以下のコマンドを実行します。 
                  grep RW VMDiskName.vmdk

                   出力例:
                   # Extent description
          RW 209715200 VMFS "vsan://########-####-####-####-########31f0"

                   :デバイスまたはリソースがビジー状態であるなどのエラーが発生した場合は、仮想マシンが登録されているホストにSSHで接続し、そのホストから作業してください。

UUID ########-####-####-####-########31f0 は、そのディスクリプタの vdisk を表す vSAN オブジェクトです。
次のコマンドを実行すると、vSAN ネームスペースディレクトリ内のすべての .<uuid>.lck ファイルが表示されます。

                   # ls -lah .*.lck

          出力例:
  
    -rw------- 1 root root 0 Jul 13 2017 .########-####-####-####-########31f0.lck
 
非表示ではないロックファイルが存在する場合もあります。これは、以下のコマンドで確認できます。
            # ls -lah *.lck
 
vSAN オブジェクトの詳細を表示するには、以下のコマンドを実行します。
     vmfsfilelockinfo -p .########-####-####-####-########31f0.lck 

                   出力例:
          vmfsfilelockinfo Version 2.0
          Looking for lock owners on ".########-####-####-####-########31f0.lck"
          "<VMname>.vswp.lck" is locked in Exclusive mode by host having mac address ['xx:xx:xx:xx:xx:xx']
          Trying to make use of Fault Domain Manager
          ----------------------------------------------------------------------
          Found 6 ESX hosts using Fault Domain Manager.
          ----------------------------------------------------------------------
         Searching on Host esxi1
         Searching on Host esxi3
         Searching on Host esxi4
         Searching on Host esxi2
         Searching on Host esxi6
         Searching on Host esxi5
           MAC Address : ##:##:##:##:##:##

         Host owning the lock on file is esxi5, lockMode : Exclusive
         Total time taken : 0.11339905299246311 seconds.

                  ロックが存在しない場合の出力例 :
             vmfsfilelockinfo Version 2.0
          Looking for lock owners on ".########-####-####-####-########31f0.lck"
          ".########-####-####-####-########31f0.lck" is not locked by any ESX host and is Free
          Total time taken : 0.037906300276517868 seconds.

または、このファイルに対してコマンド vmkfstools -D を実行してください。これにより、この vSAN オブジェクトのロックの詳細も表示されます。

          # vmkfstools -D .########-####-####-####-########31f0.lck

               出力例: 
        Lock [type 10c00001 offset 152799232 v 830, hb offset 3969024
        gen 215, mode 1, owner ########-######dc-07eb-########2052 mtime 1107249
        num 0 gblnum 0 gblgen 0 gblbrk 0]
        Addr <4, 354, 1>, gen 3, links 1, type reg, flags 0, uid 0, gid 0, mode 600
        len 0, nb 0 tbz 0, cow 0, newSinceEpoch 0, zla 4305, bs 8192

太字の部分は、管理用VMkernelポートのMACアドレスです。これはvSANクラスタ内のホストに対応している想定です。
 
: 電源オン状態の仮想マシンのライフサイクルにおいて、仮想マシンを構成するファイルはさまざまなロック状態に遷移します。ロック状態モードは、ファイルに適用されているロックの種類を示します。ロックモードの一覧は次のとおりです。
mode 0 = ロックなし
mode 1 = 排他ロック (電源オン状態の仮想マシンの vmx ファイル、現在使用されているディスク (フラットまたはデルタ)、.vswp など)
mode 2 = 読み取り専用ロック (例:スナップショットを持つ実行中の仮想マシンの -flat.vmdk など)
mode 3 = マルチライターロック (例:MSCS クラスタディスクまたは FT VM で使用)
 
ロックを所有しているホストにSSH接続し、以下のコマンドを使用して管理サービスhostdとvpxaを再起動します。
   /etc/init.d/hostd restart && /etc/init.d/vpxa restart
 
ロックがまだ解除されていない場合は、以下のコマンドを実行します。
lsof |grep <vmname> && ps|grep <vmname>
 
コマンドの実行例と出力例:
 
[root@esxi4:~] lsof |grep cent7_2 && ps|grep cent7_2
7565528     vmx                   FILE                       43   /vmfs/volumes/vsan:########-########-####-####-####-########5523/########-####-####-####-########81e8/cent7_2.vmx.lck
7565528     vmx                   FILE                       44   /vmfs/volumes/vsan:########-########-####-####-####-########5523/########-####-####-####-########81e8/cent7_2.vmx
7565528     vmx                   FILE                       45   /vmfs/volumes/vsan:########-########-####-####-####-########5523/########-####-####-####-########81e8/cent7_2.vmx~
7565528     vmx                   FILE                       82   /vmfs/volumes/vsan:########-########-####-####-####-########5523/########-####-####-####-########81e8/cent7_2.nvram
7565529  0        vmm0:cent7_2
7565533  0        vmm1:cent7_2
7565535  7565528  vmx-filtPoll:cent7_2
7565536  7565528  vmx-mks:cent7_2
7565537  7565528  vmx-svga:cent7_2
7565538  7565528  vmx-vcpu-0:cent7_2
7565540  7565528  vmx-vcpu-1:cent7_2
 
太字の数はワールドプロセスIDです。このプロセスは、kill <PID> を実行することで終了することができます。
警告:このコマンドは、仮想マシンが登録されていないホストからのみ実行してください
注: 仮想マシンの電源がオフになっている場合、仮想マシンに対して開いているファイル ( lsof) やアクティブなプロセス ( ps) は存在しないはずです。VM の電源がオンになったときに、VM が登録されているホスト上でのみ、開いているファイルやアクティブなプロセスが存在するはずです。

ロック コマンドのいずれでもロックがない場合は、クラスタ内のすべてのホストで次のコマンドを実行します。
lsof |grep <vmname> && ps|grep <vmname>
 
この手順は、複数のホスト上でプロセスを特定するのに役立ちます。実行中のプロセスがある場合は、仮想マシンに関連してハングしている可能性のあるホスト上のプロセスを強制終了してください。
警告: VMが登録されていないホスト上でのみプロセスを強制終了してください。仮想マシンの電源が入っている場合は特に重要です。
 
ロックされたファイルのエラーが解消されず、vmfsfilelockinfo -p または vmkfstools -D を実行してもロックが見つからず、lsof |grep <vmname> && ps|grep <vmname> をどのホスト上で実行しても仮想マシンのアクティブなプロセスが見つからない場合は、クラスターのローリングリブートを実行してロックを解除する必要があります。

仮想マシンディレクトリで以下のコマンドを実行して、すべての仮想マシンファイルおよび vSAN オブジェクト ロック ファイルを確認し、実際にロックされているファイルおよび vSAN オブジェクト ロック ファイルの名前と、それらのファイルをロックしているホストを取得します。
for file in *; do echo ${file}; vmfsfilelockinfo -p ${file} |grep -i mode; done
 
出力例:

Test-3f9d789c.hlog
Test-ec315dde.vswp
Test-ec315dde.vswp.lck
"Test-ec315dde.vswp.lck" is locked in Exclusive mode by host having mac address ['00:##:56:##:11:##']
Host owning the lock on file is <Hostname>, lockMode : Exclusive
Test.nvram
"Test.nvram" is locked in Exclusive mode by host having mac address ['00:##:56:##:11:##']
Host owning the lock on file is <Hostname>, lockMode : Exclusive
Test.vmdk
Test.vmsd
Test.vmx
 
通常、コマンドの実行結果にはそのファイルを所有しているホストが表示されます。そうではないホストがある場合は、そのホスト名を記録します。
すべての.<uuid>.lckファイルを確認するには、以下のコマンドを実行します。

for file in .*lck; do echo ${file}; vmfsfilelockinfo -p ${file} |grep -i mode; done
 
名前にスペースが含まれている仮想マシンのすべてのファイルを確認するには、以下のコマンドを実行します。

for file in *; do echo "${file}"; vmfsfilelockinfo -p "${file}" |grep -i mode; done

Additional Information

次の項目については、KBを参照してください。
Committing snapshots when there are no snapshot entries in the Snapshot Manager
ESXi での仮想マシン ファイル ロックの調査

ESXi の管理エージェントの再起動

注: 初期ディスクとベース ディスク間の切り替え期間中にロックが取得された場合、統合後に VM がシャットダウンする可能性があります。詳細については、Virtual Machine shuts down after a disk consolidation due to a locked file を参照してください。

Investigating virtual disk file locks on vSAN