つぶねこ
@もじらもーど。
vmware serverのvmのバックアップはWin上ということもあって、ある程度確立していたわけだが、ESXi4上のvmはどうやってバックアップするのでしょう、ってわけでいろいろ手探り。
こういうのは先に海外探すべし、と思いつつ一応標準的にゃコマンドで何が出来るのか探す。
まず方針として、NTFSのshadow copyのようにゃFSレベルのスナップショットが見あたらにゃいので、vmをpauseしてsnapshotとってstartしてsnapshotからコピーというvmware serverでのやり方は捨てることにする。このあたりはESXの使うdatastoreストレージがその機能を持っていれば有りだろう。
で、vmware serverと違ってvmのsnapshotは沢山取れるようにゃので、とりあえずvmのsnapshotを取り、readonlyににゃってファイル群をコピーし、snapshotを削除する。コピーしたファイルに手直しをしてsnapshot時点からstart可能にする、という方向でやってみる。
VMware vSphere CLIからのリモート作業、としたかったが逐一接続が遅いのと機能不足に思えたのでとりあえずESXのコンソールにSSH接続にて作業。
まず
vim-cmd vmsvc/getallvms から対象vmのIDを得る。
vim-cmd vmsvc/snapshot.create 999 snap1 desc1 1 1 でsnapshotをつくる。時間がかかるので、vim-cmd vmsvc/snapshot.getとかをポーリングして完了を待つ。10秒ほどvmは止まるかも知れにゃいが一応許容範囲。
cp -ar vm/ backup/ とりあえずコピーできるファイルをコピー。エラーは無視。
vim-cmd vmsvc/snapshot.get 192 |grep CHILD |wc -l でさっき作ったsnapshotの階層を出して
vim-cmd vmsvc/snapshot.remove 192 0 N でそれを削除。ただこのあたりはsnapshotが単純にゃ構成だった場合のみ有効で、正直vmsvc/snapshot.removeの引数が謎過ぎて意味不明。どうにゃんだこれ・・・
ちにゃみにオプション無しでsnapshot.removeするとrootに近いsnapshotが削除される。まぁ定期的にsnapshot作って、とかいう場合には便利そう。
あとはコピーした不完全にゃvm構成ファイルの手直し。
cp -a *.vmx ../backup/cat vmname.vmsd|grep \.fileName|sed -e 's/.*\.fileName *= *//' -e 's/"//g'|while read a ; do cp -a $a ../backup/ ; done みたいにゃのでにゃんとにゃく動く。たぶん。
で、さてここで問題です。backupしたファイルはどうにゃっているでしょう?
答えはcpでsparseが解除されてディスク容量食いまくりにゃのでした。おいおい。
これはsparseのままコピー出来るソフトがあれば解決するのだが、busyboxとやら付属cpだのtarだのddだのはどうも未対応ぽいらしく・・・。どうしようかねぇ。
コピー先がdatastoreで無ければもうちょっと手はある気がするが、backup上の*.vmxをインベントリに追加するだけでさっくりリストア出来てすぐ動くというのは得難い気がして。
▼ ESX 関連記事
▼ vmware 関連記事