FreeBSD Jail访问ZFS zpool

  • 修订分区类型(ufs改为zfs)

修订分区类型
# 语法: gpart modify -i index [-l label] [-t type] [-f flags] geom

gpart modify -i 1 -t freebsd-zfs /dev/diskid/DISK-54UA4062K7AS

显示分区1被修改:

修订分区类型
diskid/DISK-54UA4062K7ASp1 modified
  • 创建一个名为 zstore-1 的存储池

创建 zstore-1 的存储池
zpool create zstore-1 /dev/diskid/DISK-54UA4062K7ASp1

此时可以看到系统挂载了一个 /zstore-1 目录,对应了存储池 zstore-1 :

zstore-1 的存储池挂载( df -h 输出)
Filesystem                                     Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default                             192G    1.4G    190G     1%    /
...
zstore-1                                       246G     24K    246G     0%    /zstore-1
  • 设置存储池 zstore-1jailed=on 属性:

设置 存储池 zstore-1jailed=on 属性
zfs set jailed=on zstore-1

备注

amazing

居然可以设置 zpool 的 jailed 属性(google AI给的说明是command is incorrect. 但是实践发现是可行的)

毕竟在 FreeBSD Jail访问ZFS文件系统 实践中我发现当设置了 zfs dataset 的 jailed=on 属性之后,实际上在jail中是能够看到 zpool 的,所以我当时就有一个想法,似乎zpool可以直接在jail中使用

  • 执行 zfs jail 命令将设置 jailed=onZFS卷集 zpool zstore-1 分配给 jail store-1 :

zfs jailzpool zstore-1 分配给 jail store-1
zfs jail store-1 zstore-1
  • amazing 此时在 store-1 这个jail中就能够看到存储池 zstore-1 了:

zstore-1 中观察zpool
root@store-1:/ # zpool list
NAME       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zstore-1   254G   123K   254G        -         -     0%     0%  1.00x    ONLINE  -

root@store-1:/ # zfs list
NAME       USED  AVAIL  REFER  MOUNTPOINT
zstore-1   123K   246G    24K  /zstore-1

root@store-1:/ # df -h
Filesystem                                  Size    Used   Avail Capacity  Mounted on
/zdata/jails/templates/14.3-RELEASE-base    4.4T    457M    4.4T     0%    /
/zdata/jails/containers/store-1             4.4T    4.5M    4.4T     0%    /skeleton
devfs                                       1.0K      0B    1.0K     0%    /dev

这里观察到jail中没有自动挂载上 zstore-1 这是因为在jial中,根目录是只读的,所以需要修订 zpool 挂载点:

修订zpool挂载点
zfs set mountpoint=/var/lib/ceph/osd/osd.1 zstore-1

此时再次在jail中执行 df -h 就会看到存储池被挂载到指定挂载点:

修订zpool挂载点后检查 df -h
Filesystem                                  Size    Used   Avail Capacity  Mounted on
/zdata/jails/templates/14.3-RELEASE-base    4.4T    457M    4.4T     0%    /
/zdata/jails/containers/store-1             4.4T    4.5M    4.4T     0%    /skeleton
devfs                                       1.0K      0B    1.0K     0%    /dev
zstore-1                                    246G     24K    246G     0%    /skeleton/var/lib/ceph/osd/osd.1

稍微有一点和Ceph手册不同,挂载点实际在 /skeleton/var/lib/ceph/osd/osd.1 ,不过软链接 /var 等同于 /skeleton/var ,不确定是否可行。待后续再改进部署

备注

已验证zpool能够直接在jail中使用,这样理论上只需要使用容器来模拟 Ceph 集群即可,不需要沉重的 bhyve(BSD hypervisor) 虚拟化了。