9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FreeBSDAdvent Calendar 2018

Day 20

続 BHyVe お手軽スクリプト

Last updated at Posted at 2018-12-19

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 TermiTerm2で表示されている文字列をマウス操作でコピーする際、デフォルトの設定のままではダブルクリックでは「@」は区切りとなるので操作性の配慮からです。

$ 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年以上改良を加えると、それなりに使えるものになりますね。当たり前ですけど。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?