はい、VMwareとスナップショットを使っていると、想像以上に頻繁に発生します。「ファイルはロックされているためアクセスできません」というエラーは、基本的に何らかのプロセスまたはホストがディスクファイルを保持していることを示しています。このロックが解除されるまでは、ディスクの統合、VMDKの移動、スナップショットの削除、さらにはVMの電源投入など、ほとんど何もできません。特に、Veeamのようなバックアップソフトウェアを使用している場合や、データストア上で何らかの異常な同時実行アクティビティが発生している場合によく発生します。特に複数のESXiホストや複雑なバックアップ設定を同時に管理している場合は、誰がロックを保持しているのかを特定するのが難しい部分です。
つまり、どのサーバーまたはプロセスがロックを保持しているかを特定するには、通常、ログを詳しく調べ、コマンドラインツールを使用する必要があります。所有者(特定のホストまたはバックアッププロセスなど)がわかれば、問題となっているホストを再起動するか、管理エージェントを再起動することで、多くの場合は問題が解決します。すべてが自動で行われるわけではないので、最初に手動で確認する必要があるとしても驚かないでください。ホストまたはエージェントを再起動する必要がある場合は、VMを移行する準備をしておいてください。場合によっては、SSH経由でESXiにログインし、いくつかのコマンドを実行してロックを解除する必要があるかもしれません。
VMware ESXi でロックされた VMDK ファイルを修復する方法
ロックされたファイルをチェックし、そのソースを特定する
- まず、VMが登録されているESXiホストにSSHで接続します。SSHが有効になっていない場合は、ダイレクトコンソールユーザーインターフェイス(DCUI)またはvSphere Clientで有効にする必要があります。
- VM ファイルがあるディレクトリに移動します。
cd /vmfs/volumes/Your_Datastore/Your_VM_Folder - ログでロック情報を探すか、次のコマンドでロックされたファイルを直接確認する
lsof | grep.vmdkか、 vmkfstools コマンドを使用してロックされたファイルを見つけることもできます。 - 特定のロックが表示された場合は、VMフォルダ内のvmware.logを調べて、ロックまたはスナップショットの問題に関連するエラーを見つけてください。
lock次の文字列を検索してください。cat vmware.log | grep lock
ログの詳細を使用してロック所有者を特定する
- ログには、次のような特定のエラー コードでファイルのロックに失敗したなどのエラーが表示されます
Failed to lock the file (16392)。 - タイムスタンプ周辺のログ エントリを確認し、ロックを保持しているプロセスまたはホストを示す行、またはスナップショットとロックの所有者を示す行を探します。
- 次のような行
RO Owner [0](読み取り専用ロックを示す)と、ロックを所有するホストのMACアドレス(一部のスクリーンショットではハイライト表示)が表示される場合があります。これにより、どのESXiホストまたはバックアップソフトウェアがロックを保持しているかを特定できます。
ロックしているESXiホストを特定する
これはちょっと面倒な部分です。MACアドレスに基づいて、どのホストがロックされているかを特定する必要があります。VMware PowerCLIがセットアップされていれば、これが可能です。
Import-Module VMware. VimAutomation. Core Connect-VIServer your-vcenter Get-VMHost | Get-VMHostNetworkAdapter | Where-Object {$_. Mac -like "d0:67:26:ae:79:00"} | Format-List -Property Name, Mac, Model, Status
これにより、どのESXiサーバーがそのMACアドレスを持っているかがわかります。MACアドレスしか分からない場合は、物理ホストの追跡に役立ちます。
PowerCLI にアクセスできない場合、またはすぐに解決したい場合は、esxcli network ip neighbor listESXi ホスト上で直接実行して、隣接ホストの IP-MAC マッピングを確認してください(アクティブに通信しているホストも確認できる可能性があります)。VM ホスト間のネットワークは時々不安定になることがありますので、試してみる価値はあります。
ファイルのロックを解除する方法
- 問題の原因となっているホストを特定したら、通常は管理エージェントを再起動するのが最も簡単な解決策です。ただし、その前に、必要に応じてVMを移行するか、電源を切ってください。
- エージェントを再起動するには、ESXiホストにSSHで接続して次のコマンドを実行します。
services.sh restartまたは、新しいバージョンでは次のコマンドを使用します/etc/init.d/hostd restart。/etc/init.d/vpxa restart - エージェントの再起動がうまくいかない場合は、ホスト全体の再起動が必要になる場合があります。場合によっては、ホストの再起動だけでロックが解除されることもあります。確かに、エレガントではありませんが、それが唯一の方法である場合が多いです。
- 緊急の場合、VM が重要でないかラボである場合は、VM の登録を解除して再登録するか、VMKfstoolsを使用してスナップショット チェーンを検査し、ロックを手動でクリアすることができます。
ホストを再起動できない場合はどうなりますか?
ここからが厄介なところです。ホストやエージェントを再起動できず、ロックがまだ残っている場合は、VMware vMotionを使用して(可能であれば)VMをホストから移行してみると良いかもしれません。そうでない場合は、ロックを強制的に解除することはお勧めしません。VMが破損する可能性があります。
場合によっては、vSphere GUI または CLI を使用してスナップショットを削除すると役立つことがありますが、これはロックがスナップショットに関連している場合のみです。
もう一つのよくあるシナリオは、バックアップのトラブルシューティングです。特にVeeamでは、バックアップセッションが完全にクリーンであること、そしてプロキシがエラー後にロックを保持していないことを確認してください。VMの設定でVMハードウェアからディスクを削除すると(ただし、ファイルを削除せずに「仮想マシンから削除」をチェックする)、ロックされたディスクが解放されることがあります。
まとめ
- ロックエラーのログを確認します(
cat vmware.log) - MACまたはログエントリで所有者を特定する
- PowerCLIでホストを検索するか、
esxcli - 管理エージェントを再起動する(
services.sh restart)か、必要に応じてホストを再起動します。 - ディスクまたはスナップショットを手動で削除する場合は注意してください。まずバックアップしてください。
まとめ
このプロセス全体は面倒に思えるかもしれませんが、どのホストまたはプロセスがロックされているかが分かれば、再起動や簡単なコマンドでロックを解除するだけで済む場合がほとんどです。特にVeeamなどのツールを使用している場合は、バックアップジョブが完了するまで待つ必要がある場合もあります。ホストを再起動する前に、VMを移行するかバックアップを作成することを忘れないでください。せっかく構築したVMクラスターを失いたくはありません。
うまくいけば、この情報が、ロックされたディスクの混乱を、あまり苦労せずに解決する助けになるでしょう。頑張ってください!