能否在Docker容器内创建XFS文件系统用于d_type兼容性集成测试
可行实现方案
完全不需要修改宿主机配置或操作宿主机文件系统,仅通过容器内部操作即可完成,具体步骤如下:
前置依赖
启动容器时需要添加必要的权限参数,执行命令示例:
docker run --cap-add SYS_ADMIN --device /dev/loop-control --device /dev/fuse [你的基础镜像名]
如果无法获取SYS_ADMIN权限,可以使用FUSE方案实现挂载,仅需要映射/dev/fuse设备即可。
容器内操作步骤
- 首先安装必要依赖包(以Debian/Ubuntu系为例,RHEL系对应替换包管理器命令即可):
apt update && apt install -y xfsprogs util-linux # 如果使用FUSE方案额外安装fuse-xfs apt install -y fuse-xfs - 创建两个1G大小的空文件作为XFS文件系统的镜像载体:
truncate -s 1G xfs_ftype0.img truncate -s 1G xfs_ftype1.img - 分别格式化两个镜像文件,设置对应ftype参数:
# 格式化不支持d_type的XFS mkfs.xfs -m ftype=0 -f xfs_ftype0.img # 格式化支持d_type的XFS mkfs.xfs -m ftype=1 -f xfs_ftype1.img - 创建挂载目录并挂载文件系统:
mkdir -p /mnt/xfs_ftype0 /mnt/xfs_ftype1 # 常规loop挂载(需要SYS_ADMIN权限) mount -o loop xfs_ftype0.img /mnt/xfs_ftype0 mount -o loop xfs_ftype1.img /mnt/xfs_ftype1 # FUSE方案挂载(无需SYS_ADMIN权限) # fuse-xfs xfs_ftype0.img /mnt/xfs_ftype0 # fuse-xfs xfs_ftype1.img /mnt/xfs_ftype1 - 验证配置是否生效:
输出应为xfs_info /mnt/xfs_ftype0 | grep -o 'ftype=[01]' xfs_info /mnt/xfs_ftype1 | grep -o 'ftype=[01]'ftype=0和ftype=1即代表配置成功。
Dockerfile集成方案
可以将上述逻辑固化到Dockerfile中,打包好直接使用:
FROM ubuntu:22.04 RUN apt update && apt install -y xfsprogs util-linux fuse-xfs && rm -rf /var/lib/apt/lists/* # 拷贝初始化脚本 COPY init_xfs.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/init_xfs.sh CMD ["init_xfs.sh"]
其中init_xfs.sh脚本写入上述创建镜像、格式化、挂载的逻辑即可。
方案优势
相比devicemapper方案,不需要修改Docker daemon的存储驱动配置,完全在容器内部完成操作,不需要宿主机Docker Engine的控制权限,实现成本更低,适配性更强。
内容的提问来源于stack exchange,提问作者Andrew Kaluzniacki
相关产品推荐
相关产品推荐

