Proxmox上のOpenVZ仮想マシンのバックアップ


Proxmox VEにはOpenVZ仮想マシンのバックアップを容易に取れるように、専用ツールvzdumpが用意されている。
このvzdumpは、OpenVZのwikiにも掲載されているぐらいの便利ツールのようです。

vzdumpでバックアップを行うと、各仮想マシンごとにtarファイルができあがります。

さて、このバックアップファイルを、Proxmoxサーバ内部に残しておくとバックアップの意味がないので、外部サーバに転送しましょう。
NFSでマウントした先にコピーというのが一番簡単なやりかたですが、安いNASだとNFSに対応していない場合があります。

まぁ、具体的にはLinkStationをバックアップ先にしたいです。
この場合、CIFS、ftp、そして、rsync(LinkStationは「バックアップ」と呼ばれている)で転送することができますが、無難なあたりでftpで転送する、とします。

そんなスクリプトを作りました

仕様
・ftpサーバに指定ユーザ・パスワードでログインする
・バックアップは10世代保存とする。
・起動中の仮想マシンのみバックアップする
・Proxmoxサーバ内にバックアップイメージを作成するが、容量が少なく済むように1個ずつ実施する
・lftpを使ってアップロードするので、「aptitude install lftp」でインストールしておく

#!/bin/bash
# vzdump and ftp upload script
#
DUMPDIR="/work"
UPLOADDIR="/disk1/backup/dump"

FTPHOST="IPアドレス"
FTPUSER="ユーザ名"
FTPPASSWORD="パスワード"

cd $DUMPDIR
vzlist > vzlist.log

# create upload directory
lftp -c "open -u $FTPUSER,$FTPPASSWORD $FTPHOST
mkdir $UPLOADDIR/transfer"


# dump and upload virtual machine
# "vzlist -1" : dump active VM only
# "vzlist -a -1": dump all VM
# "vzlist -S -1": dump standby VM only
for hostid in `vzlist -1`
do
	echo $hostid;
	cd $DUMPDIR
	vzdump --dumpdir $DUMPDIR $hostid
	lftp -c "open -u $FTPUSER,$FTPPASSWORD $FTPHOST
cd $UPLOADDIR/transfer
mput -E *.tar *.log"
done

# lotate
lftp -c "open -u $FTPUSER,$FTPPASSWORD $FTPHOST
cd $UPLOADDIR
rm -r daily.9
mv daily.8 daily.9
mv daily.7 daily.8
mv daily.6 daily.7
mv daily.5 daily.6
mv daily.4 daily.5
mv daily.3 daily.4
mv daily.2 daily.3
mv daily.1 daily.2
mv daily.0 daily.1
mv transfer daily.0"

上記スクリプトは毎日夜間に実行するつもりのものなので、NetAppライクに「daily.数字」という感じでディレクトリを作成しています。

Proxmox Virtual EnvironmentでOpenVZのテンプレートが出てこない


Proxmox Virtual Environment(PVE) 1.7を使用中。

PVEはDebianベースでOpenVZとKVMによる仮想化を実現するアプライアンスを作るディストリビューション。
管理はCLIもしくはWeb。
複数のPVEサーバをある程度統合管理が可能。

最初はCitrix XenServerでやろうかな?と思っていたんだけど、フル仮想化だとメモリを食うので、たくさんたてられるOpenVZを使えるこいつに目をつけてみた。

で、OpenVZ用のテンプレートが使えるかな?と思って、「/var/lib/vz/template/cache」にSabayonからダウンロードしたテンプレートファイル “Sabayon_Linux_SpinBase_5.4_x86_openvz.tar.gz”を配置してみた。
が、ProxmoxのWeb GUIの仮想マシン作成メニューで表示されない。

う~ん・・・とファイルを見比べてみる。

# ls /var/lib/vz/template/cache
Sabayon_Linux_SpinBase_5.4_x86_openvz.tar.gz
centos-4-default_4.8-20100922_i386.tar.gz
centos-5-standard_5.2-1_i386.tar.gz
debian-5.0-wordpress_2.9-1_i386.tar.gz
ubuntu-10.04-lamp_10.04_i386.tar.gz
#

ファイル名の法則が違う?

というわけで、ファイル名を「sabayon-5-SpinBase_5.4-1_i386.tar.gz」に変更してみた。
無事認識。

で、Sabayon 5.4のOpenVZを作成して起動してみたんですが・・・ネットワークインタフェースを認識していない・・・
なんでかなぁ???う~ん・・・・

# vzctl start マシンID
Warning: configuration file for distribution sabayon-5-SpinBase_5.4-1_i386 not found, using defaults from /etc/vz/dists/default
Starting container ...
Container is unmounted
Container is mounted
Adding IP address(es): IPアドレス
/bin/bash: line 394: /etc/network/interfaces: No such file or directory
grep: /etc/network/interfaces: No such file or directory
/bin/bash: line 407: /etc/network/interfaces: No such file or directory
/bin/bash: line 429: /etc/network/interfaces: No such file or directory
cp: cannot stat `/etc/network/interfaces': No such file or directory
/bin/bash: line 458: /etc/network/interfaces.bak: No such file or directory
mv: cannot stat `/etc/network/interfaces.bak': No such file or directory
Setting CPU units: 1000
Setting CPUs: 1
Set hostname: ホスト名
File resolv.conf was modified
Setting quota ugidlimit: 0
Container start in progress...
#

なるほど、起動時に読み込むテンプレートが適切じゃないせいなのね。

OpenVZのフォーラムで参考記事を発見。

/etc/vz/conf/各マシンID.conf 内の「OSTEMPLATE=”sabayon-5-SpinBase_5.4-1_i386″」が関係してると。
テンプレート自体は/etc/vz/distsにあるので、Sabayonに近いものは?と見てみると、ありました「gentoo.conf」(SabayonはGentooベースなのです)
てっとりばやく「ln gentoo.conf sabayon-5-SpinBase_5.4-1_i386.conf」を実行してから、起動!

# ln gentoo.conf sabayon-5-SpinBase_5.4-1_i386.conf
# vzctl start マシンID
Starting container ...
Container is mounted
Adding IP address(es): IPアドレス
Setting CPU units: 1000
Setting CPUs: 1
Set hostname: ホスト名
File resolv.conf was modified
Setting quota ugidlimit: 0
Container start in progress...
# 

これで、無事、ネットワーク接続も完了です。