vmware-netcfg とゲストOSのフルバックアップ

※実際は11/6のネタです。

ホストOS Debian からの vmware-netcfg とゲストOSのフルバックアップ

■vmplayerの再インストールを行ったり、CPU等のハードウエアの要件が同じ
 移行可能な別のマシンにコピーした場合、vmnetアダプタの変更が必要となる。
 ホストOSがLennyでも同じ方法で移行出来る。

 私の場合、各スペックが同等なミラー型の物理サーバ(コールドスタンバイ)
 を用意している為、この手順は必須だったりする。。。

■vmnetcfg.exeのlinux版のコマンドの場所
 ※「appLoader」のシンボリックリンクになっている。

$ ls -l /usr/lib/vmware/bin/vmware-netcfg
lrwxrwxrwx 1 root root 29 2011-11-06 01:26 /usr/lib/vmware/bin/vmware-netcfg -> /usr/lib/vmware/bin/appLoader

■以前のゲストOSのvmnetの設定を確認
 ※これが移行対象となる。

$ grep IP= /vmware/squeeze/vmware.log | grep vmnet | awk -F\| '{print $3}' | sed s/"[0-9][0-9]\."/XX\./g
I120: IP=1XX.1XX.XX.1 (vmnet1)
I120: IP=1XX.1XX.1XX.1 (vmnet8)

■ネットワークの設定を行い保存する

$ sudo /usr/lib/vmware/bin/vmware-netcfg
 ※GUI上で設定

■設定の確認1(ip addr)

$ ip addr | grep vmnet | grep inet | sed s/"[0-9][0-9]\."/XX\./g
inet 1XX.1XX.XX.1/24 brd 1XX.1XX.XX.255 scope global vmnet1
inet 1XX.1XX.1XX.1/24 brd 1XX.1XX.1XX.255 scope global vmnet8

■設定の確認2(ifconfig)

$ env LANG=C /sbin/ifconfig | grep vmnet -A 1 | grep inet | awk '{print $2}' | sed s/"[0-9][0-9]\."/XX\./g
addr:1XX.1XX.XX.1
addr:1XX.1XX.1XX.1

■初回はオーナー権限を再設定する必要があるので、GUIを使用して起動する

$ vmrun -T player start vmware/squeeze/squeeze.vmx

★この時点でホストOSからゲストOSに対して行う作業
 ・ゲストOSのIPアドレスへのping
 ・ssh接続確認
 ・vmplayerのゲストOS設定のデバイス確認
  ※以前の環境で削除したデバイス(プリンタ等)は新規で作られる
 ・ホストOSのhostsやDNSにゲストOSのホスト名、FQDNを登録、または確認

⇒なんらかの管理可能な方法で接続出来る事を確認する。
 例)RDP、telnet、ssh、VNC、XDMCP、...etc

■一旦サスペンドで終了後、noguiオプションでCUI起動する

$ vmrun -T player suspend vmware/squeeze/squeeze.vmx
$ vmrun -T player start vmware/squeeze/squeeze.vmx nogui

■DHCPの割り当て範囲を確認
 ※DHCPならこの範囲。逆にstaticなら、別の範囲を割り当てる。

$ grep range /etc/vmware/vmnet8/dhcpd/dhcpd.conf | sed s/"[0-9][0-9]\."/XX\./g
range 1XX.1XX.1XX.128 1XX.1XX.1XX.254;

■DHCPで割り当てられたのであれば、dhcpd.leasesにも記載される

$ grep -v ^# /etc/vmware/vmnet8/dhcpd/dhcpd.leases


□実際のバックアップ方法について、3つの例を挙げる。
 ※改行は見やすさの為

$ du -hs /bak.vmware/*

932M /bak.vmware/kfreesqueeze/
293M  /bak.vmware/kfreesqueeze-20111010_221256.tar.gz

1.4G /bak.vmware/squeeze/
546M /bak.vmware/squeeze-20111105_181222.tar.gz

1.3G /bak.vmware/sendmail/
516M /bak.vmware/sendmail-20111010_231023.tar.gz

■フルバックアップ方法その1

 単純なtar.gz。約1/3のサイズに収まる。

$ tar zcvf ${VMGUESTDIR}-`date '+%Y%m%d_%H%M%S'`.tar.gz ${VMGUESTDIR}


■フルバックアップ方法その2

 rsyncを使う。

 /vmware配下のゲストOSディレクトリのうち、
 /bak.vmware配下に(初回は空の)ゲストOS用のディレクトリがある場合に
 rsyncでミラー化する。

#!/bin/bash
for dirlist in /vmware/* ;do
test -d "$dirlist" && echo "$dirlist"
done | for baklist in `xargs`;do
TARGET=$(echo ${baklist} | sed s/'vmware'/'bak.vmware'/)
test -d "${baklist}" && echo "${baklist} to ..." && \
test -d "${TARGET}" && echo "${TARGET} rsync backup" && \
rsync -auv --delete "${baklist}/" "${TARGET}" --log-file="/bak.vmware/vmware.bak.log"
done

⇒ミラー化が不要なゲストOSは/bak.vmware配下に空のディレクトリを用意しなければよい。
 これはユニークな名前のゲストOSディレクトリであれば、
 別のLinuxサーバでも同じスクリプトが使える。

★イメージとしてtar.gzはフルバックアップ、
 rsyncは増分を当てた最新のフルバックアップ。
 よって、リストア時に「増分を戻す」事を気にする必要は無いが、
 バックアップ容量はフルバックアップと、増分を含むフルバック分x世代分必要になる。

⇒以下のようにrsyncの先は別サーバでもよい。

$ rsync -avz -e "ssh -p 22" /vmware username@other-server:/bak.vmware

■フルバックアップ方法その3
 ※どうしても増分バックアップ分は別にしてディスク容量を節約したい場合

 amanda仮想テープバックアップを使う。

 http://ameblo.jp/labunix/entry-10989532998.html

■まとめ

 crontabでtar.gz化やrsyncを自動化するだけで、
 ディスク容量が許す限りの世代分のバックアップが取得出来る。
 別メディアに移動するなり、古いバックアップを削除するなりの方法についてはここでは触れない。