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-1
的jailed=on
属性:
设置 存储池
zstore-1
的 jailed=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=on
的 ZFS卷集 zpoolzstore-1
分配给 jailstore-1
:
zfs jail
将 zpool zstore-1
分配给 jail store-1
zfs jail store-1 zstore-1
amazing 此时在
store-1
这个jail中就能够看到存储池zstore-1
了:
在
zstore-1
中观察zpoolroot@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) 虚拟化了。