VMware Fusion が vmmon モジュールのバージョン不一致で起動できない時の対処方法

最近めっきり使わなくなった VMware Fusion ですがいつのまにか version 6 が出てました。OS X Mavericks 対応、Windows 8.1 対応、Retina 対応、CPU コア数・メモリ空間・HDD 領域の強化が図られています。Retina 対応が特に見逃せないアップグレード内容なので、夜な夜な購入してアップグレードしてみました。

期待に胸膨らませて VM を起動しようとしたら下記のようなエラーが表示されて全ての VM が起動できなくなりました。大変有難うございます。

vmmon モジュールのバージョン不一致:
279.0 を予期しましたが、271.0を取得しました。vmmon カーネルモジュールのバージョンが違います。VMware Fusion を再インストールしてみてください。

img002.png

「再インストールしてみてください」と表示されているので、何度もマシンを再起動してみたり、再インストールしてみたりと試みるも、全く解消せずエラーで起動できません。このようなエラーが出た時の対処方法がわかりましたのでまとめておきます。

- スポンサーリンク -

今回の問題を解決するに知っておくべき概念があります。vmmon はカーネル機能拡張を利用したモジュールです。OSX には "kernel extension" ("kext") というカーネル機能拡張があります。kext はいわゆるローダブル・カーネル・モジュールです。WikiPedia から引用しますと下記のとおりです。

ローダブル・カーネル・モジュール(英: loadable kernel module, LKM)は、オペレーティングシステム (OS) の動作中のカーネルを拡張するコードを含むオブジェクトファイル。現行Unix系システムの多くやMicrosoft Windowsはローダブル・カーネル・モジュールをサポートしているが、呼称はそれぞれ異なる。例えばMac OS Xでは"kernel extension" ("kext") と呼ぶ。他にもカーネル・ローダブル・モジュール (KLM) やカーネルモジュール (KMOD) とも呼ばれる。LKMは一般にCPUやM/Bなど新しいハードウェアやファイルシステムのサポート、通信プロトコル、システムコールを追加するために利用される。LKMの提供する機能が不要になれば、アンロードしメモリを解放することができる。

vmmon モジュールのバージョン不一致で起動できない時の対処方法

今回のようなモジュールのバージョン不一致が表示されてしまう場合には、ターミナルから下記の手順でモジュールを入れ替えてやる必要があります。

  1. VMware Fusion を完全に終了
  2. load されているモジュールを unload
  3. 古いモジュールを削除
  4. 新しいモジュールを手動でインストール(コピー)
  5. 新しいモジュールを load

この手順をコマンドにすると下記のとおりです。まずは VMware Fusion を完全に終了してから、ターミナルを開いて実行します。

sudo kextunload /System/Library/Extensions/vmmon.kext

sudo rm -rf /System/Library/Extensions/vmmon.kext

sudo cp -pR /Applications/VMware\ Fusion.app/Contents/Library/kexts/vmmon.kext /System/Library/Extensions/

sudo kextutil /System/Library/Extensions/vmmon.kext

先にモジュールを unload しておかないと次のようなエラーが出て新しいモジュールに置き換えができません。

Cache file /System/Library/Caches/com.apple.kext.caches/Directories/System/Library/Extensions/KextIdentifiers.plist.gz is out of date; not using.
Can't load vmmon.kext - a different version is already loaded.

無事に置き換えができたかを確認します。sudo kextstat | grep vmx とコマンドを入力します。
置き換える前の vmx はバージョンが 0104.03.86 です。

sudo kextstat | grep vmx

  171    0 0xffffff7f8271f000 0xd000     0xd000     com.vmware.kext.vmx86 (0104.03.86) <7 5 4 3 1>

モジュールの入れ替えが正常に行われていれば、下記のようにバージョンが 0139.86.58 になっているはずです。

sudo kextstat | grep vmx

  175    0 0xffffff7f8278a000 0xe000     0xe000     com.vmware.kext.vmx86 (0139.86.58) <7 5 4 3 1>

以上の作業で VMware Fusion5 から VMware Fusion6 へのアップグレードで発生する不具合(起動できない問題)は解消されます。もちろん VMware Fusion を初めて使う方は当該エラーは発生しませんが、日本語で全然情報がないのでまとめておきました。参考にした英語の解説ページはこちら。
Version mismatch with vmmon module: expecting 2... | VMware Communities

ちなみに VMware Fusion6 は起動できるようになりましたが、いろいろ問題出まくってます。確認してる不具合は下記の通り。

  • 従来は NAT でネットワーク接続できていたのに、ブリッジ接続じゃないと外に抜けられなくなった
  • フルスクリーンモードにすると起動するたびに最大解像度で起動する
  • Windows8を起動すると起動画面だけが256色になってしまう

そして期待していた Retina 対応は、HiDPI 対応を意味するのではなく、ドット・バイ・ドットで起動するっていう対応でした。残念無念。文字が米粒過ぎて読めません。
従いまして、Windows側でディスプレイ設定を150%とかにしてやると良い感じの大きさになるのですが、アプリケーションによってはデザインが崩れてしまうので、ようは残念でしたってわけです。

img003.png

- スポンサーリンク -