FreeBSD zfs安装bhyve跑虚拟机

2023-05-16

FreeBSD zfs文件系统下跑bhyve虚拟机,使用简单且稳定高效,今天新装一个n3450的小主机(省电),此简单记录下vm-bhyve工具的使用。

1,安装

a,更改源,将pkg源改为163

root@server:~ # cat /etc/pkg/FreeBSD.conf 
# $FreeBSD$
#
# To disable this repository, instead of modifying or removing this file,
# create a /usr/local/etc/pkg/repos/FreeBSD.conf file:
#
#   mkdir -p /usr/local/etc/pkg/repos
#   echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
#

FreeBSD: {
#  url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
  url: "pkg+http://mirrors.163.com/freebsd-pkg/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

root@server:~ # pkg update 
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://mirrors.163.com/freebsd-pkg/FreeBSD:13:amd64/quarterly, please wait...

Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.17.5_1...
Extracting pkg-1.17.5_1: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100%    163 B   0.2kB/s    00:01    
Fetching packagesite.pkg: 100%    6 MiB  50.3kB/s    02:14    
Processing entries: 100%
FreeBSD repository update completed. 31192 packages processed.
All repositories are up to date.
 

b,安装vm-bhyve

root@server:~ # pkg install -y vm-bhyve-1.4.2  grub2-bhyve-0.40_8  bhyve-rc-3  bhyve-firmware-1.0_1 bhyve+-0.1.0 
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 10 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
    bhyve+: 0.1.0
    bhyve-firmware: 1.0_1
    bhyve-rc: 3
    ca_root_nss: 3.76
    grub2-bhyve: 0.40_8
    libevent: 2.1.12
    tmux: 3.2a
    uefi-edk2-bhyve: g20210226,2
    uefi-edk2-bhyve-csm: 0.2_3,1
    vm-bhyve: 1.4.2

Number of packages to be installed: 10

2,配置

a,创建目录

root@server:~ # zfs create zroot/vm

root@server:~ # zfs list
NAME                 USED  AVAIL     REFER  MOUNTPOINT
zroot               1012M   456G       96K  /zroot
zroot/ROOT          1009M   456G       96K  none
zroot/ROOT/default  1009M   456G     1009M  /
zroot/tmp            888K   456G      888K  /tmp
zroot/usr            416K   456G       96K  /usr
zroot/usr/home       128K   456G      128K  /usr/home
zroot/usr/ports       96K   456G       96K  /usr/ports
zroot/usr/src         96K   456G       96K  /usr/src
zroot/var            644K   456G       96K  /var
zroot/var/audit       96K   456G       96K  /var/audit
zroot/var/crash       96K   456G       96K  /var/crash
zroot/var/log        164K   456G      164K  /var/log
zroot/var/mail        96K   456G       96K  /var/mail
zroot/var/tmp         96K   456G       96K  /var/tmp
zroot/vm              96K   456G       96K  /zroot/vm

b,配置文件

root@server:~ # echo "net.link.tap.up_on_open=1" >> /etc/sysctl.conf
root@server:~ # cat /etc/rc.conf
clear_tmp_enable="YES"
hostname="server"
ifconfig_re0="inet 192.168.1.252 netmask 255.255.255.0"
defaultrouter="192.168.1.3"
sshd_enable="YES"
ntpdate_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
zfs_enable="YES"
ntpdate_program="ntpdate"
ntpdate_flags="210.72.145.44"
vm_enable="YES"          #启动vm
vm_dir="zfs:zroot/vm"    #目录为创建的zfs目录

root@server:~ # reboot    #重启下
 

c,复制模板

root@server:/zroot/vm # cp -R /usr/local/share/examples/vm-bhyve/* /zroot/vm/.templates/

 d,创建一个switch

root@server:/zroot/vm # vm switch create public
root@server:/zroot/vm # vm switch add public re0
root@server:/zroot/vm # ifconfig -a
re0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
    ether 00:e2:69:3c:1c:4e
    inet 192.168.1.252 netmask 0xffffff00 broadcast 192.168.1.255
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
    inet 127.0.0.1 netmask 0xff000000
    groups: lo
    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
vm-public: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    ether ea:9d:fb:b8:91:52
    id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
    maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
    root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
    member: re0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
            ifmaxaddr 0 port 1 priority 128 path cost 200000
    groups: bridge vm-switch viid-4c918@
    nd6 options=9<PERFORMNUD,IFDISABLED>
 

以上步骤环境配置完成,即可安装虚拟及。

3,安装系统

 a,安装linux

将iso文件上传到/zroot/vm/.iso目录下,查看有哪些模板

root@server:/zroot/vm/.iso # pwd
/zroot/vm/.iso
root@server:/zroot/vm/.iso # ls
alpine-virt-3.16.0-x86_64.iso    centos7.iso            fb13.raw

root@server:/zroot/vm/.iso # ls ../.templates/
alpine.conf        centos7.conf        debian.conf        freebsd-zvol.conf    netbsd.conf        ubuntu.conf
arch.conf        config.sample        default.conf        freepbx.conf        openbsd.conf        windows.conf
centos6.conf        coreos.conf        dragonfly.conf        linux-zvol.conf        resflash.conf
 

 本处以alpine为例:

创建一个alpine,硬盘50G,名称为alpinetem

root@server:/zroot/vm/.iso # vm create -t centos7  -s 50G alpinetem

可以通过vm list获取配置或者直接查看

root@server:/zroot/vm # pwd;ls
/zroot/vm
.config        .img        .iso        .templates    alpinetem

可以通过修改alpinetem/alinetem.conf更改配置,也可以使用vm config apinetem修改配置文件。

root@server:/zroot/vm/.iso # vm config alpinetem

loader="uefi"
graphics="yes"
xhci_mouse="yes"
cpu=2
memory=2512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
uuid="474169ff-de42-11ec-a308-00e2693c1c4e"
network0_mac="58:9c:fc:0f:22:cd"
 

 通过vm config更改为2cpu 2512M memory的主机

安装alpine

root@server:/zroot/vm # vm install alpinetem alpine-virt-3.16.0-x86_64.iso
Starting alpinetem
  * found guest in /zroot/vm/alpinetem
  * booting...
root@server:/zroot/vm/.iso # vm list
NAME       DATASTORE  LOADER     CPU  MEMORY  VNC           AUTOSTART  STATE
alpinetem  default    uefi       2    2512M   0.0.0.0:5900  No         Running (5147)

通过vnc连接控制台安装即可

lee@rock-3a:~/S02$ vncviewer 192.168.1.252:5900

TigerVNC Viewer 64-bit v1.9.0
Built on: 2020-09-29 18:21
Copyright (C) 1999-2018 TigerVNC Team and many others (see README.rst)
See http://www.tigervnc.org for information on TigerVNC.

Sat May 28 12:55:03 2022
 DecodeManager: Detected 4 CPU core(s)
 DecodeManager: Creating 4 decoder thread(s)
 CConn:       connected to host 192.168.1.252 port 5900
 CConnection: Server supports RFB protocol version 3.8
 CConnection: Using RFB protocol version 3.8
 CConnection: Choosing security type None(1)
 CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
 CConn:       Using Tight encoding

4,其他应用

a,clone

将安装的系统做为模板,进行克隆

root@server:/zroot/vm/.iso # vm list
NAME       DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpinetem  default    uefi       2    2512M   -    No         Stopped
fb13       default    bhyveload  1    256M    -    No         Stopped
root@server:/zroot/vm/.iso # vm clone alpinetem alpine
root@server:/zroot/vm/.iso # vm list
NAME       DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine     default    uefi       2    2512M   -    No         Stopped
alpinetem  default    uefi       2    2512M   -    No         Stopped
fb13       default    bhyveload  1    256M    -    No         Stopped
root@server:/zroot/vm/.iso # 

b,snapshot

想给当前虚拟机做一个快照,可以使用snapshot

开机

root@server:/zroot/vm # vm start alpine
Starting alpine
  * found guest in /zroot/vm/alpine
  * booting...
 

 在主机中创建文件并关机

lee@rock-3a:~/S02$ ssh lee@192.168.1.94                #登录到主机
The authenticity of host '192.168.1.94 (192.168.1.94)' can't be established.
ECDSA key fingerprint is SHA256:Gzmb0PVSqutWMgIVU6fzccnFJ+GQ422Lk9QmB7H/mIM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.94' (ECDSA) to the list of known hosts.
lee@192.168.1.94's password: 
Welcome to Alpine!

localhost:~$ echo "This is a test file">1.txt
localhost:~$ ls
1.txt
localhost:~$ echo "This is a test file">1.txt
localhost:~$ ls
1.txt
localhost:~# halt                                                           #关机
localhost:~# Connection to 192.168.1.94 closed by remote host.
Connection to 192.168.1.94 closed.
 

 创建snapshot

root@server:/zroot/vm # vm snapshot alpine alpine@20001554
root@server:/zroot/vm # zfs list -t snapshot
NAME                                  USED  AVAIL     REFER  MOUNTPOINT
zroot/vm/alpine@2022-05-28-15:54:46     0B      -      249M  -
zroot/vm/alpinetem@e17efe49             0B      -      249M  -

开机并删除1.txt 

root@server:/zroot/vm # vm start alpine
Starting alpine
  * found guest in /zroot/vm/alpine
  * booting...
root@server:/zroot/vm # ssh lee@192.168.1.94
localhost:~$ ls
1.txt
localhost:~$ rm 1.txt 
localhost:~$ su -
Password: 
localhost:~# halt
localhost:~# Connection to 192.168.1.94 closed by remote host.
Connection to 192.168.1.94 closed.
 

回滚

 root@server:/zroot/vm # vm rollback alpine@2022-05-28-15:54:46

开机验证 

root@server:/zroot/vm # ssh lee@192.168.1.94

localhost:~$ ls
1.txt
localhost:~$ cat 1.txt 
This is a test file
 

5,开机启动

开机启动直接加入rc.conf即可,例如:

root@power:~ # cat  /etc/rc.conf
 

hostname="power"

vm_enable="YES"
vm_dir="zfs:zroot/vm"
ntpdate_enable="YES"
ntpdate_program="ntpdate"
ntpdate_flags="210.72.145.44"
vm_list="win10 alpine"   #开机自启列表,以空格隔开
vm_delay="10"               #启动间隔
 

后记:

vm-bhyve是一个脚本,更多信息可以参看man vm和vm的官方github    https://github.com/churchers/vm-bhyve
一个方便操作vm的工具,可以让我们更容易使用vm。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeBSD zfs安装bhyve跑虚拟机 的相关文章

  • FreeBSD中安装源的方法

    FreeBSD中安装软件一般有两种方式 xff1a xff08 一 xff09 使用pk add r Package 来安装软件 xff0c Package安装的是已经编译好的二进制软件包 xff0c Package默认下载软件包的路径是在
  • FreeBSD更换国内源

    背景 在使用FreeBSD时 xff0c 安装工具由于网络问题很容易出现随时中断且耗时较长的问题 为了解决该问题尝试进行国内源替换 修改pkg源 用户自定义源 xff1a mkdir p usr local etc pkg repos vi
  • FreeBSD下修改安装源的方法

    FreeBSD默认是从官方的源下载软件包的 xff0c 速度比较慢 xff0c 可以修改配置文件指定国内的镜像源来快速安装软件 说明 xff1a FreeBSD中安装软件一般有两种方式 xff1a xff08 一 xff09 使用pk ad
  • Proxmox VE 7.0的高级安装及系统盘分区-ZFS(中)

    2 2 ZFS文件系统安装方式 从Proxmox VE 3 4开始 xff0c Proxmox VE增加了ZFS文件系统作为可选的文件系统和根文件系统 Proxmox VE官方提供的ISO镜像已经集成了ZFS所需的软件包 xff0c 用户无
  • glew, glee与 gl glu glut glx glext的区别和关系

    GLEW是一个跨平台的C 扩展库 基于OpenGL图形接口 使用OpenGL的朋友都知道 window目前只支持OpenGL1 1的涵数 但 OpenGL现在都发展到2 0以上了 要使用这些OpenGL的高级特性 就必须下载最新的扩展 另外
  • FreeBSD SSH配置详解

    ssh config和sshd config都是ssh服务器的配置文件 二者区别在于 前者是针对客户端的配置文件 后者则是针对服务端的配置文件 两个配置文件都允许你通过设置不同的选项来改变客 户端程序的运行方式 下面列出来的是两个配置文件中
  • 系统默认编码的配置(转)

    运行locale指令得到当前系统编码设置的详细资料 一 locale的五脏六腑 1 语言符号及其分类 LC CTYPE 2 数字 LC NUMERIC 3 比较和排序习惯 LC COLLATE 4 时间显示格式 LC TIME 5 货币单位
  • FreeBSD开启SSH远程登录

    1 安装时选择上 SSH 或者源码安装 SSH 2 使用 root 登陆系统 3 使用 ee 编辑器编辑 ee etc inetd conf 去掉 ssh 前的 按 ctrl c 再输入 exit 保存退出 4 编辑 ee etc rc c
  • 如何在 FreeBSD 中调试 rc.d 脚本?

    我的里面有一个 bash 脚本 usr local etc rc d 应该运行 python 脚本 我运行布什脚本 service script name start 却什么也没发生 我如何调试该 rc d 脚本 我怎么知道发生了什么事 F
  • 表是“只读”的

    当我想执行一个update在我的桌子上查询时出现错误 1036 桌子data是只读的 我该如何解决这个问题 表属性在 var db mysql被设置为777 修复表 功能似乎没有帮助 我能做点什么吗 就我而言 mysql配置文件有innod
  • vim 系统寄存器 * 和 + 不起作用

    echo has clipboard 返回 1 但每当我执行 yy or yy 那些寄存器中似乎什么也没有 如果我使用常规yy复制另一行文本 然后尝试使用从寄存器粘贴CONTROL V什么都没发生 如果我尝试 pvim 粘贴我使用常规复制的
  • 纯 bash 中的字符串规范化

    字符 E xcc x81 和 xc3 x89 有不同的代码点 它们看起来相同 但在测试匹配时结果是否定的 不过 Python 可以对它们进行标准化 unicodedata normalize NFC E decode utf 8 unico
  • 子进程可以在其父进程不死亡的情况下进入吗?

    Kill 它会立即终止进程吗 https stackoverflow com questions 8468866 kill does it kill the process right away 我找到了答案 并设置了一个信号处理程序SIG
  • ETXTBSY 以及如何覆盖它

    我需要写入正在执行的可执行文件 但无法打开它进行写入 例如 include
  • 确定监听某个端口的进程pid

    正如标题所示 我正在运行多个游戏服务器 并且每个服务器都有相同的name但不同PID和port数字 我想匹配PID正在监听某个端口的服务器 然后我想终止这个进程 我需要它来完成我的 bash 脚本 这可能吗 因为在网上还没有找到解决方案 您
  • FreeBSD v8.1 上的 /proc/cpuinfo 相当于什么?

    相当于Linux的什么 proc cpuinfo在 FreeBSD v8 1 上 我的应用程序读取 proc cpuinfo并将信息保存在日志文件中 我该怎么做才能在 FreeBSD 上记录类似的信息 一个样品 proc cpuinfo看起
  • Elixir Phoenix 生产服务器出现 Letscrypt 续订问题

    我有一个使用 Elixir Phoenix 框架构建的网站 该网站在开发和生产模式下都运行良好 当phoenix服务器在开发模式下运行时 我更新Let s Encrypt证书没有问题 但是当完全一样应用程序正在生产模式下运行 尝试更新时我不
  • 从共享对象调用主可执行文件中的函数

    我必须从加载了 LD PRELOAD 的共享库调用主可执行文件中的函数 可执行文件导出所有符号并包含调试信息 不幸的是我无法访问它的源代码 目前 我在尝试加载该共享库时遇到未定义的符号错误 有没有办法做到这一点 附 目标平台是FreeBSD
  • Kill - 它会立即终止进程吗?

    什么是kill到底是怎么做的 我有一个父进程 它正在一个接一个地创建 100 个 作为示例 子进程 在任何孩子的工作结束时 我都会杀死孩子kill pid of child SIGKILL 我看不到ps输出 但是如果父进程出现问题并且我退出
  • POSIX:FreeBSD 与 Linux 中的管道系统调用

    在 Linux 2 6 35 22 generic 中 man pipe指出 pipeline 创建一个管道 一个可用于进程间通信的单向数据通道 在 FreeBSD 6 3 RELEASE p5 中 man pipe指出 pipeline

随机推荐