PowerFlex:K8s CSI Driver for PowerFlex v1.2.1 在 xfs 格式上具有低索引节点
摘要: PowerFlex:由于缺少可用索引节点,用户不能拥有包含超过 4 亿个文件的卷。
症状
客户使用 CSI Driver for PowerFlex 版本 1.2.1 将 PowerFlex 卷格式化为 XFS 文件系统类型。
症状
索引节点大小变为 256 字节 (isize=256) 通过 CSI 驱动程序版本 1.2.1 从 2 TB PowerFlex 卷创建 XFS 文件系统时。此外,CRC 处于禁用状态 (crc=0),虽然它是 isize=512 以前。
适用于 PowerFlex 的 CSI 驱动程序版本 1.2.0 中不存在此问题。
索引节点大小变为 512 字节 (isize=512) 并且 CRC 处于启用状态 (crc=1) 从 2 TB PowerFlex 卷创建 XFS 文件系统时 mkfs.xfs 具有默认选项的 Linux 命令:

参见 mkfs.xfs 的手册页: mkfs.xfs(8) — Linux 手册页 (外部链接)
Size=value (isize)
信息节点大小可以指定为 size= 的字节值,也可以指定为文件系统数据块中的数字拟合 perblock=。
最小(和默认值)为 256 字节(不带 crc);512 字节(启用 crc)。
crc=value 用于创建一个文件系统,用于维护和检查磁盘上所有元数据对象中的 CRC 信息。
值为 0 以禁用该功能,或为 1 以启用 CRC 的使用。默认情况下, mkfs.xfs 启用元数据 CRC。
影响:由于缺少可用索引节点,用户不能拥有包含超过 4 亿个文件的卷。
原因
根本原因不在于 PowerFlex 软件端,而在于 CSI 驱动程序端。
借助 CSI 驱动程序,一个名为 gofsutil 在内部用于与文件系统格式化作交互,并且有强制格式化的副作用 crc=0 在该库中: https://github.com/dell/gofsutil/blob/v1.4.0/gofsutil_mount_linux.go#L133 (外部链接)
此问题引入了通用基础映像 (UBI) 版本更改,其中包含 gofsutil 对于 CSI Driver for PowerFlex 版本 1.2.1: https://github.com/dell/csi-powerflex/compare/v1.2.0...v1.2.1#diff-d947c64a65fbadc3496bff6bf4f3dd823c7300954d9072ddbd3f54513c2766b5R7 (外部链接)
mkfs.xfs 命令示例:
mkfs.xfs -i size=256 不允许;禁用“crc”需要它:
$ mkfs.xfs -i size=256 /dev/scinib
Minimum inode size for CRCs is 512 bytes
而 mkfs.xfs -m crc=0 option 获取具有以下功能的 XFS 文件系统: isize=256 和 crc=0,相当于 CSI 驱动程序 v1.2.1:
$ xfs_info /dev/scinib
meta-data=/dev/scinib isize=256 agcount=4, agsize=134217728 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0
data = bsize=4096 blocks=536870912, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=262144, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
而 mkfs.xfs default option 获取带有 isize=512 和 crc=1,这些值通常是预期的元数据值:
$ xfs_info /dev/scinib
meta-data=/dev/scinib isize=512 agcount=4, agsize=134217728 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=536870912, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=262144, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
解决方案
这不是 PowerFlex 软件问题。
CSI 驱动程序案例处理注意事项:
- 通常,ViPR/SRM L2 团队是 CSI 相关问题的第一联系人。
- 从 PowerFlex 软件的角度来看,PowerFlex L2(和 L3)团队可能会根据个案情况进行协作。
- 请参阅 PowerFlex:Kubernetes CSI 上报的要求
CSI Driver for PowerFlex 参考:
csi-powerflex(CSI Driver for PowerFlex):https://github.com/dell/csi-powerflex(外部链接)gofsutil(用于文件系统相关作(如挂载、格式化等)的 Go 库): https://github.com/dell/gofsutil( 外部链接)