我有 10 个磁盘,每个磁盘 8 TB,组成硬件 RAID6(因此,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,按以下方式定义术语:
条纹宽度
条带宽度是实施条带化的驱动器组中涉及的驱动器数量。例如,具有磁盘条带化的四磁盘驱动器组的条带宽度为 4。
条纹大小
条带大小是 RAID 控制器在多个驱动器(不包括奇偶校验驱动器)上写入的交错数据段的长度。例如,假设一个条带包含 64 KB 的磁盘空间,并且条带中的每个磁盘上都有 16 KB 的数据。在这种情况下,条带大小为 64 KB,条带大小为 16 KB。
条带尺寸
条带大小是位于单个驱动器上的条带的部分。
在下一个磁盘上继续操作之前,写入或读取磁盘的连续数据段通常称为区块、步幅或条带单元,而形成单个条带操作的逻辑组则称为条带或条带。一个区块(条带单元)中的数据量通常以字节为单位,有不同名称,称为区块大小、步幅大小、条带大小、条带深度或条带长度。阵列中的数据磁盘数量有时称为条带宽度,但也可能指条带内的数据量。
一次移动的数据量乘以阵列中的数据磁盘数量(即条带深度乘以条带宽度,在几何类比中可得出一个面积)有时称为条带大小或条带宽度。当数据块分布在多个阵列(可能是系统中的所有驱动器)中时,会发生宽条带化。当数据块分布在单个阵列中的驱动器中时,会发生窄条带化。
即使在上面的 Wikipedia 文本中,条带大小也有两种不同的含义。但是,我认为现在,在创建 xfs 文件系统时,必须将存储在单个驱动器上的单个块的大小作为 su 的参数给出。这应该mkfs.xfs -d su=256k,sw=8
在上面的命令中。对吗?
答案1
XFS 手册页不使用“条带大小”和“条带大小”,而是使用术语“条带单元”和“条带宽度”。
这使得解码手册页中令人困惑的文本成为可能mkfs.xfs(8)
:
sunit=value
This is used to specify the stripe unit for a RAID
device or a logical volume. The value has to be
specified in 512-byte block units. Use the su subop‐
tion to specify the stripe unit size in bytes. This
suboption ensures that data allocations will be
stripe unit aligned when the current end of file is
being extended and the file size is larger than
512KiB. Also inode allocations and the internal log
will be stripe unit aligned.
su=value
This is an alternative to using sunit. The su sub‐
option is used to specify the stripe unit for a RAID
device or a striped logical volume. The value has to
be specified in bytes, (usually using the m or g
suffixes). This value must be a multiple of the
filesystem block size.
因此,当您的数组报告条带大小为 256KiB 时,您可以指定或su=256K
(sunit=512
因为 512 个 512 字节块等于 256KiB)。
swidth=value
This is used to specify the stripe width for a RAID
device or a striped logical volume. The value has to
be specified in 512-byte block units. Use the sw
suboption to specify the stripe width size in bytes.
This suboption is required if -d sunit has been
specified and it has to be a multiple of the -d
sunit suboption.
sw=value
suboption is an alternative to using swidth. The sw
suboption is used to specify the stripe width for a
RAID device or striped logical volume. The value is
expressed as a multiplier of the stripe unit, usu‐
ally the same as the number of stripe members in the
logical volume configuration, or data disks in a
RAID device.
When a filesystem is created on a logical volume
device, mkfs.xfs will automatically query the logi‐
cal volume for appropriate sunit and swidth values.
对于 10 个主轴(8 个数据主轴、2 个奇偶校验主轴),您可以指定sw=8
(数据主轴)或swidth=2M
(条带大小乘以数据主轴)。
注意 xfs_info
并将和mkfs.xfs
解释sunit
为swidth
以 512B 扇区为单位指定;但不幸的是,这不是它们报告的单位。xfs_info
并mkfs.xfs
以基本块大小的倍数(bsize
)而不是 512B 扇区为单位报告它们。
总结:
指定这些的最简单方法通常是通过条带尺寸和主轴数,从而通过su=
条带尺寸和sw=
主轴数。
答案2
逻辑卷未进行条带化( -i 8 -I 256k ),因此您的 xfs 文件系统只能看到连续的单个磁盘
老问题了,但可以避免其他搜索者犯同样的错误。