2020年9月12日土曜日

OVF Toolを使って仮想マシンをエクスポート・インポートする

OVF (Open Virtualization Format) と呼ばれる仮想マシンをファイルとして記述する標準フォーマットが制定されている。VMwareのESXiでは、過去のバージョンからOVFのエクスポート・インポートに対応しており、仮想マシンを別のvSphere環境に移行する時やバックアップ目的で、エクスポート・インポートを実施することができる。

OVFのエクスポート・インポート作業はESXiであればVMware Host Client、vCenter ServerであればvSphere Client (あるいは、まもなくサポート終了となるvSphere Web Client) で実施することができるが、Web管理画面での作業はブラウザの相性などでダウンロードが途中で止まってしまったり、予期せぬタイムアウトで中断してしまうことがよくある。

そこで、VMwareからはコマンドラインで実施できるOVFのエクスポート・インポートツールが用意されており、その名もずばり「OVF Tool」である。今回、OVF Toolの使い方を調べて実際に使ってみた。

※本記事の使用方法の他にも、OVF Toolを使って仮想マシンのクローンを作ることもできる。その方法は以下記事を参照いただきたい。

OVF Toolのインストール

2020年8月現在のOVF Toolの最新版は4.4.0となる。WIndows版、Linux版、Mac OS版と複数のプラットフォームに対応している。今回はWindows 64bit版をダウンロードして使うことにする。

Windows版はmsi形式のインストーラになっているので、実行してインストールすればよい。仮想マシンでインストールする場合、「Some files that need to be updated are currently in use.」といったVMware Tools関連のファイルに一部更新が発生する旨の警告メッセージが表示されるが、私の環境ではそのまま進めてもVMware Toolsの停止は発生せず、OS再起動も不要で問題なくOVF Toolは動作した。

インストール後、PowerShell (あるいはコマンドプロンプト) を開き、以下「C:\Program Files\VMware\VMware OVF Tool\」に移動する。以降は、ここをカレントディレクトリとして作業を実施する。

> cd 'C:\Program Files\VMware\VMware OVF Tool\'

OVF Toolの基本的な使い方は、以下構文に集約されている。オプションが多数用意されているものの、本当に必要なオプションは多くない。必要に応じて、.\ovftool -hでヘルプを参照すればよいだろう。

.\ovftool [options] <source> [<target>]

注意事項

ESXiの環境で作成した仮想マシンをOVFとしてエクスポートする。エクスポートの前提として、エクスポート対象の仮想マシンをパワーオフしておく必要があるので注意。パワーオン状態の場合、以下のように「Error: Fault cause: vim.fault.InvalidState」というエラーで失敗する。

> .\ovftool.exe --noImageFiles vi://root:PASSWORD@192.168.33.10/testvm C:\work\vm
Opening VI source: vi://root@192.168.33.10:443/testvm
Error: Fault cause: vim.fault.InvalidState

Completed with errors

なお、仮想マシンのスナップショットが取得されていたとしても、最新の仮想マシンの状態がOVFとしてエクスポートされることは確認済みとなる。

エクスポート

ESXi上の仮想マシンをエクスポートするには、以下の構文で実施する。仮想マシンのCD/DVDドライブにISOがマウントされていると、そのISOファイルも一緒にエクスポートされてしまうので、ISOファイルのエクスポートを抑止するため--noImageFilesオプションを付与する。

.\ovftool --noImageFiles vi://[ESXiのユーザ名]:[ESXiのパスワード]@[ESXiのホスト名 or IPアドレス]/[仮想マシン名] [OVF保存先のフルパス]

例として、以下の仮想マシンをエクスポートしてみる。

  • 仮想マシン名 : testvm
  • コピー元ESXiのユーザ名 : root
  • コピー元ESXiのIPアドレス : 192.168.33.10
  • OVF保存先のフルパス : C:\work\vm

実行結果は以下の通り。「Completed successfully」が表示されれば問題なく完了となる。

> .\ovftool.exe --noImageFiles vi://root:PASSWORD@192.168.33.10/testvm C:\work\vm
Accept SSL fingerprint (0D:E0:66:54:EE:34:EE:B7:88:1E:EC:32:C4:D5:9F:01:39:D4:E5:D7) for host 192.168.33.10 as source type.
Fingerprint will be added to the known host file
Write 'yes' or 'no'
yes   ←★初回のみ確認があるため「yes」を入力
Opening VI source: vi://root@192.168.33.10:443/testvm
Opening OVF target: C:\work\vm
Writing OVF package: C:\work\vm\testvm\testvm.ovf
Disk progress: 1%   ←★進捗が表示されるものの突然終わったりするため役に立たない
Transfer Completed
Completed successfully

実際に出力されたOVFを確認してみよう。それぞれのファイルは以下の意味を持つ。

  • .vmdk : 仮想マシンのディスクイメージ本体
  • .nvram : 仮想マシンのBIOS/UEFIの本体
  • .mf : マニフェストファイル。各ファイルのSHA256のハッシュ値が格納されている。OVFインポート時に各ファイルのハッシュ値を計算し、本ファイルに記載されている値と一致することで、ファイルの正当性を確認する
  • .ovf : 仮想マシンの構成情報が記載されたXMLファイル
> dir C:\work\vm\testvm

    ディレクトリ: C:\work\vm\testvm

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2020/08/16     16:25      241957376 testvm-disk1.vmdk
-a----       2020/08/16     16:25           8684 testvm-file2.nvram
-a----       2020/08/16     16:25            361 testvm.mf
-a----       2020/08/16     16:25           9718 testvm.ovf

インポート

ESXi上の仮想マシンをインポートするには、以下の構文で実施する。インポート時は保存先のデータストアの指定が必要となるので-dsオプションを付与する。また、ディスクの形式はデフォルトではシックプロビジョニングとなってしまうので、シックプロビジョニングに変更が必要な場合は-dm=thinを付与する。

.\ovftool -ds=[コピー先データストア名] -dm=[ディスク形式 (thick,thin,eagerZeroedThick)] [OVFファイルのフルパス] vi://[ESXiのユーザ名]:[ESXiのパスワード]@[ESXiのホスト名 or IPアドレス]/

例として、以下の仮想マシンをインポートしてみる。

  • 仮想マシン名 : testvm
  • OVFファイルのフルパス : C:\work\vm\testvm\testvm.ovf
  • コピー先ESXiのユーザ名 : root
  • コピー先ESXiのIPアドレス : 192.168.33.12
  • コピー先データストア名 : ssd_local_02
  • ディスク形式 : シンプロビジョニング

実行結果は以下の通り。「Completed successfully」が表示されれば問題なく完了となる。

> .\ovftool -ds=ssd_local_02 -dm=thin C:\work\vm\testvm\testvm.ovf vi://root:PASSWORD@192.168.33.12/
Opening OVF source: C:\work\vm\testvm\testvm.ovf
The manifest validates
Accept SSL fingerprint (4B:D1:B2:D7:12:C0:BA:C5:62:07:9F:6A:87:79:2A:F8:EC:A7:67:82) for host 192.168.33.12 as target type.
Fingerprint will be added to the known host file
Write 'yes' or 'no'
yes   ←★初回のみ確認があるため「yes」を入力
Opening VI target: vi://root@192.168.33.12:443/
Deploying to VI: vi://root@192.168.33.12:443/
Disk progress: 9%   ←★これは0から100%まできっちり進捗する
Transfer Completed
Completed successfully

5 件のコメント:

  1. 大変わかりやすく、勉強になりました!ありがとうございます!

    返信削除
  2. 初めて使いましたが、メモがとてもわかりやすくて助かりました。

    返信削除
    返信
    1. ありがとうございます。お役に立ててよかったです。

      削除
  3. サーバ交換に伴う仮想マシンの移動で役に立ちました。ありがとうございました。
    ちなみに、「インポート」の解説にある「~シックプロビジョニングに変更が必要な場合は-dm=thinを~」とあるのは、「~シンプロビジョニング~」の間違いではないですか?

    返信削除

人気の投稿