株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

OVF形式のVMテンプレートを手動展開する

Oracle VMの利点の1つに構成済みのVMテンプレートがOracleより多数配布されていることがあります。

従来、VMテンプレートは、vm.cfgと仮想ディスクイメージ(*.img)をtar+gzで圧縮したシンプルな形式のファイルで配布されていました。しかし、最近はOVFフォーマットと呼ばれる形式のファイルで配布されているようです。
OVFフォーマットの形式については、
OVF(Open Virtualization Format)の概要
にて説明があります。

OVFフォーマットのVMテンプレートをOracle VMで使用する場合、通常Oracle VM Managerの機能を用いてインポートします。この方法を用いる場合、ユーザーがVMテンプレートの形式の違いを意識する必要はありません。

しかし、いくつかの理由でOracle VM Managerの機能を用いてインポートしたくなかったため、手動でOVFテンプレートをVMとして使用できるように展開しました。

手順は以下のとおりです。

1. OVF形式のVMテンプレートをダウンロードする

Oracle Software Delivery Cloud - Oracle Linux and Oracle VM
https://edelivery.oracle.com/linux
よりOVF形式のVMテンプレートをダウンロードします。
ここでは、Oracle Linux 6 Update 3 template (OVF) - Paravirtualized x86_64 (64 bit) V35123-01.zipをダウンロードしました。

2. ダウンロードしたファイルをzip展開する

ダウンロードしたzipファイル V35123-01.zip をunzipコマンドで展開し、OVAパッケージを取得します。
OVAパッケージはtarでアーカイブするよう規格上定められています。

[root@csov3m01 OEL63_x64_PVM]# unzip V35123-01.zip
Archive:  V35123-01.zip
  inflating: OVM_OL6U3_x86_64_PVM.ova
[root@csov3m01 OEL63_x64_PVM]# file OVM_OL6U3_x86_64_PVM.ova
OVM_OL6U3_x86_64_PVM.ova: tar archive

3. OVAパッケージの構成ファイルを取得する

OVAパッケージをtarコマンドで展開します。

[root@csov3m01 OEL63_x64_PVM]# tar xfv OVM_OL6U3_x86_64_PVM.ova
OVM_OL6U3_x86_64_PVM.ovf
OVM_OL6U3_x86_64_PVM.mf
System.img
[root@csov3m01 OEL63_x64_PVM]# file OVM_OL6U3_x86_64_PVM.ovf
OVM_OL6U3_x86_64_PVM.ovf: XML 1.0 document text
[root@csov3m01 OEL63_x64_PVM]# file OVM_OL6U3_x86_64_PVM.mf
OVM_OL6U3_x86_64_PVM.mf: ASCII text
[root@csov3m01 OEL63_x64_PVM]# file System.img
System.img: gzip compressed data, was "System.img", from Unix, last modified: Wed Oct 10 06:04:37 2012

4. 仮想ディスクをgzip展開する


理由や背景は不明ですが、仮想ディスクに対応するファイル(以下仮想ディスクファイルと表記) System.imgは、上記のfileコマンドの出力結果の通り、gzipで圧縮されていました。このため、gunzipで解凍します。

[root@csov3m01 OEL63_x64_PVM]# gunzip System.img
gunzip: System.img: unknown suffix -- ignored
[root@csov3m01 OEL63_x64_PVM]# mv System.img System.img.gz
[root@csov3m01 OEL63_x64_PVM]# gunzip System.img.gz
[root@csov3m01 OEL63_x64_PVM]# file System.img
System.img: x86 boot sector, GRand Unified Bootloader (0.94); partition 1: ID=0x83, active, starthead 0, startsector 2048, 208896 sectors; partition 2: ID=0x83, starthead 0, startsector 210944, 20760576 sectors; partition 3: ID=0x82, starthead 63, startsector 20971520, 4194304 sectors, code offset 0x48

gunzipコマンドは拡張子を選ぶようなので、一旦拡張子をgzに変更してから解凍しています。

5. vm.cfgを作成する


*.ovfファイルや構成が類似した既存のVMのvm.cfgを参考にして、vm.cfgを作成します。
vm.cfgはparam=value形式のテキスト設定ファイルであるため、設定すべき内容さえわかれば、容易にテキストエディタで作成できます。

弊社の環境では、以下のようなvm.cfgファイルを作成しました。

[root@csov3s01 l63x64]# cat vm.cfg
bootloader = '/usr/bin/pygrub'
disk = ['file:/OVS/2/Unmanaged/vm_single/l63x64/System.img,xvda,w',
]
memory = '4096'
name = 'l63x64'
vcpus = 2
on_crash = 'restart'
on_reboot = 'restart'
vfb = ['type=vnc,vncunused=0,vnclisten=0.0.0.0,vncdisplay=135']
vif = ['bridge=192.168.15.0, mac=00:21:f6:FE:87:00, type=netfront']

vm.cfgファイルの書式については、以下のページが参考になります。

6. 仮想ディスクファイルをsparseファイル化する(オプション)

この時点で得られている仮想ディスクファイルは、sparse化されていないため、ファイルサイズと同じディスク領域が割り当てられています。

[root@csov3m01 OEL63_x64_PVM]# ls -ls System.img
12595216 -rw-r--r-- 1 root root 12884901888 10月 11 05:21 System.img
 ※:12595216 * 1024 = 12897501184 ≒ 12884901888 

ディスク領域の消費量を削減するため、仮想ディスクファイルをsparse化します(Thin Provisioning)。

[root@csov3m01 OEL63_x64_PVM]# mv System.img System.img.orig
[root@csov3m01 OEL63_x64_PVM]# cp --sparse=always System.img.orig System.img
[root@csov3m01 OEL63_x64_PVM]# ls -ls System.img*
 1774692 -rw-r--r-- 1 root root 12884901888 11月 19 21:45 System.img
12595216 -rw-r--r-- 1 root root 12884901888 10月 11 05:21 System.img.orig
 ※:12595216 * 1024 = 12897501184 ≒ 12884901888 

ファイルをsparse化したまま解凍するオプションがgunzipにあればよいのですが、残念ながらこのようなオプションは無いようです。このため、gunzipを実行して大きなサイズのファイルを作成してから、その大きなサイズのファイルをsparse化する手段をとるほか無いようです。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ