FreeBSD bhyve + vm-bhyve 仮想ディスク増設

FreeBSD bhyve + vm-bhyveで作成したゲスト環境(FreeBSD)に仮想のディスクを増設する。

方法は主に

  1. ファイルを用意しゲストOS上でマウント。
  2. zfsのzvolで用意しゲストOS上でマウント。
  3. ホスト環境でnfs共有設定し、ゲストOS上でマウント。

あたりが簡単な方法になる。

今回は前回テスト用に作成した環境(vmtest)を例に試してみる。

 

1. ファイル形式(disk1.img)で追加

ゲストが停止している状態で、ゲスト環境のディレクトリに移動し、イメージファイルを作成する。

# cd /data/vm/vmtest
# ls -l
total 969510
-rw-r--r--  1 root  wheel  21474836480  6月 26 12:49 disk0.img
-rw-r--r--  1 root  wheel         3110  6月 26 12:49 vm-bhyve.log
-r--r--r--  1 root  wheel          229  6月 26 12:32 vmtest.conf
# truncate -s 10g disk1.img
# ls -l
total 969511
-rw-r--r--  1 root  wheel  21474836480  6月 26 12:49 disk0.img
-rw-r--r--  1 root  wheel  10737418240  6月 26 12:50 disk1.img
-rw-r--r--  1 root  wheel         3110  6月 26 12:49 vm-bhyve.log
-r--r--r--  1 root  wheel          229  6月 26 12:32 vmtest.conf

vm configure vmtest“で設定ファイルに以下の2行を追加。

guest="freebsd"
loader="bhyveload"
cpu=1
memory=256M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
disk1_type="virtio-blk"
disk1_name="disk1.img"
uuid="64c584ad-3b4e-11e6-ae55-e840f23e930a"
network0_mac="58:9c:fc:07:cd:04"

イメージファイルを他の場所に置きたい場合は次の様にdiskX_devを追加する。

guest="freebsd"
loader="bhyveload"
cpu=1
memory=256M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
disk1_dev="custom"
disk1_type="virtio-blk"
disk1_name="/data/vm/img/disk1.img"
uuid="64c584ad-3b4e-11e6-ae55-e840f23e930a"
network0_mac="58:9c:fc:07:cd:04"

vmtestを起動すると、以下のようにvtbd1が新たに追加されている。

# ls -l /dev/v*
crw-r-----  1 root  operator  0x4c Jun 26 13:13 /dev/vtbd0
crw-r-----  1 root  operator  0x4e Jun 26 13:13 /dev/vtbd0p1
crw-r-----  1 root  operator  0x4f Jun 26 22:13 /dev/vtbd0p2
crw-r-----  1 root  operator  0x50 Jun 26 13:13 /dev/vtbd0p3
crw-r-----  1 root  operator  0x4d Jun 26 13:13 /dev/vtbd1

あとは通常通り、gptパーティションを作成しファイルシステムを切ってマウントすればOK。

# gpart create -s gpt vtbd1
vtbd1 created
# gpart add -t freebsd-ufs vtbd1
vtbd1p1 added
# gpart show vtbd1
=>      34  20971453  vtbd1  GPT  (10G)
        34       222         - free -  (111K)
       256  20971008      1  freebsd-ufs  (10G)
  20971264       223         - free -  (112K)
# newfs -U vtbd1p1
/dev/vtbd1p1: 10239.8MB (20971008 sectors) block size 32768, fragment size 4096
        using 17 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
        with soft updates
super-block backups (for fsck_ffs -b #) at:
 192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632, 8975872, 10258112,
 11540352, 12822592, 14104832, 15387072, 16669312, 17951552, 19233792, 20516032
# tunefs -j enable /dev/vtbd1p1
tunefs: soft updates journaling remains unchanged as enabled
# mount -t ufs /dev/vtbd1p1 /usr/local
# mount
/dev/vtbd0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/vtbd1p1 on /usr/local (ufs, local, journaled soft-updates)

次回以降自動でマウントするなら/etc/fstabへ設定を追加。

# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/vtbd0p2    /               ufs     rw      1       1
/dev/vtbd0p3    none            swap    sw      0       0
/dev/vtbd1p1    /usr/local      ufs     rw      0       2

 

2. zfs zvol(sparse-zvol)形式で追加

ディスク領域をファイルではなくzfsのzvolあるいはsparse-zvolのブロックアクセスとすることでパフォーマンスが多少向上する(と思う)。
まずは追加するディスク領域を確保する。
通常のzvolでもいいけど、せっかくのzfsなのでsparse形式としてみる。
zfsボリュームは対象となる仮想領域の直下を指定する。

# zfs create -s -V 50g data/vm/vmtest/disk1
# zfs list -r data/vm/vmtest
NAME                   USED  AVAIL  REFER  MOUNTPOINT
data/vm/vmtest         948M  6.93T   948M  /data/vm/vmtest
data/vm/vmtest/disk1   136K  6.93T   136K  -

設定ファイルに以下の3行を追加する。

guest="freebsd"
loader="bhyveload"
cpu=1
memory=256M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
disk1_dev="sparse-zvol"
disk1_type="virtio-blk"
disk1_name="disk1"
uuid="46124212-3b57-11e6-ae55-e840f23e930a"
network0_mac="58:9c:fc:09:46:c8"

sparseでない場合は”zfs create -V 50g data/vm/vmtest/disk1″として”-s”をつけずに確保する。
その上で設定ファイルの”diskX_dev”の指定を”zvol”とする。

vmtestを起動すると、以下のようにvtbd1が新たに追加されているので、後の作業はfile形式の場合と同様。

 

3. nfsでディレクトリを共有

ホスト側zfsのnfs共有機能を使ってゲストOSと共有のディレクト利用域を確保する。
厳密にはディスク領域の追加とは違うけれども、実際には一番よく使うので一応書いておく。
共有するディレクトリはどこでもいいけれど、今回はzvolの時と同じくゲスト領域の下にdata/vm/vmtest/disk1として確保した領域を共有してみる。
まずはホスト側の準備。
ホストにNFL共有の設定がしない場合、/etc.rc.confに以下を追加して”service nfsd start”しておく。

## NFS
rpcbind_enable="YES"
nfs_server_enable="YES"
nfsv4_server_enable="YES"       # To enable NFSv4
nfsuserd_enable="YES"           # The NFS user/group info needed for v4

次に共有領域data/vm/vmtest/disk1を作成し解放する設定を行う。

# zfs create data/vm/vmtest/disk1
# zfs set sharenfs="-maproot=root -network 192.168.1.0 -mask 255.255.255.0" data/vm/vmtest/disk1
# zfs get sharenfs | grep vmtest/disk1
data/vm/vmtest/disk1  sharenfs  -maproot=root -network 192.168.1.0 -mask 255.255.255.0  local

ゲストOS側でマウントを行う。

# mount -t nfs 192.168.12.100:/data/vm/vmtest/disk1 /usr/local
# mount
/dev/vtbd0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
192.168.1.100:/data/vm/vmtest/disk1 on /usr/local (nfs)

問題なければ/etc/fstabに次の1行を追加し、次回以降自動マウントの設定を行う。

# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/vtbd0p2    /               ufs     rw      1       1
/dev/vtbd0p3    none            swap    sw      0       0
192.168.1.100:/data/vm/vmtest/disk1 /usr/local nfs       rw      0       0

 

コメントを残す

メールアドレスが公開されることはありません。