FreeBSD bhyve + vm-bhyveで作成したゲスト環境(FreeBSD)に仮想のディスクを増設する。
方法は主に
- ファイルを用意しゲストOS上でマウント。
- zfsのzvolで用意しゲストOS上でマウント。
- ホスト環境で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