VMWare FusionのVMをCentOS上のKVMに移す

こんにちは。今日はmacOS上で動いていたVMをリソース潤沢なKVMサーバに移す話です。

バージョン

  • 移行元: VMWare Fusion 7.1.3
  • 移行先: CentOS 7.5
  • ゲストOS: Windows 7 Professional
  • 移行元のスペック情報はあまり残さない方針
    • 後ほど手で直そうと思っていたので

VM移設

macOSからのエクスポート

VMWare Fusionのディスクを操作するには vmware-vdiskmanager を使う必要があります。既にVMWare Fusionを利用しているmacOSにはパッケージ内にコマンドがあるので、これを利用しましょう。

$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager

まず最初に、ゲストOSのディスク名を英語の物にしてしまうのをオススメします。違うOS間を移動する都合上、漢字や片仮名を用いたファイル名は避ける方が吉です。デフォルトでは”仮想ディスク”という名前になっていることが多いので注意が必要です。
vmware-vdiskmanager にはディスク名を変更するコマンドがあるので、これを使います。

$ cd Documents/Windows\ 7\ x64.vmwarevm/  # もしVMの保存先を変更していたらそちらに
$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -n "仮想ディスク.vmdk" vdisk.vmdk

この際、仮想ディスク-s001.vmdkのようなファイル名のファイルが多くあるかもしれませんが、気にせずサフィックス無しのファイルのみ指定すれば問題無いです。

-s001 のようなファイルは、分割されたOSファイルです。ファイルシステムによっては1つの巨大なファイルを扱うより数GB程度のファイルをいくつか扱う方が性能が良いので、この機能が有効化されている場合が多いと思います。

これらを1つのファイルに纏めるコマンドが以下です。

$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -r vdisk.vmdk -t 0 vdisk-full.vmdk

分割されているファイルを1つに纏めたファイルを出力するコマンドです。単純にVMサイズと同じディスク容量のファイルが生成されるので、ディスク容量にはお気を付けください。

このファイルを入手したらエクスポートは成功です。scpコマンドなどでサーバに送りましょう。

$ scp vdisk-full.vmdk [email protected]:

KVMサーバへのインポート

既にQEMU/KVM環境が完成している場合はqemu-imgコマンドが利用できます。このコマンドでOSイメージを変換します。
変換後のファイル形式はお好みで。私はqcow2でうまくいきました。

$ qemu-img convert -f vmdk -O qcow2 vdisk-full.vmdk image.qcow2

あとはお好みのVM管理コマンドで既存ディスクから起動すれば成功です。私はvirt-managerでサクッと起動しました。

CentOS上でvmware-vdiskmanagerを起動する

上記の方法ではmacOS上でVMディスクを纏めましたが、諸般の理由でこの作業をLinux上で行いたい場合があります。例えばストレージの都合とか。
その場合は以下のリンクが参考になります。

適切なライブラリを、適切な場所にシンボリックリンクすると動きます。詳細は割愛しますが、以下のようなファイル配置になると思います。

.
├── vmware-vdiskmanager-linux.7.0.1
├── libdir
│   └── lib
│       ├── libcrypto.so.0.9.8
│       │   └── libcrypto.so.0.9.8 -> /usr/lib/libcrypto.so.0.9.8e
│       └── libssl.so.0.9.8
│           └── libssl.so.0.9.8 -> /usr/lib/libssl.so.0.9.8e

おわりに

無事にリソース的に余裕があるKVMサーバにVMを映せました。これでまた暫く戦えそうです。

今回はゲストOSがWindowsでしたが、このままだと使う場合にもう少し工夫が必要な場合があります。特に仮想GPUが鬼門で、適当なGPUをパススルーするかRemoteFXが使えるようにするかなどがあります。
RemoteFXが使えれば一番楽なのですが、その場合はWindows Serverを入れたりWindows 7からWindows 10に上げるなどが楽なようです。私も何か考えないとな…。

参考文献