BHyVeを簡単に
2年程前に「BHyVeお手軽スクリプト」を紹介したのですが、あのままでは誰も使って無いと思うわけで、もちろん自分でもこれじゃなと思うところが多数ありました(笑)。その後あちこち改良を加え実用的になっているので、改めて現在のプログラムを紹介します。
設計思想
BHyVeはとてもプリミティブなコマンドであるため、そのまま使うには辛いのはご存知の通りです。そのためBHyVeを利用するための複数の管理ツールが開発されています。ざっくりportsを探ったらこのあたりが見つかりました。
- bvm
- cbsd
- chyves
- iohyve
- vm-bhyve
これらのツールとここで紹介するものとの一番の違いは、VMの起動や停止を一般ユーザーがコマンド感覚で行うことに主眼を置いていることです。
例えば VM 名が freebsd0 であれば、起動コマンドは
$ bin/bhyve/freebsd0-boot
起動中のVMを止めるコマンドは
$ bin/bhyve/freebsd0-shutdown
といった感じで利用します。ぶっちゃけ自分の利用しているサーバーのリソースがそれほど潤沢では無いので、常時VMが動いたままにしたくないというのが元々の意図にあります。
また個人的にはよくある
$ コマンド名 VM名 VMへの指定
のような形で使うコマンドは、コンプリーションに頼れずミスタイプの元なので、あまり好きでは無いというのもあります。
なお bhyveの起動等にはroot権限が必要ですが、スクリプト内部で必要な部分にsudoを利用しているため、コマンドを利用する場合はroot権限ではなくユーザーの権限で起動できます(もちろんsudoの適切な設定は必要です)。
起動や停止コマンドは各VM毎に独立したコマンドとなるため、sudoを適切に設定すると普段の管理者権限を持たない人でも、VMに関しては起動や停止などが行えます。これについては別の記事で説明します。
ソースと使い方
ソースについては、GitHub からダウンロードしてください。
使い方については、第40回FreeBSDワークショップでの発表スライドをご覧下さい。
スライド24の、本コマンドで特徴的なスナップショットとロールバックについて補足しておきます。
$ bin/bhyve/freebsdd0-snapshot
NAME VOLSIZE USED REFER
zroot/vm/freebsdd0 10G 4.76G 4.76G
$ bin/bhyve/freebsdd0-snapshot test snap
NAME VOLSIZE USED REFER
zroot/vm/freebsdd0 10G 4.76G 4.76G
zroot/vm/freebsdd0@_201812171509-test_snap - 0 4.76G
このようにスナップショットを作る場合は、引数に空白があっても空白を"_"(アンダースコア)に変換します。また必ず日時を前に加えるため、いつ作ったスナップショットなのかが一目瞭然です。
またロールバックについては、次のように2つのスナップショットがあって、
$ bin/bhyve/freebsd0-snapshot
NAME VOLSIZE USED REFER
zroot/vm/freebsd0 10G 4.87G 4.83G
zroot/vm/freebsd0@_201812171509-test_snap - 0 4.76G
zroot/vm/freebsd0@_201812191115-snap2 - 0 4.76G
ロールバックを実行すると
$ bin/bhyve/freebsd0-rollback
最新のスナップショットである「zroot/vm/freebsd0@_201812191115-snap2」の時点にロールバックします。またロールバックの引数は ZFSでいうスナップショット名をフルに指定するのではなく「@」の右側の部分だけを指定します。これはTera TermやiTerm2で表示されている文字列をマウス操作でコピーする際、デフォルトの設定のままではダブルクリックでは「@」は区切りとなるので操作性の配慮からです。
$ bin/bhyve/freebsd0-snapshot
NAME VOLSIZE USED REFER
zroot/vm/freebsd0 10G 4.77G 4.76G
zroot/vm/freebsd0@_201812171509-test_snap - 0 4.76G
zroot/vm/freebsd0@_201812191115-snap2 - 0 4.76G
$ bin/bhyve/freebsd0-rollback _201812171509-test_snap
$ bin/bhyve/freebsd0-snapshot
NAME VOLSIZE USED REFER
zroot/vm/freebsd0 10G 4.76G 4.76G
zroot/vm/freebsd0@_201812171509-test_snap - 1K 4.76G
この例のようにロールバックでは、指定したスナップショットの時点までロールバックし、それより新しいスナップショットはまとめて削除されます。
動いているVM一覧を確認する
本スクリプトだけでは動いているVM一覧を確認するコマンドが無いので、自分では次のシェルスクリプトを使っています。
#!/bin/sh
__get_mem_and_cpu () {
(
eval $(~/bin/bhyve/$1-resources)
echo $cpu $mem
)
}
pgrep -fl bhyve: |
while read pid dummy vm
do
printf '%-5d %-10s %d %s\n' ${pid} ${vm} $(__get_mem_and_cpu ${vm})
done | sort +1
実行例は次の通り
$ running-bhyves
66004 freebsd0 2 256m
57763 debian0 2 512m
25058 ubuntu0 2 256m
$
表示結果は、PID、VM名、CPU数、割り当てメモリサイズの順になります。
おわりに
自分で使うものでも1年以上改良を加えると、それなりに使えるものになりますね。当たり前ですけど。