misc.log

日常茶飯事とお仕事と

VMware WorkstationでVMを移動、リンククローン先VMが動かない

VMware WorkstationのVMをPC入れ替えなどで移動してフォルダー構成が変わってしまった場合、あるVMを元にリンククローンで作成したVMが「クローン元のVMファイルが見つからない」というエラーを出して起動しなくなります。その場合の対処例をメモしておきます。ちなみに環境はVMware Workstation 15.5、Windows10がホストのOSです。

先に簡単に手順を述べておくと「参照先の親VMパスを記載した仮想ディスクの定義情報をテキストエディターで書き換える」です。かなり強引ですが。

クローン先を起動、リンク先VMを訂正

リンククローンのクローン元を移動してしまった場合、クローンで作ったVM起動時に下図のようなメッセージが表示されます。

f:id:frontline:20210125094443p:plain
リンク先のVMが見つからない警告

これは、リンク先の「親VM」を絶対パスで保持しているため、パスの名称が1つでも変わってしまうとどこにあるか判らなくなってしまうというVMwareの仕様のためのメッセージ。ここから「参照」で親VMのフォルダーとファイルを特定してやると、とりあえずこのメッセージは消えます。VMwareの仮想PCを定義したファイルは拡張子が「.vmx」のものです。フォルダーとファイルを指定してください。

ここで参照先を指定することで、クローンVMVM定義ファイル(拡張子が.vmxのファイル)に記載されている「fileSearchPath」に指定したフォルダーが追加されます。

このあたりの作業を行っていると、VMのフォルダー名とかVM名の命名をわかりやすくしておかないと、大量のVMが有る場合などは混乱することが判るかと思います。普段からそうしたあたりの運用ルールを決めておきましょう。

図解即戦力 仮想化&コンテナがこれ1冊でしっかりわかる教科書

図解即戦力 仮想化&コンテナがこれ1冊でしっかりわかる教科書

クローン先ディスクを訂正

上記の作業を行って再度クローンしたVMを起動すると、おそらく次のようなメッセージが表示されて起動に失敗します。

f:id:frontline:20210125094743p:plain
仮想ディスクのリンク先が見つからない警告

これは、VMwareで定義される「仮想PCのハードディスク」について定義したファイルが見つからないというもの。クローンVMでは基本となる親VMのOS情報は、親VMのハードディスク(仮想ハードディスク)に入っているので、そちらも併せて参照を切り替えないとOS起動に必要な情報へたどり着くことができないのですね(それくらい上記作業から追跡してくれればよさそうなものですが……。おそらくVMと仮想ディスクが同じ場所にないような運用を想定して別々の定義になっているのでしょうね)。

これですが、残念ながら参照でファイルを指定といったことが出来ず、エラーダイアログにはOKボタンしかありません。そこで、ここではテキストエディター(サクラエディターやメモ帳のようなツール)で、VMwareの仮想ディスク定義ファイルを手作業で編集する必要があります。

上記エラーメッセージの場合、書いてあることの意味は

  • VMが置いてあったCドライブの所定のフォルダーとファイルが見つからない。ファイル名はWindows_7_Professional_x86-cl1-000002.vmdk です。
  • 動かそうとしているクローンVMはEドライブにあって、仮想ディスクファイル Windows_7_Professional_x86-cl2-000005.vmdk が上記のファイルに依存しています。

仮想ディスクファイルは(設定にもよるでしょうが)複数のファイルから構成されていて、「~-######.vmdk」のように6桁通し番号や「-s###」といった枝番が付けられています。上記のエラーメッセージには「000005が開けない」と書いてありますが、実際にはそれらの番号付き仮想ディスクファイルを束ねる、「番号なしの仮想ディスクファイル」に参照先が記載されているので、これを書き換えます。

この場合、下図の「Windows_7_Professional_x860cl2.vmdk」です。

f:id:frontline:20210125100216p:plain
番号無しの仮想ディスクファイルを特定する

このファイルをテキストエディターで開いて見ると、下記のような内容を見ることができます。

# Disk DescriptorFile
version=1
encoding="Shift_JIS"
CID=5352f6df
parentCID=87dc3b57
createType="twoGbMaxExtentSparse"
parentFileNameHint="C:\Users\(ユーザー名)\Documents\Virtual Machines\Win 7 Pro x86 VS2008\Windows_7_Professional_x86-cl1-000002.vmdk"
# Extent description
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s001.vmdk"
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s002.vmdk"
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s003.vmdk"
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s004.vmdk"
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s005.vmdk"
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s006.vmdk"
RW 4192256 SPARSE "Windows_7_Professional_x86-cl2-s007.vmdk"
(以下略)

もうおわかりかと思いますが、この設定「parentFileNameHint」のところのパスを、クローン元の親VMのパスに書き換えてファイルを保存すれば大丈夫です。この設定ファイルですが、行頭に#を書いておくとコメントになるようなので、不安であれば元の設定をコピーして#を付けてコメントアウトしておけば良いでしょう。

このあと、再度VMを起動すると私の環境ではもう一度同じエラーが出たのですが、もういっかい起動しなおすと無事起動しました(キャッシュか何かが効いているのでしょうか)。

以上、手作業が入りますがクローン先を移動した場合の設定変更方法です。

参考にしたリンク

そもそも仮想ディスク定義情報がテキストファイルだとは知らなかったので。下記リンク先のQAを読んで「書き換えられるのか!?」と気づきました。

communities.vmware.com