vagrantのプラグイン、saharaを使ってVirtualBox上のCentOSを破壊しました。

photo credit: mariusz kluzniak via photopin

saharaとは

saharaはvagrantのプラグインです。

saharaを使うと、以下のようなことがコマンドラインからできます。

  • 仮想マシンのスナップショットを作成
  • スナップショットから仮想マシンを復元

つまり、仮想マシンをボロボロのメタメタのケチョンケチョンに破壊しまくっても、

元に戻せるのです!( ̄ー ̄)

saharaのインストール

$ vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.15)'!

saharaの使い方

コマンドは以下の4つです。

  • vagrant sandbox on
  • vagrant sandbox commit
  • vagrant sandbox rollback
  • vagrant sandbox off

簡単な例

ここでは、 /usr配下をうっかり削除してしまい、復元しようと思います。

まずは、事前にvmを立ちあげときます。

$ vagrant up
サンドボックス有効化

saharaを利用するためには、sandboxモードを有効化します。

$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

GUIからも、スナップショットが作成されたことが確認できます。

以下のフォルダに格納されました。

C:\home\TSUNEMICHI\VirtualBox VMs\centos_1373847520\Snapshots
スナップショットから以前の状態を復元

rollbackコマンドでsandboxモードを有効化した時点に戻ることができます。

$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

それでは、ここでうっかりディレクトリ削除をしてみます。

$ vagrant ssh
$ su # root passwordは vagrant
$ rm -rf /usr

うひゃあ 。゚(゚´Д`゚)゚。

$ ls /usr
ls: cannot access /usr: No such file or directory

でも、大丈夫だよ (´・ω・)っ□

$ vagrant sandbox rollback
$ vagrant ssh
$ ls /usr/
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

よかったねー。(っ´∀`)っ

サンドボックス無効化

saharaをもう利用しない時は、sandboxモードを無効化します。ちなみに、けっこう時間がかかります。

$ vagrant sandbox off
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

スナップショットは以下に保存されています。もちろん、VirtualBoxからもスナップショットの管理ができます。

スナップショット作成

commitコマンドで現在の状態を保存します。これによって、rollbackで戻れる時点を変更できます。これはスナップショットを一旦削除するので、時間がかかります。

$ vagrant sandbox commit

内部的には、sandbox offしてonしているだけに見えます。

パフォーマンスについて

時間はどうなの?

sandbox onと sandbox rollbackは一瞬で終わります。sandbox offとsandbox commitスナップショットの削除時間が入るので、数分かかります。

とくに、sandbox rollbackが一瞬で完了するのは素晴らしいです。これなら、エンドツーエンドテストに十分応用可能なスピードです。

容量はどうなの?

スナップショットをたくさんとった時の気になる容量を確認しました。

CentOS 6.4 Minimal の元ファイルが1.5GBのスナップショットは 63.8 MB でした。このくらいならば、許せるレベル。僕の貧弱マシンでも大丈夫です。

参考