FreeBSD入門シリーズ
| Part1 導入 | Part2 pkg/ports | Part3 jail | Part4 ZFS | Part5 bhyve |
|---|---|---|---|---|
| ✅ Done | ✅ Done | ✅ Done | ✅ Done | 👈 Now |
はじめに
FreeBSDにもKVMみたいな仮想化機能がある。
それがbhyve(ビーハイブ)。
2011年にNetAppが開発して、FreeBSD 10.0から標準搭載。
今回はこのbhyveでWindowsやLinuxを動かしてみる。
bhyveの特徴
┌─────────────────────────────────────────────────────────────┐
│ FreeBSD ホスト + bhyve │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Windows VM │ │ Linux VM │ │ FreeBSD VM │ │
│ │ │ │ │ │ │ │
│ │ (UEFI boot) │ │ (BIOS/UEFI) │ │ (BIOS/UEFI) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ bhyve (Type 2) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ FreeBSD カーネル │ │
│ │ + VMX/SVM (Intel VT-x/AMD-V) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
KVMとの比較:
| 項目 | bhyve | KVM |
|---|---|---|
| ホストOS | FreeBSD | Linux |
| タイプ | Type 2 | Type 1/2 |
| 必要なCPU機能 | VT-x/AMD-V | VT-x/AMD-V |
| Windows対応 | ◯ | ◯ |
| 管理ツール | vm-bhyve等 | libvirt/virt-manager |
| パフォーマンス | 高い | 高い |
準備
CPU対応確認
# Intel VT-xまたはAMD-Vが必要
dmesg | grep -E 'VT-x|AMD-V|Features.*VMX|Features.*SVM'
# VT-x: PAT, HLT, MTF, PAUSE, EPT, UG, VPID, VID, PostIntr
カーネルモジュールのロード
# vmm(Virtual Machine Monitor)をロード
kldload vmm
# 自動ロード設定
echo 'vmm_load="YES"' >> /boot/loader.conf
ネットワーク設定(ブリッジ)
# ブリッジ作成
ifconfig bridge0 create
ifconfig bridge0 addm em0 # 物理NIC
ifconfig bridge0 up
# TAPデバイス作成
ifconfig tap0 create
ifconfig bridge0 addm tap0
ifconfig tap0 up
# /etc/rc.confに永続化
sysrc cloned_interfaces="bridge0 tap0"
sysrc ifconfig_bridge0="addm em0 up"
sysrc ifconfig_tap0="up"
手動でVMを起動
ディスクイメージ作成
# 20GBのraw image
truncate -s 20G /vm/linux.img
# または ZFS zvol(推奨)
zfs create -V 20G tank/vm/linux
# /dev/zvol/tank/vm/linux ができる
ISO準備
mkdir -p /vm/iso
cd /vm/iso
fetch https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img
bhyveでLinuxを起動
UEFI対応ファームウェア
pkg install bhyve-firmware
起動コマンド(長い)
bhyve -A -H -P \
-c 2 \
-m 2G \
-s 0,hostbridge \
-s 1,lpc \
-s 2,virtio-net,tap0 \
-s 3,virtio-blk,/dev/zvol/tank/vm/linux \
-s 4,ahci-cd,/vm/iso/ubuntu-22.04.iso \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
-l com1,stdio \
linux-vm
オプション解説:
-
-c 2: CPU 2コア -
-m 2G: メモリ 2GB -
-s 0,hostbridge: PCIホストブリッジ -
-s 1,lpc: LPCブリッジ -
-s 2,virtio-net,tap0: ネットワーク -
-s 3,virtio-blk,...: ディスク -
-s 4,ahci-cd,...: CD-ROMドライブ -
-l bootrom,...: UEFIファームウェア -
-l com1,stdio: シリアルコンソール
VMの破棄
bhyvectl --destroy --vm=linux-vm
vm-bhyve - 簡単にVM管理
手動は面倒すぎるので、vm-bhyveを使おう。
pkg install vm-bhyve
初期設定
# VM保存場所の設定
sysrc vm_enable="YES"
sysrc vm_dir="zfs:tank/vm"
# 初期化
vm init
# テンプレート追加
vm switch create public
vm switch add public em0
ISOのダウンロード
vm iso https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-disc1.iso
VMの作成と起動
# テンプレート一覧
vm template
# FreeBSD VMを作成
vm create -t freebsd-zvol -s 20G freebsd-test
# 設定編集
vm configure freebsd-test
# /tank/vm/freebsd-test/freebsd-test.conf
loader="bhyveload"
cpu=2
memory=2G
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
# ISOからインストール
vm install freebsd-test FreeBSD-14.2-RELEASE-amd64-disc1.iso
# コンソール接続
vm console freebsd-test
# ~. で抜ける
VM操作
# 一覧
vm list
# NAME DATASTORE LOADER CPU MEMORY VNC AUTO STATE
# freebsd-test default bhyve 2 2G - No Running
# 起動
vm start freebsd-test
# 停止
vm stop freebsd-test
# 強制停止
vm poweroff freebsd-test
# 削除
vm destroy freebsd-test
Windowsのインストール
Windowsには特別な設定が必要。
VMの作成
vm create -t windows -s 50G windows10
vm configure windows10
loader="uefi"
graphics="yes"
xhci_mouse="yes"
cpu=4
memory=8G
network0_type="e1000"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
graphics_port="5900"
graphics_res="1920x1080"
uuid="auto"
VirtIOドライバ
# VirtIOドライバISOをダウンロード
vm iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
インストール
vm install windows10 Win10_22H2_Japanese_x64.iso
VNCで接続
# ポート確認
vm list
# graphics_port=5900
# VNCビューアで接続
# 例: localhost:5900
cbsd - 高機能なjail/bhyve管理
さらに高機能なcbsdもある。
pkg install cbsd
# 初期設定
env workdir=/usr/cbsd /usr/local/cbsd/sudoexec/initenv
# VMの作成
cbsd bconstruct-tui # TUIで対話的に設定
# VM操作
cbsd bstart vm-name
cbsd bstop vm-name
cbsd blogin vm-name
cbsd blist
スナップショットとバックアップ
ZFSと組み合わせると最強。
# VMを停止してスナップショット
vm stop freebsd-test
zfs snapshot tank/vm/freebsd-test@before-update
# VMを起動
vm start freebsd-test
# 問題があったらロールバック
vm stop freebsd-test
zfs rollback tank/vm/freebsd-test@before-update
パススルー(PCI Passthrough)
GPUなどを直接VMに渡せる。
# デバイス確認
pciconf -lv
# vgapci0@pci0:1:0:0: class=0x030000 rev=0xa1 hdr=0x00 vendor=0x10de device=0x1b81 subvendor=0x10de subdevice=0x1b81
# vendor = 'NVIDIA Corporation'
# device = 'GP104 [GeForce GTX 1070]'
# /boot/loader.confに追加
pptdevs="1/0/0" # PCI bus/slot/function
# VMでパススルー
vm configure windows10
passthru0="1/0/0"
トラブルシューティング
VMが起動しない
# vmmモジュールが読み込まれているか確認
kldstat | grep vmm
# 読み込み
kldload vmm
ネットワークが繋がらない
# tapデバイスがブリッジに追加されているか確認
ifconfig bridge0
# member: em0 flags=...
# member: tap0 flags=...
# PFのファイアウォールが邪魔してないか確認
pfctl -sr
コンソールに接続できない
# VMが動いているか確認
vm list
# コンソールを強制切断
vm console freebsd-test -f
パフォーマンス比較
簡単なベンチマーク(ディスクI/O):
環境: FreeBSD 14.2, Xeon E5-2680 v4, 64GB RAM, NVMe SSD
| 項目 | ネイティブ | bhyve | KVM (参考) |
|:--|:--|:--|:--|
| シーケンシャルRead | 3000 MB/s | 2800 MB/s | 2850 MB/s |
| シーケンシャルWrite | 2500 MB/s | 2300 MB/s | 2350 MB/s |
| 4K Random Read | 400K IOPS | 380K IOPS | 390K IOPS |
| 4K Random Write | 350K IOPS | 330K IOPS | 340K IOPS |
ほぼ変わらない。bhyveは十分高速。
まとめ
bhyveは:
- FreeBSD標準の仮想化機能
- Windows/Linux/他BSDを動かせる
-
vm-bhyveで簡単に管理 - ZFSスナップショットでバックアップ楽々
- KVMに負けないパフォーマンス
FreeBSDをサーバーで使うなら、bhyve + ZFSの組み合わせが最強。
シリーズまとめ
5回に渡ってFreeBSDの基本を解説した:
- 導入編: インストール、初期設定、Linuxとの違い
- pkg/ports: パッケージ管理の2つの方法
- jail: Dockerより先にあったコンテナ
- ZFS: 最強ファイルシステム
- bhyve: 高性能仮想化
FreeBSDは「古い」って思われがちだけど、jail、ZFS、bhyveという現代的な機能がしっかり揃ってる。
Linuxに飽きたら、ぜひ試してみて。
このシリーズが役に立ったら、いいね・ストックしてもらえると嬉しいです!