FreeBSD使用Linux XFS文件系统
xfsprogs
第三方在FreeBSD上移植了 xfsprogs Utilities for managing XFS filesystems
安装
xfsprogs:
xfsprogspkg install xfsprogs
格式化XFS文件系统:
mkfs.xfs /dev/diskid/DISK-Y39B70RTK7ASp6
输出信息:
meta-data=/dev/diskid/DISK-Y39B70RTK7ASp6 isize=512 agcount=4, agsize=16777216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1
data = bsize=4096 blocks=67108864, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=32768, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
挂载XFS
很不幸,FreeBSD内核已经移除了XFS支持,所以不能直接挂载,需要通过 FUSE 来实现XFS挂载
安装
fusefs-lkl:
fusefs-lklpkg install fusefs-lkl
加载
fusefs内核模块
fusefs 内核模块kldload fusefs
# 要在启动时加载fuse内核模块
echo 'fusefs_load="YES"' >> /boot/loader.conf
# 或者设置 rc.conf
# 注意: 如果需要在启动时使用fusefs,则应该使用 /boot/loader.conf
sysrc kld_list="fusefs"
挂载磁盘分区:
lklfuse 挂载XFS文件系统lklfuse -o type=xfs,allow_other,uid=501,gid=501 /dev/diskid/DISK-Y39B70RTK7ASp6 /lfs
需要注意:
由于是
fuse方式挂载目录,所以需要指定uid,gid,例如这里指定admin用户的uid(501) 和gid(501),这样所有存放到该目录下的用户的属主都会自动映射为admin用户属主,就能以该用户来访问该目录读写这里通过
root用户执行挂载命令时,由于是将目录指定给admin用户使用,必须使用allow_other参数,否则即使挂载后该/lfs目录属主是admin用户,该admin用户也无法进入目录,会提示错误 cd: /lfs: Operation not permitted
但是如果以 admin 用户去执行 lklfuse 命令来挂载磁盘分区,会提示对磁盘分区没有操作权限:
/dev/diskid/DISK-Y39B70RTK7ASp6: Permission denied
检查 /dev/diskid/DISK-Y39B70RTK7ASp6 设备的属主是 root operator ,我尝试将 admin 用户假如到 operator 组,但是发现仅仅绕过了 /dev/diskid/DISK-Y39B70RTK7ASp6 权限限制,但是依然无法将 /dev/fuse 设备绑定 /lfs 目录:
$ mount_fusefs: /dev/fuse on /lfs: Operation not permitted
最终验证发现,采用 root 身份来挂载,在使用了 uid=501,gid=501 同时配套使用 allow_other 选项,就能够正确挂载目录,并且让 admin 用户访问和读写
备注
我这里有一个乌龙,我忘记执行 mkfs.xfs 格式化XFS文件系统,而直接使用了上述 lklfuse 来挂载一个EXT4文件系统作为XFS来挂载。结果导致该挂载目录hang死了,连 df 都出不来
配置 /etc/fstab 没有找到如何在/etc/fstab中配置xfs以fuse方式挂载的方法
异常挂起
我在配置了 在Linux Jail中使用XFS文件系统 之后发现一个奇怪的现象,一旦执行fuse挂载
lklfuse 挂载XFS文件系统lklfuse -o type=xfs,allow_other,uid=501,gid=501 /dev/diskid/DISK-Y39B70RTK7ASp6 /lfs
则访问 /lfs 目录会导致出现进程D住(所以也无法执行 df ),这让我非常困扰,所以我放弃了FUSE方式来使用Linux文件系统,而采用比较成熟的FreeBSD内核级别 FreeBSD使用Linux EXT4文件系统
下一步
我的目标是
XFS挂载目录提供给 使用 Rocky-Container-base tgz 包部署Linux Jail Rocky ,就能够在Linux容器内部来构建新的LFS系统