FreeBSD bhyve虚拟机搭建
需要测试系统配置或搭建独立开发环境时,可以在FreeBSD宿主机上通过bhyve运行客户机。下面使用系统提供的vmrun.sh示例脚本,创建一台FreeBSD虚拟机,并完成网络连接、系统安装、启动和关闭操作。
一、准备运行环境
本文采用以下实验配置:
- 宿主机架构:amd64
- 客户机:FreeBSD amd64
- 虚拟机名称:
freebsd-test - 虚拟CPU:2个
- 内存:2GB
- 虚拟磁盘:20GB
- 网络:桥接至局域网
宿主机需要支持相应硬件虚拟化能力。Intel平台需要关注EPT等支持条件,AMD平台需要相应的嵌套分页能力。如果宿主机本身就是虚拟机,还需要上层平台允许嵌套虚拟化。
建议在有本地控制台的测试服务器上操作。本文不覆盖公网云服务器的附加IP、额外MAC地址限制或NAT配置。
二、加载虚拟化模块
以下宿主机命令以root身份执行:
kldload vmm
kldstat -n vmm
如果提示模块已经加载,可直接检查状态,无需重复加载。
确认示例脚本存在,并查看当前系统支持的参数:
sh /usr/share/examples/bhyve/vmrun.sh -h
本文使用的-c、-m、-t和-d分别指定CPU数量、内存、tap接口和虚拟磁盘;-i与-I用于从安装镜像启动。
三、配置桥接网络
下面假设连接局域网的物理接口是em0,并且tap0、bridge0尚未被其他服务使用。
创建接口并加入网桥:
ifconfig tap0 create
sysctl net.link.tap.up_on_open=1
ifconfig bridge0 create
ifconfig bridge0 addm em0 addm tap0
ifconfig bridge0 up
检查成员:
ifconfig bridge0
ifconfig tap0
网桥将客户机的tap接口与物理网络连接起来。本文先采用临时网络配置,不迁移宿主机IP,也不直接修改开机网络设置;正式持久化时,需要结合现有网桥和接口地址规划处理。
如果宿主机启用了PF或其他过滤规则,还需要检查桥接流量是否被允许。不要把前一篇的单机防火墙规则直接当作虚拟机网络规则使用。
四、准备安装镜像与虚拟磁盘
准备与宿主机兼容的FreeBSD amd64安装ISO,建议选择包含安装文件的disc1.iso,核对下载文件的校验值后,将其保存为:
/vm/iso/freebsd-disc1.iso
本例使用以下目录和磁盘文件:
mkdir -p /vm/iso
mkdir -p /vm/freebsd-test
确认目标文件不存在后,再创建20GB虚拟磁盘:
truncate -s 20G /vm/freebsd-test/disk.img
不要对已有客户机磁盘重复执行此命令。 truncate会调整文件大小,缩小已有文件可能丢失数据。新建文件可以是稀疏文件,仍需保证宿主机有足够空间承接客户机后续写入。
五、启动安装程序
执行:
sh /usr/share/examples/bhyve/vmrun.sh \
-c 2 \
-m 2G \
-t tap0 \
-d /vm/freebsd-test/disk.img \
-i \
-I /vm/iso/freebsd-disc1.iso \
freebsd-test
安装界面会出现在当前终端。按照安装向导设置主机名、用户、时区和网络。
本例为简化启动条件,选择UFS安装方案。分区时应确认选中的是客户机看到的20GB虚拟磁盘,不要把宿主机设备直接传入安装命令。vmrun.sh会根据指定的磁盘文件创建客户机磁盘设备。
网络选择客户机的虚拟网卡。如果局域网提供DHCP,可以通过DHCP获取地址;否则需要填写分配给客户机的地址、网关和DNS。桥接接口本身不提供DHCP服务。
安装结束后,选择进入Live CD环境,以root登录,再执行:
shutdown -p now
这里应关闭客户机,避免继续携带-i参数重启安装流程。
六、从虚拟磁盘启动
回到宿主机后,使用以下命令:
sh /usr/share/examples/bhyve/vmrun.sh \
-c 2 \
-m 2G \
-t tap0 \
-d /vm/freebsd-test/disk.img \
freebsd-test
与安装命令相比,这里移除了-i和-I,改为从已经安装好的磁盘启动。vmrun.sh会处理客户机重启循环,因此客户机执行重启时,脚本通常会再次启动它。
进入客户机后,可以检查地址和路由,再测试局域网网关:
ifconfig
netstat -rn
使用实际网关地址测试连通性。若无法获取地址,优先检查网桥成员、DHCP服务和网络过滤规则。
七、日常关闭与资源调整
正常停止虚拟机时,在客户机内执行:
shutdown -p now
下一次启动时,可以调整命令中的CPU和内存参数。例如,将内存调整为4GB:
sh /usr/share/examples/bhyve/vmrun.sh \
-c 2 \
-m 4G \
-t tap0 \
-d /vm/freebsd-test/disk.img \
freebsd-test
不要同时启动两个使用同一磁盘文件的实例。本文采用前台终端运行方式,适合安装与验证,不应直接视为完整的后台托管或开机自启方案。
实验结束、客户机已经关闭,并确认接口没有被其他业务使用后,可以移除本次创建的临时网络接口:
ifconfig bridge0 deletem tap0
ifconfig tap0 destroy
ifconfig bridge0 destroy
这里删除的是临时网络接口,不是客户机磁盘。
八、常见问题
vmm模块无法加载怎么办?
检查CPU虚拟化支持、固件设置和宿主平台限制。模块加载失败时,应先解决宿主机条件问题,不要继续创建客户机。
为什么每次启动都进入安装界面?
检查启动命令是否仍然带有-i。安装完成后应使用从磁盘启动的命令,并确认-d指向原来的磁盘文件。
宿主机重启后,虚拟机为什么不能直接启动?
本文的模块加载和网络创建主要针对当前运行环境。宿主机重启后,需要重新准备相应模块与接口;长期运行前,应另外规划网络持久化和虚拟机服务管理。
广告合作
QQ群号:4114653
- 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
- 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。