KVMのクローンを利用して新規仮想マシンを作成する

KVM で仮想マシンを作成する場合、管理ツールを利用して新規に仮想マシンを作成する事が可能ですが、既に作成済みの仮想マシンのコピーから新規仮想マシンを作成する事も可能です。
この手順に関して説明します。

はじめに

こんにちは。ゾンビネタが尽きてきた須田です ( 今回も 写真素材ぱくたそ 様から ゾンビ写真素材 を頂きました )。

KVMゲストを新規に作成する場合、仮想マシンの作成 に従って新たに作成してもよいですが、この場合はOSのインストールから行う必要があり、時間も手間もかかります。

必須パッケージ群をインストールし、必要な設定を行った仮想マシン ( イメージファイル ) を用意しておき、このイメージからクローンを作成し設定を変更する方が、時間がかからず、必須パッケージのインストールや設定の漏れもありません。

ここでは既存仮想マシンのクローニングによって、仮想マシンを新規作成する手順を示します。

※弊社では社内サーバとしてCentOSを利用する事が多いので、CentOSのベースとなる仮想マシンを作成してあります ( 必須のセキュリティ設定等がなされている )。
CentOSベースの新たな仮想マシンを作成する場合、この仮想マシンをクローニングして新規仮想サーバを作成・利用するようにしています。

環境

環境に関しては前回記事と同様です。
クローニングを行う仮想マシンのOSは CentOS6 です。

OS CentOS 6.5
仮想マシンのOS CentOS 6
仮想マシンマネージャ
( virt-manager )
virt-manager-0.9.0-19.el6
 

手順

今回はコマンドラインから実行する場合の方法を書きます。

クローンの作成

  1. 仮想マシンの状態を確認します。
    $ sudo virsh list --all
    

    仮想マシンの一覧が表示されるので、コピー元の状態が "シャットオフ" である事を確認します。
    もし、"実行中" であった場合、以下コマンドで停止します。

    $ sudo virsh shutdown <仮想マシン名>
    

    停止したかどうかは、上記 list コマンドで確認してください。

  2. 既存の仮想マシンのクローンを作成する。
    仮想マシンのバックアップ に書いたのと同じ手順で可能ですが、コマンドラインでは以下のようにします。

    ※CentOS では仮想マシンのイメージファイルは /var/lib/libvirt/images/ ディレクトリに置かれるのがデフォルトのため、ここにイメージファイルを作成するものとしています。

    $ sudo virt-clone --original <コピー元仮想マシン名> --name <コピー先仮想マシン名> --file /var/lib/libvirt/images/<イメージファイル名>
    

MACアドレスの確認

  1. クローンが作成されたか確認します。
    $ sudo virsh list --all
    

    クローン作成時に指定した コピー先仮想マシン名 がリストされているはずです。

  2. 作成されたクローンのMACアドレスを確認します。
    $ sudo virsh dumpxml <仮想マシン名> | grep mac
        <type arch='x86_64' machine='rhel6.5.0'>hvm</type>
          <mac address='xx:xx:xx:xx:xx:xx'/>
    

    上記 xx 部分には実際に割り当てられたMACアドレスが表示されるので、この値を控えておきます。

仮想マシンマネージャーを利用する場合、以下で確認できます。

  1. 仮想マシンマネージャに作成した仮想マシン名が表示されるので、作成された仮想マシンをダブルクリックして開く。
  2. 仮想マシンの情報を表示する(メニューの "i" のアイコンをクリックする)。
  3. NICをクリックし、MACアドレスの値を控えておく。
    KVM 仮想ネットワークインターフェース 設定

仮想マシンのネットワークの設定変更

新たに作成した仮想マシンのネットワーク設定を変更します。
これを適切に行っておかないと、ネットワークが起動しなかったり、コピー元の仮想マシンとアドレスがぶつかったりといった問題が発生します。

  1. クローン ( コピー先の仮想マシン ) を起動し、ログインする。
    当然ですが、コピー元と同じアカウント設定がされているので、コピー元と同じアカウント/パスワードにてログインできます。
  2. udev設定が変更されているので、以下ファイルを開き編集する。
    $ sudo vi /etc/udev/rules.d/70-persistent-net.rules
    

    控えたMACアドレスに対応する設定が追加されているので、このデバイス名をeth0にし、(コピー)元のMACアドレスに対する設定は削除する。

    以下例 (抜粋)。XX:XX:... 部分がクローン先ゲストのMACアドレス

    # PCI device 0x1af4:0x1000 (virtio-pci)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="XX:XX:XX:XX:XX:XX", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
  3. eth0 の設定がコピー元の設定のままになっているのでこちらも併せて変更する。
    $ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    HDADDR= で指定されているMACアドレスを先に控えたものに変更する。
    このときIPアドレス等も新たなホスト用に設定を変更してください。

    以下例

    DEVICE=eth0
    HWADDR=XX:XX:XX:XX:XX:XX # クローン先のMACアドレス
    TYPE=Ethernet
    ONBOOT=yes
    # NM_CONTROLLED=yes
    BOOTPROTO=static
    IPADDR=192.168.1.xx  # クローン先用のIP
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    GATEWAY=192.168.1.1
    DNS1=192.168.1.1
    
  4. ホスト名、ドメイン名を設定します。
    その他の設定も必要に合わせて設定を行います。
    $ sudo vi /etc/sysconfig/network
    
    以下は編集例
    NETWORKING=yes
    HOSTNAME=xxx.agilegroup.local
    DOMAIN=agilegroup.local
    DNS1=192.168.1.1
    DNS2=192.168.1.2
    
  5. hosts ファイルを設定します。
    $ sudo vi /etc/hosts
    
    以下は一例
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    192.168.1.xx   xxx xxx.agilegroup.local
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
  6. クローンを再起動します。
  7. $ sudo reboot
    

    再起動無しで変更を適用する場合は以下で

    1. udevルールの変更を適用
      $ sudo udevadm control --reload-rules
      $ sudo udevadm trigger
      
    2. network の再起動
      $ sudo /etc/rc.d/init.d/network restart
      

確認

クローンが再起動したら、設定した内容でネットワークが起動しているか確認します。

$ ifconfig eth0

再起動後ネットワーク設定が正しく行われているかどうか、他ホストから接続可能かどうかを確認してください。
ネットワーク設定が正しく行われた後は、新たなホスト用に必要な設定を行います。

まとめ

特に以下のような場合には、今回の手順が威力を発揮すると思います。

  • 同じ環境を複数用意しなければならない
    テスト環境等を複数のメンバやチームに用意しなければならない場合等
  • OSインストール後にインストール・設定が必要なものが多い環境を構築しなければならない
    「"○○" ( ブログやCMS等 ) がすぐに使える」といった環境を用意したい場合
  • スペアサーバの立ち上げ

新規仮想マシンを立ち上げる場合以外でも、仮想マシンのイメージは適当なタイミングでクローン ( バックアップ ) を作成しておくのをお勧めします。

特に何らかの作業を行う前に、クローンを作成しておくことで、作業ミスによって復旧が難しい状態に仮想マシンが陥ったとしても、作業前の状態に戻す事は比較的楽に行えます。

様々な検証を行う場合でも、すぐにクローンを使って前の環境に戻せるというのは物理サーバを利用するよりも格段にやり易いです。

このあたりのメリットを享受するために仮想化ソリューションを使うのもよいのではないでしょうか。