我创建了一个 XFS 文件系统,使用创建系统时的默认参数。现在查看 的输出,它显示和xfs_info
的值均为 0。我似乎找不到 0 在此上下文中的含义的解释。(我所讨论的和sunit
swidth
sunit
swidth
有发现的重点是设置这些参数的正确值,而不是将它们设置为 0。)
# xfs_info .
meta-data=/dev/mapper/centos-root isize=256 agcount=8, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=1927677952, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
这肯定是一个无知的问题,对此我深表歉意,因为我是 XFS 新手,但是 和 的 0 值是什么意思sunit
?swidth
我如何才能找出 XFS 实际使用的这些参数值,以及这些值与适合我的 RAID 阵列的值有何关系?(这是位于硬件 RAID 之上的 LVM 之上的 XFS 系统。)
答案1
这是一个老问题,但我认为更全面的答案会很有用。
简而言之:使用软件 RAID 时,让 XFS 自动检测底层阵列几何结构。如果在较新的内核上使用硬件 RAID,XFS应该能够自动检测正确的参数;如果没有,您可以使用su/sw/sunit/swidth
来指定它们。
了解底层几何结构有助于 XFS 分配器尽可能避免跨越两个磁盘,从而为其他工作节省 IOPS(即:使用更少的数据磁盘)。
在上面的特定示例中,mkfs.xfs
报告sunit=0
和swidth=0
,意味着 XFS 没有在创建文件系统的块设备上检测到任何特定的 RAID 几何。
长答案:让我们从su
和开始sw
。从(有些过时的)XFS 常见问题解答:
su = <RAID controllers stripe size in BYTES (or KiBytes when used with k)>
sw = <# of data disks (don't count parity disks)>
请注意,本文中的“条带大小”是指单身的条带单元大小,也称为块大小由 Linux MD RAID 提供。再次引用常见问题解答:
RAID 条带大小为 256KB,RAID-10 超过 16 个磁盘,应使用
su = 256k sw = 8(16 个磁盘的 RAID-10 有 8 个数据磁盘)
sunit
是swidth
另一种表达相同 RAID 几何结构的方法,这次是以 512B 扇区表示。从mkfs.xfs 手册页:
sunit
用于指定 RAID 设备或逻辑卷的条带单元。该值必须在512字节块单元
swidth
用于指定 RAID 设备或条带逻辑卷的条带宽度。该值必须以 512 字节块为单位指定。
简而言之:
su * sw = entire data stripe size
swidth / sunit = number of data disk
如您所见,它们是两种不同的方法,用于向 XFS 告知底层 RAID 几何结构。但是,常见问题解答告诉我们mkfs.xfs
报告sunit
和操作中的一个问题swidth
:
请注意,xfs_info 和 mkfs.xfs 将 sunit 和 swidth 解释为以 512B 扇区为单位指定;但不幸的是,这不是它们报告的单位。xfs_info 和 mkfs.xfs 以基本块大小 (bsize) 的倍数报告它们,而不是以 512B 扇区为单位。
例如,假设:swidth 1024(在 mkfs.xfs 命令行中指定;因此 512B 扇区中有 1024 个)且块大小为 4096(mkfs.xfs 在输出中报告的 bsize)。您应该看到 swidth 128(mkfs.xfs 在输出中报告)。128 * 4096 == 1024 * 512。
基本上,在创建文件系统时您指定sunit
并swidth
在 512B 扇区中,而相同的mkfs.xfs
报告则以 4K 块大小进行。这种差异常常引起混淆。
答案2
如果你不使用 RAID,sunit
并且swidth
选项已经过时,则它用于 RAID 优化
有关更多信息sunit
,swidth
请参阅XFS 常见问题解答
答案3
零意味着相对于底层 RAID 结构的范围分配零优化,这是正确的。
因此,如果您关心性能,而您只需重新创建 FS,分析 raid 集/控制器中的驱动器数量及其块大小,然后进行sunit
相应swidth
设置mkfs.xfs
。
并且如果(且仅当)您需要在 RAID LUN 上创建分区,请确保第一个分区从 1 MByte 边界开始(如果扇区 = 512 字节,则为 2048 秒),因为这是大多数 RAID 块大小都可以被其整除的。