VMware で環境が変わってしまった場合、仮想マシンが起動できなくなるトラブルが発生することがあります。
VMware vSphere Standard Edition などで「vMotion」や「ストレージ vMotion」でリソースを管理できていれば問題は発生しませんが、手動でファイルを移動したり復元した際に仮想マシンが起動できなくなるトラブルが発生した場合の対処について解説します。
(本来なら不要なトラブルシューティングですが)
環境が変わり仮想マシンが起動できない場合は基本的に諦めざるを得ない
VMware のサポート対象外の作業を実施して仮想マシンがで起動できなくなった場合は基本的に諦める前提で調査します。
確認事項
初めに以下の点を確認します。
- ファイルはワンセット全部そろっているか?
- 必要なファイルはすべて同じディレクトリ(フォルダ)にあるか?
もし必要なファイルが欠けていたとしたら復旧は難しいと思われます。
仮想マシンに必要なファイルを確認する
仮想マシンの実体は各種ファイル群で構成されています。
ESXi ホストから見れば仮想マシンは単なるファイルです。
仮想ハードウェアの構成を定義したファイルや、仮想マシン上のデータを規則する仮想ハードディスク、仮想マシンのある特定時点の状態を記録するためのスナップショットで構成されています。
- .vmx
- .vmxf
- .vmdk
- -flat.vmdk
- .nvram
- .vmsd
- .vmsn
- .vswp
- .vmss
- .log
一番基本的なファイルは「構成ファイル」と「ハードディスクファイル」です。
ファイルを確認する方法の1つとして「データストアブラウザ」があります。
コマンドラインからでも確認することができます。
以下、仮想マシンに必要なそれぞれのファイルについて解説します。
VMX ファイル
- .vmx ← 【例】vmname.vmx
一番基本となる仮想マシンの構成ファイルです。
仮想マシンの様々な仮想ハードシェア構成の詳細や、割り当てられた仮想ハードウェアについて記述されています。
仮想マシンがテンプレートに変換された場合は「.vmx」→「.vmtx」に拡張子が変換されます。
インベントリから仮想マシンを削除した場合、VMX ファイルを指定してインベントリに追加することで再度管理画面上に表示され利用できるようになります。
VMFX ファイル
- .vmxf ← 【例】vmname.vmxf
追加の仮想マシン構成ファイルです。
VMDK ファイル
- .vmdk ← 【例】vmname.vmdk 仮想ディスクの定義ファイルです。
関連する XXXX-flat.vmdk ファイルに関するすべての情報が記述されています。
- -flat.vmdk ← 【例】vmname-flat.vmdk
仮想マシンの仮想ハード ディスク ドライブの内容が保存されています。
ファイルの中身はバイナリ形式なのでテキストファイルで開いて読むことはできません。
-flat.vmdk ファイルは仮想ディスクのプロビジョニングタイプに応じて、作成されるサイズが変わります。
- シックプロビジョニング(Thick Provisioning、Lazy Zeroed と Eager Zeroed)の場合 ← 構成したディスクのサイズ分がアロケートされます。
- シンプロビジョニング(Thin Provisioning)の場合 ← 実際の使用量のみのサイズがアロケートされます。
データは .vmdk ファイルではなく、XXXXX-flat.vmdk ファイルに書き込まれます。
.vmdk ファイルと XXXXX-flat.vmdk ファイルは1セットで構成されています。
また、仮想マシン「test」がスナップショットで上で動作している場合、ベースディスクは「test-flat.vmdk」で、最新のスナップショットディスクは「test-000001.vmdk」です。
以下のように数字が増えていきます。
- スナップショット取得1回目 ← test-000001.vmdk
- スナップショット取得2回目 ← test-000002.vmdk
- スナップショット取得3回目 ← test-000003.vmdk
仮想マシン「test」のクローンを作成すると、作成された新しい仮想マシンのベースディスクの名前は「test-000001-flat.vmdk」になります。
- ベースディスクファイル ← test-flat.vmdk
- スナップショットディスクファイル ← test-000001.vmdk
- クローン作成された新仮想マシンのベースディスクファイル ← test-000001-flat.vmdk
NVRAM ファイル
- .nvram ← 【例】vmname.nvram または nvram
仮想マシンの BIOS または EFI の設定が保存されています。
仮想マシンをパワーオンすると、NVRAM ファイルのコンテンツが読み取られ、仮想マシンの BIOS がエミュレートされます。
何らかの理由で NVRAM ファイルを開けなかった場合は次のエラーが表示されます。
Could not create ‘/vmfs/volumes/Datastore_Name/VM_name/VM_Name.nvram’:Reason |
NVRAM ファイルを開くときの障害の原因は以下が考えられます。
- ファイルのロックに失敗した場合
- ファイルのパスが見つからない場合
VMSD ファイル
- .vmsd ← 【例】vmname.vmsd
仮想マシンのスナップショットに関する情報とメタデータがまとめて保存されています。
VMSN ファイル
- .vmsn ← 【例】vmname.vmsn
仮想マシンのスナップショットが作成された時点の仮想マシンのメモリ状態が保存されています。
VSWP ファイル
- .vswp ← 【例】vmname.vswp
ホストレベルのスワップが発生した際に仮想マシンのメモリをスワップアウトする先のファイルです。
VMASS ファイル
- .vmss ← 【例】vmname.vmss
仮想マシンのサスペンド ファイルです。
log ファイル
- .log ← 【例】vmware.log
現在の(カレントの、現在使用している)仮想マシンのログファイルです。
- -#.log ← 【例】vmware-#.log (# は 1 から始まる連番)
ログローテートされた以前の仮想マシンのログファイルです。
ロックされているファイルを確認する
以下の仮想マシンのファイルは実行中にロックされます。
- VMNAME.vswp
- DISKNAME-flat.vmdk
- DISKNAME-ITERATION-delta.vmdk
- VMNAME.vmx
- VMNAME.vmxf
- vmware.log
仮想マシンのロックされているファイルの所有者を見つけるには、次のコマンドを実行します。
# vmkvsitools lsof | grep 仮想マシン名 |
ログファイルを確認する
仮想マシンのパワーオンに失敗すると、その理由が以下のログファイルに出力される可能性があるため、ログを確認します。
■仮想マシン側
vmware.log ファイル
仮想マシンの vmware.log ファイルに記録されるのでログを確認します。
■ホスト側
/var/log/vmkernel ログファイル
■仮想マシンのコンソール画面
仮想マシンのコンソール画面にエラーログが出力され、仮想マシンが起動できない理由を調査することができる場合があります。
ディスク容量を確認する
ディスク容量が足りなくなると仮想マシンの起動に失敗します。
仮想マシンをインベントリから削除して再度登録する
インベントリに仮想マシンが登録された状態で、手動で仮想マシンファイル群のディレクトリを変更した場合に「vmx ファイルが見つかりません。」というメッセージが出力され、仮想マシンが起動できなくなります。
仮想マシンの vmx ファイルのパスは、ESXi ホストの「/etc/vmware/hostd/vmInventory.xml」と vCenter Server のデータベースに保存されているので、手動でディレクトリを変更すると管理情報と実際のパスが不整合を起こします。
その場合は、一度インベントリから削除し、新規仮想マシンの作成ウィザードより登録し直せば起動できます。
vMotion で他のデータストアに移動できない環境なら、仮想マシンのエクスポート・インポート機能を利用するので一番確実です。
「仮想マシン名」のパワーオンに失敗しました。ファイル /vmfs/volumes/xxxxxxxxxxx-xxxx-xxxx-xxxxx/仮想マシン名/仮想マシン名-000001.vmdk が見つかりませんでした
仮想マシンを起動した際に下図のように「<仮想マシン名>のパワーオンに失敗しました。ファイル /vmfs/volumes/8730874acdea837213a873-238748032abc-9854924abc-83473/<仮想マシン名>/<仮想マシン名>-000001.vmdk が見つかりませんでした」のエラーメッセージを出力して起動に失敗した場合です。
解決策
仮想マシンの構成ファイル (*.vmx) に記述されている各種ファイルのパスを見直します。
実際に使用されている.vmx ファイルの確認方法
ESXi ハイパーバイザーでは vmInventory.xml ファイル(保存場所は /etc/vmware/hostd)に、登録済みの各仮想マシンの.vmx ファイルのパスが記述されています。
.vmx ファイルの編集方法
.vmx ファイルを編集する前に、次の点を確認します。
- 仮想マシンをパワーオフします。
- root アカウントにスイッチします。
- .vmx ファイルのバックアップを取ります。
.vmx ファイルを修正したら再度インベントリに登録する
.vmx ファイルを修正したら再度インベントリに登録します。
.vmx ファイルを編集する際の注意点
すべての仮想マシンを .vmx ファイルと同じドライブに作成します。
すべてのディスクが .vmx ファイルと同じフォルダにある必要があります。
.vmx ファイルのパラメータの解説
多少古くて英語ですが、以下のサイトで .vmx ファイルの詳しいパラメータが解説されているので参考になります。
VMX-file parameters
.vmx ファイル参考例
以下、.vmx ファイル(test.vmx ファイル)の参考例です。
基本的にファイル群はすべて同じディレクトリに保存されている必要があります。
[root@esxi:/vmfs/volumes/xxxxxx-xxxxxxx-xxxxx-xxxxxxxxx/test] cat test.vmx [root@esxi:/vmfs/volumes/xxxxxx-xxxxxxx-xxxxx-xxxxxxxxx/test] |
コメントアウトする場合は行頭に「#」を付けます。
仮想マシンをパワーオンできず、不明として表示される (1008752) 場合
仮想マシンをパワーオンできず、不明として表示される (1008752)
https://kb.vmware.com/s/article/1008752?lang=ja#q=1031605
この問題を解決するには、/var/lib/vmware/hostd/stats にあるファイルを削除する必要があります。
1.SSH クライアントで ESX ホストに root としてログインします。
2.次のディレクトリに変更します。
# cd /var/lib/vmware/hostd/stats |
このディレクトリには 4 つのファイルがあります。
確認するには、次のコマンドでディレクトリ リストを実行します。
# ls |
3.次のコマンドでこれらのファイルを削除します。
# rm * |
4.管理エージェントを再起動します。
仮想マシンのファイル名を手動で変更する手順(cp や mv コマンドを使わない)
手動でコールドマイグレーションをした場合で、移動後に仮想マシンのファイル名を手動で変更する手順です。
※手動で変更すると、パワーオンできなくなるなどトラブルのリスクがあるのでバックアップを取得するなど十分注意します。
1.VMware vSphere Client にログインします。
2.管理画面よりホストのインベントリ一覧で対象の仮想マシンを確認します。
3.管理画面より対象の仮想マシンを選択して右クリックし電源OFF(電源ダウン)の状態にします。
4.対象の仮想マシンを右クリックし「インベントリからの削除」をクリックします。
5.SSH で ESXi にログインします。
6.仮想マシンが存在するディレクトリに移動します。
# cd /vmfs/volumes/<データストア名>/<仮想マシン名> |
7.vmkfstools -E コマンドを使用して、仮想ディスク (VMDK) ファイルの名前を変更します。
# vmkfstools -E “originalname.vmdk” “newname.vmdk” |
仮想マシンのクローン(コピー)の作成を必要とする場合があります。
仮想マシンのクローンを新しい仮想ディスクに作成する場合
# vmkfstools -i “originalname.vmdk” “newname.vmdk” |
上記コマンドを実行すると、元の仮想ディスクは変更されず、そのまま残ります。
仮想ディスクのクローンをターゲット ディレクトリで作成するには、十分な領域が必要です。
上記のコマンドでは、新しい仮想ディスクは現在のディレクトリに作成されますが、異なるディレクトリも指定できます。
※vmkfstools コマンドを実行した後で、originalname-flat.vmdk ファイルの名前を変更する必要はありません。vmkfstools コマンドでは、両方の VMDK ファイルの名前が変更され、記述子内の参照が更新されます。
※cp または mv コマンドを仮想ディスクのファイル名の変更に使用しないでください。代わりに、vmkfstools などの VMware ユーティリティを使用します。
8.次のコマンドを使用して、仮想マシン構成ファイル(.vmx)をコピーします。
# cp “originalname.vmx” “newname.vmx” |
9.コピー後に新しい仮想マシン構成ファイル (newname.vmx など) をテキスト エディタで開き、仮想マシンのファイル名の古いインスタンスをすべて新しいファイル名に変更します。
# vi “newname.vmx” |
以下、設定箇所の例です。
nvram = “newname.nvram” |
仮想マシンのディスクが複数ある場合の例
scsi0:1.fileName = ” newname _1.vmdk” |
VMkernel スワップファイルの参照を修正します。
sched.swap.derivedName = “/vmfs/volumes/DatastoreUUID/newname/newname-UUID.vswp |
その他、元のパスまたはファイル名を参照する残りの行を修正します。
10.ファイルを保存し、エディタを終了します。
11..vmx 構成ファイルを除く残りのすべてのファイルを新しい名前に変更します。
# mv “originalname.nvram” “newname.nvram” |
12.ディレクトリを親ディレクトリに変更し、仮想マシンのディレクトリ名を変更します。
# cd .. # mv “originalname” “newname” |
13.VMware vSphere Client よりデータストアを参照し、名前を変更した仮想マシンのディレクトリに移動し、仮想マシンの新しい構成ファイル「newname.vmx」を右クリックし、「インベントリへの追加」を選択します。
14.仮想マシンをパワーオンします。パワーオン時に、仮想マシンに関する質問が画面に表示されるので「移動しました」を選択し、OK をクリックします。
※「コピーしました」を選択すると、仮想マシンの UUID と MAC アドレスが変更され、MAC アドレスの変更の影響を受けやすいゲスト アプリケーションや、UUID に依存する仮想マシンのバックアップに悪影響を及ぼします。
バックアップツールを利用してバックアップを取得し復元したが仮想マシンが起動しない場合
有償・無償を問わず、バックアップツールを利用してバックアップを取得した後、バックアップツールより復元したが仮想マシンが起動しない場合があります。
その場合は SCSI コントローラの種類を変更します。
最初に「LSI Logic SAS」に変更して起動するか様子を見ます。
失敗を防ぐ仮想マシンの移動方法
vmx ファイルが見つからない、ディスク容量が足りないなどで仮想マシンが起動できなくなるなどのトラブルを避けるためには失敗を防ぐ仮想マシンの移動方法を知っておく必要があります。
仮想マシンの移動方法には以下の2つの方法があります。
- コールドマイグレーション ← ストレージ vMotion が不可
- ホットマイグレーション ← ストレージ vMotion が可能
【コールドマイグレーション】ストレージ vMotion ができない場合
vMotion で他のデータストアに移動できない環境なら、仮想マシンの電源を OFF にしてエクスポート・インポート機能を利用するのが一番確実です。
また、仮想マシンを選択して右クリックし「移行」を試してみます。
【ホットマイグレーション】ストレージ vMotion が可能な場合
ストレージ vMotion でデータストアを移動します。
VMX-builder を利用して VMX ファイルを手動で作成する
VMX-builder ホームページ
http://sanbarrow.com/vmxbuilder.html
参考資料
VMware で困ったときに調べる辞典的な存在です。
インターネット上でも VMware に関する数多くの情報を調べることができますが、「ヴィエムウェア株式会社」として執筆・出版しただけありソースとしては一番信頼がおけます。
VMware徹底入門 第4版 VMware vSphere 6.0対応
コメント