トップページ»3.4.製品»VMware ESXiゲストのバックアップ方法を考えてみる

3.4.製品



VMware ESXiゲストのバックアップ方法を考えてみる

 大方ESXi環境への移行も済んだところで、そろそろバックアップをどうするか考えようと思い立つ。 やっぱりバックアップの体制は早めに作っておかないと不安だしね。

 で、まず過去を振り返ってみる。 自宅サーバーを運用し始めてからの約8年間、バックアップから戻した経験を思い出してみると、ファイルサーバーから単一のファイルを戻すことはほんの数回しかなく、トラブル時やハードウェアの入れ替え時にまるごとリストアすることの方が多かったように思う。

そんな現実も考えると仮想サーバーは本当にありがたい。 ゲストのイメージをバックアップしておけば、細かいことは考えなくても元通りの環境に戻せる。 という訳で今回はイメージだけバックアップすることに決めた。

で、方法。 ネットで調べると先人の方がESXiでのバックアップのヒントを示してくれている。

 

無償のVMware ESXiでホットバックアップを自動で実行する方法(のヒント)

http://blog.xe.bz/archives/51126645.html

 

なるほど。 スナップショットを取っておけばホットバックアップも可能なのか。 素晴らしい。

で、実際にやってみる。 自分の場合、バックアップ用にSATAのハードディスクを別に用意していたので、そちら(/vmfs/volumes/datastore2)にコピーすることに。

と、確かにホットバックアップはとれる。 でも自分的にはもう少しなんとかしたい点が出てきた。

  • 大き目の仮想ディスクのバックアップが非常に遅い
  • まるごとコピーのためバックアップ先のディスクがもったいない

で、これがどうにかならないか色々やってみた結果が下の方法。




予め書いておくけど、この方法は厳密なバックアップができるものではありません。(理由は最後に書いてあります) なので多少?のリスクは気にしない心のおおらかな人向けです。

この方法の要点としては、

  1. 仮想ディスクだけクローニングして、管理情報は別途コピーでバックアップ
  2. 仮想ディスクは使用部分だけバックアップできるので占有ディスクスペースを小さくできる
  3. バックアップもリストアも普通のコピーより速い(実使用領域が少なければより顕著)

といった感じ。 では早速方法。 

バックアップ手順

バックアップはESXiのunsupportedシェル又はssh経由で全て行える。

前提条件としてバックアップのターゲットはGuest1という名前のゲストで、実体は/vmfs/volumes/datastore1/Guest1/以下とし、バックアップ先は/vmfs/volumes/datastore2/Guest1/以下で、あらかじめmkdirしてある事とする。

 まずターゲットゲストのスナップショットを取る。(以下は1行でタイプ)

vim-cmd vmsvc/snapshot.create `vim-cmd vmsvc/getallvms|awk '/Guest1/ {print $1;}'` forBackup

続いて各種管理情報のバックアップ。 これは普通にコピー。(2行単位で1コマンドです)

cp /vmfs/volumes/datastore1/Guest1/Guest1.vmx
/vmfs/volumes/datastore2/Guest1/
cp /vmfs/volumes/datastore1/Guest1/Guest1.vmsd
/vmfs/volumes/datastore2/Guest1/
cp /vmfs/volumes/datastore1/Guest1/Guest1.vmxf
/vmfs/volumes/datastore2/Guest1/

 

2009-04-28追記:

なんとなく読み返してみたら問題発見してしまった。(汗) スナップショットとる前に上の管理情報をコピーしてバックアップしたほうが良いです。 上の手順でやっちゃうとvmx中の仮想ディスクのファイル名がスナップショット後の名前になっちゃって、リストアする際にvmxをエディタで編集する必要が出ちゃいます。


次は仮想ディスクのバックアップ。(以下は1行でタイプ)



vmkfstools -i /vmfs/volumes/datastore1/Guest1/Guest1.vmdk -d monosparse /vmfs/volumes/datastore2/Guest1/Guest1.vmdk

上のコマンドでは仮想ディスクのクローンを作ることができる。(実際にはスナップショット作成時のクローニングとなる。) オプションで monosparseを指定しているが、これでディスク全体をクローニングするのではなく、使用している部分のみ保存されるようにできる模様。(よって使ってない程小さくなる) 尚、作成されるファイルは1ファイルのみとなる。 ちなみに仮想ディスクが複数ある場合は、そちらも同様にバックアップする。


で、最後にスナップショットを消す。(以下は1行でタイプ。removeallじゃない方法の方が良いんだけど...検討中)



vim-cmd vmsvc/snapshot.removeall `vim-cmd vmsvc/getallvms|awk '/Guest1/ {print $1;}'`

これでおしまい。 基本これを一連のスクリプトにしてcronで回せば良いはず。(まだそこまではやってないけど)


 


 リストア手順


 残念ながらフォルダ全体をコピーする方法と違って、バックアップ先のvmxをインベントリに追加するだけではだめ。 これはvmdkの形式がmonosparseだからだけど、自分的にはバックアップはあくまでバックアップであって、それをそのままマウントさせて運用するようなことはしないので問題なし。


で、実際の作業。 今度はリストア元は先ほどバックアップした/vmfs/volumes/datastore2/Guest1/以下のファイルで、リストア先が/vmfs/volumes/datastore1/Guest1/とする。 こちらもリストア先のフォルダは予めmkdirしてる事が前提。


まず最初に各種管理情報を戻す。(2行単位で1コマンドです)



cp /vmfs/volumes/datastore2/Guest1/Guest1.vmx

/vmfs/volumes/datastore1/Guest1/

cp /vmfs/volumes/datastore2/Guest1/Guest1.vmsd

/vmfs/volumes/datastore1/Guest1/

cp /vmfs/volumes/datastore2/Guest1/Guest1.vmxf

/vmfs/volumes/datastore1/Guest1/

 


次に仮想ディスクを戻す。(以下は1行でタイプ)



vmkfstools -i /vmfs/volumes/datastore2/Guest1/Guest1.vmdk

/vmfs/volumes/datastore1/Guest1/Guest1.vmdk

今回はオプション指定しない。 これで当初のディスクサイズに伸張されてクローニングされる。


続いて戻したゲストイメージをインベントリに追加していく。 ここから先はviclientでの作業。


まずviclientを起動し、左ペインのESXiホストをクリック、右ペインのConfigurationタブを開き、HardwareからStorageをクリック、Storageに利用可能なデータストアが表示されるので、今回のリストア先であるdatastore1を右クリックし、Browse Datastoreをクリックする。


するとエクスプローラーライクなウィンドウが表示されるので、先ほどリストアしたフォルダを開く。 すると先ほど戻した各種管理情報及び仮想ディスクが見えるはず。 その中から拡張子がvmx(今回はGuest1.vmx)を右クリックし、Add to Inventoryをクリック。


するとインベントリ追加のウィザードが表示されるので、Nameに元のゲスト名(ここではGuest1)を入力しNextをクリック。


続いてリソースプールの選択が表示されるが、ESXiの場合一つしかない(はずな)のでそのままNextをクリック。


最後に確認が表示されるので良ければFinishをクリック。


これでリストア完了。 viclientの左ペインにゲストが追加されているはず。


リストアは文字で書くと結構面倒くさそうだけど、覚えてしまえば簡単な作業。 後はバックアップのスクリプトをどう作るかだけど、できればバックアップ先のディスク残容量をモニタして一定の閾値を超えるまでは追加していくようにしていきたいな、と。


あ、それからこのバックアップの方法だとあくまでスナップショット作成時の仮想ディスクのみが対象となるので、完全なバックアップじゃないです。 メモリとか全く考慮してないし。 書き戻されていない可能性がある事が気になる人はお勧めできません。 (普通の人は気になりますよね。 やっぱり。 でも、)私的には割り切ろうかと。(汗) 何か良いアイデアがあったら教えてください。


そんなわけで、とりあえずウチのバックアップはこんな感じで行こうかと。 でも時間無いし当面はスクリプト+手作業の半自動処理か?(笑)


 


投稿日 : 2009年4月15日

この記事に関する言及

このエントリーのトラックバックURL:
http://akionweb.com/mt-tb.cgi/460

コメント

スナップショットとってから管理情報をバックアップすれば、メモリもスナップショットに戻せないでしょうか?.
そうすれば、メモリが書き戻されていない事によるトラブルも心配無用になると思うのですが...

投稿者 naga : 2009年11月26日 15:10

nagaさん

はじめましてこんにちは。

あ~どうなんでしょうね。 確かにその辺を工夫すればメモリもバックアップできるのかもしれませんね。

ただスナップショット→管理情報バックアップの順だと、後でエディタによる編集が必要になっちゃうと思いますし、その辺どちらをとるかって感じでしょうか。(^^;)

何か良い方法がありましたら教えてください。

投稿者 AKI ON WEB : 2009年11月26日 21:24

試してみましたが、上記のファイルに加え~.vmsnのバックアップも必要でした。
vmsnは(仮想マシンの電源がONの時と、OFFの時のサイズの差から)スナップショット作成時の、メモリデータと思われます。
また、~-000001.vmdkも必要なのですが、こちらは仮想マシン稼働中はバックアップ出来ません。
ものは試しでvmkfstools -i /vmfs/volumes/datastore2/Guest1/Guest1.vmdk /vmfs/volumes/datastore2/Guest1/Guest1-000001.vmdkで無理矢理ダミーを作成して、インベントリへ追加したらスナップショットへ戻せました。
多分、これでメモリも戻っていると思うのですが、安全性が疑問視されたため、この方法は諦めました。
結局、別のサーバから仮想マシンをシャットダウン、バックアップ、仮想マシンの電源ONをスクリプトで自動化してお茶を濁しています。

投稿者 naga : 2009年12月 3日 16:01

nagaさん

情報ありがとうございます。

結局のところ仰るとおりゲストを停止してからバックアップして電源再投入が一番確実なんですよね。

しかし出来れば不停止で、かつホスト単体で実現したいところなんですよね…(^^;)

とはいえ無償の範疇でVCBみたいなのは今のところ難しいだろうし。 個人宅ではあまりお金かけたくないし。

難しいところです。 何か更にいい方法が見つかったら教えてください。

投稿者 AKI ON WEB : 2009年12月 3日 17:58

このページに対する感想、意見をお寄せ下さい。




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

おことわり

当サイトに掲載している全ての情報は、全て当サイト管理者が個人的、実験的に試した事、又は独自に調査したものです。 従ってその情報に誤りがある可能性も多分にあります。 当サイトの情報をそのまま鵜呑みにされませんようお願い申し上げます。 また当サイトの情報を元に作業されたりする場合はそれをご理解頂いた上で、あくまで自己責任の元で行ってください。

トップページ»3.4.製品»VMware ESXiゲストのバックアップ方法を考えてみる