我在硬件 RAID6 中有 10 个磁盘,每个磁盘 8 TB(因此,8 个数据磁盘 + 2 个奇偶校验)。在回答了一个非常相似的问题之后,我希望能够自动检测所有必要的参数。但是,在最后创建 XFS 文件系统时,我得到了
# mkfs.xfs /dev/vgdata/lvscratch
meta-data=/dev/vgdata/lvscratch isize=256 agcount=40, agsize=268435455 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=10737418200, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
这看起来像没有使用条带化。由于我在不同站点上找到的不同术语(条带大小,条带大小,条带块,...),我想问一下我的手动参数是否正确。
RAID 6 的条带大小为 256KB:
# ./storcli64 /c0/v1 show all | grep Strip
Strip Size = 256 KB
因此,条带大小为 8*256KB = 2048KB = 2MB。这个对吗?根据这个(如果我理解正确的话),pvcreate
必须使用条带(或块)大小作为参数dataalignment
:
# pvcreate --dataalignment 256K /dev/sdb
Physical volume "/dev/sdb" successfully created
请注意,我使用了没有分区的整个 RAID 设备。现在一个
# vgcreate vgdata /dev/sdb
Volume group "vgdata" successfully created
默认 PE 大小为 4MB 应该没问题,因为它是条带大小 2MB 的倍数。正确的?
现在,vgroup 的一部分被分配给一个逻辑卷:
# lvcreate -L 40T vgdata -n lvscratch
Logical volume "lvscratch" created.
最后,创建了文件系统,但现在使用了正确的参数(条带大小为 2MB,条带宽度为 8):
# mkfs.xfs -d su=2048k,sw=8 /dev/vgdata/lvscratch
meta-data=/dev/vgdata/lvscratch isize=256 agcount=41, agsize=268434944 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=10737418240, imaxpct=5
= sunit=512 swidth=4096 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
这种方法正确吗?对于逻辑卷或卷组的扩展,有什么需要注意的吗?我想如果卷组将使用另一个 RAID6 系统进行扩展,则条带大小应该等于当前的 RAID6。
编辑:我的困惑似乎主要是基于与条带相关的术语的不同用法。我的 RAID 控制器 LSI 或 Avago 的制造商以下列方式定义术语:
条纹宽度
条带宽度是实施条带化的驱动器组中涉及的驱动器数量。例如,具有磁盘条带化的四磁盘驱动器组的条带宽度为四。
条纹尺寸
条带大小是 RAID 控制器跨多个驱动器写入的交错数据段的长度,不包括奇偶校验驱动器。例如,考虑一个包含 64 KB 磁盘空间的条带,并且在条带中的每个磁盘上都有 16 KB 的数据。在这种情况下,条带大小为 64 KB,条带大小为 16 KB。
带材尺寸
条带大小是位于单个驱动器上的条带部分。
在操作继续在下一个磁盘上之前写入或从磁盘读取的顺序数据段通常称为块、跨度或条带单元,而它们形成单个条带操作的逻辑组称为条带或条带。一个块(条带单元)中的数据量,通常以字节为单位,被不同地称为块大小、跨度大小、条带大小、条带深度或条带长度。阵列中数据磁盘的数量有时称为条带宽度,但也可能指条带内的数据量。
一个步长中的数据量乘以阵列中数据磁盘的数量(即,条带深度乘以条带宽度,在几何类比中将产生一个区域)有时称为条带大小或条带宽度。当数据块分布在多个阵列(可能是系统中的所有驱动器)上时,就会发生宽条带化。当数据块分布在单个阵列中的驱动器上时,就会出现窄条带化。
即使在 Wikipedia 上面的文字中,条纹大小也有两种不同的含义。但是,我现在想,在创建 xfs 文件系统时,必须将存储在单个驱动器上的单个块的大小作为参数提供给 su。这个,它应该mkfs.xfs -d su=256k,sw=8
在上面的命令中。正确的?
XFS 手册页没有使用“条带大小”和“条带大小”,而是分别使用术语“条带单元”和“条带宽度”。
这使得解码
mkfs.xfs(8)
手册页中令人困惑的文本成为可能:因此,当您的阵列报告条带大小为 256KiB 时,您可以指定
su=256K
或sunit=512
(因为 512 512 字节块等于 256KiB)。对于 10 个心轴(8 个数据,2 个奇偶校验),您可以指定
sw=8
(数据心轴)或swidth=2M
(条带大小乘以数据心轴)。注意,
xfs_info
并mkfs.xfs
解释sunit
为swidth
以 512B 扇区为单位指定;然而,不幸的是,这不是他们报告的单位。xfs_info
并mkfs.xfs
以基本块大小 ( ) 的倍数bsize
而不是 512B 扇区报告它们。TL;博士:
指定这些的最简单方法通常是通过条带尺寸和锭数,即
su=
条带尺寸和sw=
锭数。逻辑卷没有条带化( -i 8 -I 256k ),因此您的 xfs 文件系统只看到一个连续的单个磁盘
老问题,但可以避免其他搜索者犯同样的错误。