<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Whimsical Kitteeeeen &#187; backup</title>
	<atom:link href="http://www.witkitty.com/wordpress/tag/backup/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.witkitty.com/wordpress</link>
	<description>日々繰り返される失敗談と、その失敗を冷ややかな眼差しで見守る気まぐれ猫たちの近況・・・</description>
	<lastBuildDate>Thu, 02 Feb 2012 07:32:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/tag/backup/feed/" />
		<item>
		<title>仮想ゲストOSバックアップ～cron登録～</title>
		<link>http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/</link>
		<comments>http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 16:51:45 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[VMware ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://www.witkitty.com/wordpress/?p=136</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/" title=" 仮想ゲストOSバックアップ～cron登録～"></a>以前「仮想ゲストOSバックアップ～スクリプト編～」で、ゲストOSをバックアップするためのスクリプトを稚拙ながら書きましたが、今回はそのスクリプトをESXiのcronに登録してみます。 やっていることは、 スクリプトをパス &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/" title=" 仮想ゲストOSバックアップ～cron登録～"></a><p style="padding-left: 30px;">以前「<a rel="nofollow" href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/">仮想ゲストOSバックアップ～スクリプト編～</a>」で、ゲストOSをバックアップするためのスクリプトを稚拙ながら書きましたが、今回はそのスクリプトをESXiのcronに登録してみます。<br />
やっていることは、</p>
<ul style="padding-left: 30px;">
<li>スクリプトをパスの通ったところにリンクを張る</li>
<li>cron設定ファイルに登録する</li>
</ul>
<p style="padding-left: 30px;">の２点です。どちらもrc.localに書き込むのですが、これは/sbinに実際のスクリプトファイルを置いても、ESXiサーバを再起動すると、デフォルトのファイルに戻されるため、せっかく置いたファイルが消えてしまいます。また、cron設定ファイルも同様に、再起動するとデフォルト設定に戻るので、どちらとも起動時に再配置・再設定するようにするわけです。では、rc.localはというと、</p>
<div style="padding-left: 30px;">
<pre>
#! /bin/ash
export PATH=/sbin:/bin

log() {
echo &quot;$1&quot;
logger init &quot;$1&quot;
}

#execute all service retgistered in /etc/rc.local.d
if [ -d /etc/rc.local.d ]; then
for filename in `find /etc/rc.local.d/`
do
if [ -f $filename ] &amp;&amp; [ -x $filename ]; then
log &quot;running $filename&quot;
$filename
fi
done
fi
### ここまでがデフォルト内容です
### 今回以下に追加しました
### スクリプト実体のシンボリックリンクを/sbinに作ります
ln -s /vmfs/volumes/datastore1/hotbackup.sh /sbin/hotbackup.sh

### cron設定ファイルに書き込み、cronデーモンを再起動します
cat&lt;&lt;_EOT_&gt;&gt;/var/spool/cron/crontabs/root
0 3 * * * /sbin/hotbackup.sh witkitty &gt; /dev/null
_EOT_
kill -sigterm `ps|awk &#039;/[c]rond/ {print $1;}&#039;`
crond
</pre>
</div>
<p style="padding-left: 30px;">cronの再設定にはヒア・ドキュメントを使うと、ファイルに直接書き込むようなイメージで仕込むことが出来るので便利です。再起動をまだしませんよ～という方は、リンク作成とcron設定ファイルを直接編集して、cronデーモンを再起動してください。<br />
さぁ、これでESXiサーバ時間の午前3時にこのサイトのゲストOSのホットバックアップが開始されるはずです。ちなみに当方のESXiの時間は米国中部のままの設定なので、日本からだと-15時間の時差があります。よって、時間だけで言えば、いきなり日本時間の昼の12時に開始されるわけです。</p>
<p style="padding-left: 60px;">
<strong>注記：</strong><span style="color: #888888;">バックアップスクリプトのGIDチェック部分で取得GIDが正常でも直前の実行ステータスが０で帰ってくるため、バックアップ処理が中断される現象が出ました。よってスクリプト側の修正も施されていますので、<a rel="nofollow" href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/">過去記事</a>を参照してくださいな。</span></p>
<p style="padding-left: 30px;">
さて、これで無事上書き自動バックアップが出来るようになりましたとさ。<br />
あとは、リストア用のスクリプトと、バックアップローテーションをどうするかですな・・・ポツポツ合間を見つけて書いてみます。<br />
ではでは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/" />
	</item>
		<item>
		<title>仮想ゲストOSバックアップ～スクリプト編～</title>
		<link>http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/</link>
		<comments>http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 22:23:53 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[VMware ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[monosparse]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[vmkfstools]]></category>
		<category><![CDATA[スクリプト]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://www.witkitty.com/wordpress/?p=128</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/" title="仮想ゲストOSバックアップ～スクリプト編～"></a>以前、仮想ゲストOSのバックアップについて、簡単に書きましたが、当方の環境もここまでESXi密度が高いと、「もしも・・・」の時に涙ちょちょ切れ～ってことになるので、スナップショットとクローン作成を利用したバックアップ作成 &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/" title="仮想ゲストOSバックアップ～スクリプト編～"></a><p style="padding-left: 30px;">以前、<a rel="nofollow" href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/">仮想ゲストOSのバックアップ</a>について、簡単に書きましたが、当方の環境もここまでESXi密度が高いと、「もしも・・・」の時に涙ちょちょ切れ～ってことになるので、スナップショットとクローン作成を利用したバックアップ作成スクリプトを作ってみました。お役に立てれば・・・<br />
当方の環境は、バックアップ用ボリュームがESXi上にnfsマウントされており、以下のスクリプトはそこに作成されるような仕組みになっていますので、環境に合わせて変数内容を変えてください。尚、このスクリプトを作成するにあたり、「<a href="http://akionweb.com/archives/2009/04/esxi.shtml">AKIONWEB</a>」さんのところを参考に作ってみましたが、動作結果については自己責任と言うことで。<br />
では、まず環境条件から・・・といっても上に書いたように、</p>
<div style="padding-left: 30px;">
<ul>
<li> ESXiからバックアップボリュームが見えていること</li>
<li>引数としてはゲスト名だけを使用する</li>
<li>バックアップは上書きでも良しとすること</li>
</ul>
</div>
<p style="padding-left: 30px;">
だけです。<br />
では、続きと簡単な解説は、続きでどうぞ。（かなり長いです・・・が、やっていることは大したことないです）<br />
追記：07/11 追加・修正部分あり
</p>
<p><span id="more-128"></span></p>
<div style="padding-left: 30px;">
<pre>
#!/bin/ash

###	But I'm sorry, follows comments are Japanese-English, you may not understand it.
###	This script does backup without rotate.

###
#	Input
#	$1 : Guest name
#
#	Internal variable
#	$gname	: Guest name
#	$gid	: Guest ID
#	$store	: Gust datastore name
#	$gdir	: Gust datastore directory
#	$bdate	: Backup date
#	$bbase	: Backup base directory(/vmfs/volumes/esx01-backup/)
#	$bdir	: Backup directory
#
#	07/05/2009 by hiro
#	07/07/2009 add and fix by hiro
###

###-----
#	wait current snapshot creation work
#
check_running_task (){
for i in `vim-cmd vimsvc/task_list | grep vim.Task:haTask-$1 | grep $2 | sed -e 's/.*vim.Task://' -e "s/[', ]//g"`; do
if [ "`vim-cmd vimsvc/task_info $i | grep running`" != "" ] ; then
	return 0
fi
done
return 1
}
#
###-----

###=======================
#
#	Start main
#
###=======================

# the backup root directory
bbase="/vmfs/volumes/esx01-backup/"

#bdate=`date +%Y%m%d`
#echo $bdate

# the Guest name and get the Guest ID
# -------------------------------------------------------- 07/07/2009 added by hiro
#   Check parameter
if test -z $1
then
        exit 1
fi
gname=$1
gid=`vim-cmd vmsvc/getallvms | grep $gname | awk '{ print $1 }'`
# -------------------------------------------------------- 07/07/2009 fixed by hiro
#   Changed how to check GID
# if [ $? -eq 0 ]; then
if test -z $gid
then
	echo "Error : Guest - "$gname" did not exist."
	exit 0
fi

# take store location of the Guest and set full directory path of the Guest VM files
store=`vim-cmd vmsvc/getallvms | grep $gname | sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }'`
gdir="/vmfs/volumes/"$store"/"$gname"/"

# set backup directory path
bdir=$bbase$gname"/"
if test ! -d $bdir
then
	mkdir $bdir
else
	echo "Already exist backup file."
fi

###-----
#	Start backup
#
#---(Part.1)	copy VM managed information files, you have to copy these informations before make a clone.
#
cp $gdir$gname".vmx" $bdir
cp $gdir$gname".vmxf" $bdir
cp $gdir$gname".vmsd" $bdir
#
#---(Part.2)	take a snapshot
#
vim-cmd vmsvc/snapshot.create $gid $gname
if [ $? -ne 0 ]; then
	echo Snapshot create error.;
	exit;
fi
while check_running_task $gid createSnapshot; do sleep 1; done
#
#---(Part.3)	cloning with monosparse, if you want flat image, remove option.
#
vmkfstools -i $gdir$gname".vmdk" -d monosparse $bdir$gname".vmdk"
if [ $? -ne 0 ]; then
	echo "Error : cloning failed. your backup process did not complete."
	exit 0
fi
#
#---(Part.4)	remove a snapshot
#
vim-cmd vmsvc/snapshot.removeall $gid
#
#	Backup finished

echo "Congratulations!  Guest-"$gname" : backup completely successed."
exit 0
#
###-----
</pre>
</div>
<div style="padding-left: 30px;">
<ol>
<li>まず、23～30行目の関数について<br />
ここは、このスクリプトを何度も叩くと、スナップショット（や解放）がその回数分叩かれることになり、あまりESXiに優しくないので、もし前の処理が残っていたのならば、まだ終わっていない事を関知し、通知する関数です。</li>
<li>41行目の変数について<br />
この変数は、バックアップが保存される親のディレクトリを指します。このディレクトリの後に、ゲスト名がついたディレクトリが実際のバックアップ先（59行目）になります。</li>
<li>47～52行目<br />
ここでは、引数で渡されたゲスト名を保存し、またこのゲスト名を利用してIDリストから該当のID番号を取得しています。コマンド「vim-cmd vmsvc/getallvms」を叩くと、登録されているゲストの一覧が出力されます。以下が実際の出力例。</p>
<pre>
# vim-cmd vmsvc/getallvms
Vmid      Name                       File                          Guest OS          Version   Annotation
528    witkitty     [datastore1] witkitty/witkitty.vmx       otherLinuxGuest         vmx-04
544    VpnSrv       [datastore1] VpnSrv/VpnSrv.vmx           otherLinuxGuest         vmx-04
592    clone        [datastore1] clone/clone.vmx             otherLinuxGuest         vmx-04
</pre>
<p>この中に該当するゲストのIDが先頭にありますので、ゲスト名でgrepし、IDをawkコマンドで引っぱがします。（次の項でに3番目にあるFile項の中のdatastore?も引っぱがすことになります）ここで、該当ゲスト名が無ければエラーでスクリプトが終了します。</li>
<li>55～57行目<br />
ここでは、ゲストファイルの配置情報を取得します。当方のESXiは、ディスクドライブが複数あり、そのうちのいくつかがdatastoreとして登録されています。よって、ゲストによっては同一ESXi上であっても配置されているdatastoreが異なります。1つしかない環境の場合は、後で示すバックアップ元ディレクトリ変数の中で固定していいと思います。</li>
<li>59～65行目<br />
ここで、バックアップ先ロケーションを決定しています。決定されたディレクトリがあるかチェックしていますが、必要無いような気もしますが、後でバックアップの世代管理もやってみようと画策しているので、その時のためのものです。</li>
<li>72～74行目<br />
ここから実際のバックアップ処理（クローン作成）が始まります。まず、ゲストの管理ファイルをコピーします。<a href="http://akionweb.com/archives/2009/04/esxi.shtml">AKIONWEB</a>が仰るには、これを先にしておかないと、後でファイルを編集する必要があるとのことでしたので、そのまま掲載させてもらいました。</li>
<li>78～83行目<br />
ここでスナップショットを取得します。この処理で後述の仮想実体ファイルへのアクセスが可能になります。で、ここで指定のスナップショットが行われたかどうかを冒頭の関数でチェックし、スナップショットが始まったら、実体ファイルの処理に移ります。</li>
<li>87～91行目<br />
ここで、vmkfstoolsコマンドを利用して実体ファイルをクローニングします。当方はmonosparseオプションを利用してバックアップ先のファイルを小さくしていますが、ボリュームサイズが潤沢の方は素のままでもいいのではないかと思います。これはリストアの時に関係していて、小さくした場合、ESXiはその小さいままのファイルを扱うことが出来ず、元の大きなファイルに戻してあげる作業が必要になります。</li>
<li>95行目<br />
さて、そろそろ終わりですね。クローニングが完了したら、スナップショットを解放してあげます。</li>
</ol>
</div>
<p style="padding-left: 30px;">これで、晴れて半自動でのゲストOSのバックアップが可能になりました。あとは、cronに任せることと、バックアップの世代管理機能、リストアスクリプトを組み込めれば安心して眠れます。この辺はまた後で書ければいいかなと・・・（何かいつも最後に自分で宿題作っているような・・・）<br />
試しにこのスクリプトでバックアップし、手動でリストアを行ってみましたが、無事ゲストOSがバックアップ前の状態で稼働しました。（何度も言いますが自己責任で・・・しつこいって）<br />
ではでは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/" />
	</item>
		<item>
		<title>仮想ゲストOSのバックアップ</title>
		<link>http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/</link>
		<comments>http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 04:52:51 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[VMware ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://witkitty.com/wordpress/?p=79</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/" title="仮想ゲストOSのバックアップ"></a>このサイトが動いているサーバはVMware ESXi上のLinux OSで動いている。 仕事柄、ある製品のサポートもしているのだが、再現確認が必要な場合、今までは実機を使用して動作確認・解析を行っていた。この場合、複数の &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/" title="仮想ゲストOSのバックアップ"></a><p style="padding-left: 30px;">このサイトが動いているサーバは<a href="http://www.vmware.com/jp/products/esxi/">VMware ESXi</a>上のLinux OSで動いている。<br />
仕事柄、ある製品のサポートもしているのだが、再現確認が必要な場合、今までは実機を使用して動作確認・解析を行っていた。この場合、複数のお客さんの疑似環境を作る必要に迫られたときが大変。当然スケジュールを組んで進めていくのだが、OSが異なったりすると毎回実機にOSをインストールする羽目に。一部、クライアントで動くVMwareも使用していたのだが、何せサーバ関連のサポートなので、必ず複数台必要となり、クライアントを圧迫。そんな矢先、これが出てきたので飛びついた。しかも、ESXiは無償！なのでSOHOな当方には助かる。（当然企業ユースには高機能版が販売されています）<br />
前置きが長くなったが、ESXiを使っていて一番困るのが、「ゲストOSのバックアップ」である。ゲストOSを止めてバックアップ（コールドバックアップ）するのであれば、別段問題は無いのだが、サーバ絡みなので動作中でもバックアップを取る必要がある。しかし、VMware Consolidated Backup（VCB）は有償・・・。ならば、コマンドで何とかしてしまえと言うことで、以下に手順を。</p>
<div style="padding-left: 30px;">
<ul>
<li>ゲストOSのIDを取得
<pre>~ # vim-cmd vmsvc/getallvms</pre>
</li>
<li>バックアップしたいゲストOSのスナップショットを採取
<pre>~ # vim-cmd vmsvc/snapshot.create [ゲストOSのID] [スナップショット名]</pre>
<p>このスナップショットを取ることにより、本来読み込みまでロックされている.vmdkファイルのコピーが可能になります。</li>
<li>ファイルのコピー<br />
コピー方法は、環境によりけりなので、いくつか例を。</p>
<li>ESXiサーバに外部ディスクを直接アタッチしている場合は、そのマウントしているボリュームにコピーすればOK。ちなみに当方は、別のLinuxサーバボリュームをネットワークマウントしているので、そこにコピーしています。</li>
<li>外部のWindowsやNASに転送する場合は、<a href="http://www.tab2.jp/~winscp/">WinSCP（日本語版）</a>なんかを使ってネットワークコピーすればOK。</li>
<li>コピーが終わったら、スナップショットを解放。
<pre>~ # vim-cmd vmsvc/snapshot.removeall [ゲストOSのID]</pre>
</li>
</ul>
</div>
<p style="padding-left: 30px;">もし、元が壊れてこのバックアップから起動したい場合は、ゲストOS名-xxxxx.vmdkの「-xxxxx」を取り除いて起動してあげれば立ち上がります。</p>
<p style="padding-left: 30px;">まぁ、あくまで私の環境での覚え書き程度ですので、先人の方々のサイトを見た方がためになると思い・・・(ry</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/" />
	</item>
	</channel>
</rss>

