PowerFlex:適用於 PowerFlex v1.2.1 的 K8s CSI 驅動程式在 xfs 格式上具有較低的 inode
摘要: PowerFlex:由於缺少可用的 inode,使用者無法擁有包含超過 4 億個文件的卷。
症狀
客戶使用 PowerFlex 1.2.1 版的 CSI 驅動程式將 PowerFlex 磁碟區格式化為 XFS 檔案系統類型。
症狀
索引節點大小變為 256 位元組 (isize=256),使用 CSI 驅動程式版本 1.2.1 從 2 TB PowerFlex 磁碟區建立 XFS 檔案系統時。此外,CRC 已停用 (crc=0),而它是 isize=512 以前。
PowerFlex 1.2.0 版的 CSI 驅動程式中未出現此問題。
索引節點大小變為 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。
影響:由於缺少免費 inode,使用者無法擁有包含超過 4 億個文件的卷。
原因
根本原因不在於 PowerFlex 軟體端,而在於 CSI 驅動程式端。
使用 CSI 驅動程式,一個名為 Go 的庫 gofsutil 在內部用於與檔案系統格式化操作交互,並且存在強制格式化的副作用 crc=0 在該庫中: https://github.com/dell/gofsutil/blob/v1.4.0/gofsutil_mount_linux.go#L133 (外部連結)
此問題會導致通用基礎映像 (UBI) 版本變更,並隨附 gofsutil 適用於 PowerFlex 1.2.1 版的 CSI 驅動程式: 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 選項取得 XFS 檔案系統 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 L2 (和 L3) 團隊可能會依個案參與,並從 PowerFlex 軟體的角度進行協同合作。
- 請參閱 PowerFlex:Kubernetes CSI 上報的需求
PowerFlex 專用 CSI 驅動程式參考:
csi-powerflex(PowerFlex 的 CSI 驅動程式):https://github.com/dell/csi-powerflex(外部連結)gofsutil(用於文件系統相關操作(如掛載、格式化等)的 Go 庫):https://github.com/dell/gofsutil( 外部連結)