VMware ESXi で応答しない仮想マシンのトラブルシューティングと停止方法

ESXi 上の仮想マシンがフリーズしたり応答しなくなったりすると、本当に頭が痛くなります。特に、通常のシャットダウンコマンドが何も実行されない場合、なおさらです。仮想マシンが奇妙な状態に陥り、vSphere や通常の電源制御からシャットダウンしようとすると、「別のタスクが既に進行中です」や「操作を実行できません」といったエラーが表示されることがあります。このような場合は、手動で強制的にシャットダウンする必要があります。ただし、これは物理マシンから電源コードを引っ張るようなものなので、ゲスト OS のデータが失われる可能性があることに注意してください。そのため、他のプロセスがファイルをロックしていないか、スナップショットやバックアップが実行中かどうか、事前に確認することをお勧めします。

プロセスを強制終了する前に、VM が重要な操作やバックアップを実行していないことを確認してください。そうしないと、ディスクが破損したり、バックアップから復元する必要が生じたりする可能性があります。通常、これらの手順では、ESXi ホストへの SSH アクセス、または vCenter を管理しているマシンからの PowerCLI セッションが必要です。

ESXiでスタックしたVMを強制的にパワーオフする方法

問題のあるESXiホストとVMを特定する

  • まず、フリーズしたVMを実際に実行しているESXiホストを特定します。vSphere Clientでこれを行うには、 VMの「サマリ」タブに移動し、 「関連オブジェクト」の下にある「ホスト」を確認します。
  • ESXiホストでSSHが有効になっていることを確認してください。有効になっていない場合は、ホストのWebインターフェースで「管理」>「サービス」に移動し、 SSHを起動してください。

SSH経由で接続し、実行中のVMを一覧表示する

  • お気に入りの SSH クライアント (Windows に組み込まれている OpenSSH や PuTTY など) を使用して、ホストに接続します。
  • 実行:esxcli vm process list。このコマンドは、現在稼働中のすべてのVMとそのプロセスID(ワールドID)を表示します。例えば、VM名、ワールドID、状態のリストが表示されます。これは、スタックしたVMを特定するのに役立ちます。

VMプロセスを見つけて終了する

  • シャットダウンするVMのワールドIDをコピーします。通常は20598249のような数字です。
  • 次に、次のコマンドを使用して強制的にオフにします: をVM の ID にesxcli vm process kill --type=force --world-id=WorldNumber置き換えます。WorldNumber
  • 他にも選択肢があります。ソフト(穏やかなシャットダウンのような)、ハード(即時シャットダウン)、そしてフォース(最終手段)です。設定によってはソフトの方がうまくいく場合もありますが、そうでない場合はハードまたはフォースを選ぶのが賢明です。

例えば、ある設定では以下を試したところうまくいきましたesxcli vm process kill --type=soft -w=20598249。これは、VMに優しくシャットダウンを指示するようなものです。システムによっては、破損のリスクなくこの方法でうまくいきます。

PowerCLI を使用する (Windows からのスクリプト作成を好む場合)

  • PowerCLI経由でvCenterから管理することもできます。各ホストにSSHで接続する必要はありません。接続方法:Connect-VIServer <vCenter_or_ESXi_FQDN>
  • VM の状態を次の方法で確認します。Get-VM “web1" | select name, PowerStates
  • 次に、次のコマンドで強制停止しますStop-VM -VM “web1" -Kill。これはGUIで「強制シャットダウン」を実行するのと同じような操作ですが、スクリプトを使用して実行するため、迅速かつ効果的です。

詳細についてはesxtopを参照してください

  • esxtopSSH経由で実行し、 を押してcCPUビューを表示し、 を押してSHIFT+VVMプロセスをフィルタリングします。 を押してf列を選択し、cもう一度押してLWID情報を追加し、 を押しますEnter。VMのLWIDを見つけて、 を押してkそのLWIDを入力するとプロセスが強制終了されます。少し扱いに​​くいですが、他の方法がうまくいかない場合に使えます。

最後の手段:親プロセスを強制終了する

  • 他に方法がない場合は、Linux風のシェルから手動でプロセスを強制終了できます。まず、次のコマンドでプロセスIDを調べますps | grep “web2”
  • 次に、 で強制的に強制終了しますkill -9 <PID>。ただし、ディスクが破損したり、回復するまで VM が起動できなくなったりする可能性があるため、注意が必要です。
ゲストOSがWindowsの場合、この後、回復モード(Windows回復環境など)が自動的に起動することがあります。それでも問題が解決しない場合は、ホスト上の管理エージェントを再起動すると改善する可能性がありますが、これはあくまでも最終手段です。/etc/init.d/hostd restartとを実行してください/etc/init.d/vpxa restart

これらのコマンドは最初は戸惑うかもしれませんが、1台のマシンなら数回試すだけで済むこともあります。ただし、プロセスが頑固な場合は強制的に終了させて​​いるということを覚えておいてください。これで誰かの時間節約になれば幸いです。ホスト全体を再起動せずにVMを強制終了させる方法を知っていれば、スタックしたVMの処理は大幅に楽になりますから。

まとめ

  • VMのホストを識別し、SSH経由で接続する
  • VMのワールドIDを取得するにはesxcli vm process list
  • esxcli vm process kill --type=force --world-id=IDそれを止めるために使う
  • オプションとして、PowerCLIコマンドを使用することもできます。
  • 最後の手段として、SSH経由で手動でプロセスを強制終了psし、kill -9

まとめ

完全にフリーズしたVMをシャットダウンさせるのは簡単ではありませんが、これらのコマンドと手順は大抵うまくいきます。ただし、これは少しリスクがあるので、他の方法をすべて試した場合にのみ使用してください。設定によって動作が異なるため、問題が発生したり、複数の方法を試したりする必要がある場合もあります。それでも、VMを手動でフリーズ状態から解除する方法を知っていれば、多くのフラストレーションとダウンタイムを節約できます。