硬件RAID上的lvm上的xfs:参数正确吗?


10

我在硬件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必须使用strip(或chunk)大小作为参数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。

带钢尺寸

条带大小是位于单个驱动器上的条带的一部分。

维基百科(和IBM)似乎使用了其他定义:

在操作继续在下一个磁盘上之前写入磁盘或从磁盘读取的顺序数据段通常称为块,跨度或条带单元,而将它们形成单个条带化操作的逻辑组称为条带或条带。一个块(条带单元)中的数据量通常以字节为单位,被不同地称为块大小,步幅大小,条带大小,条带深度或条带长度。阵列中数据磁盘的数量有时称为条带宽度,但它也可能指的是条带中的数据量。

一步中的数据量乘以阵列中数据磁盘的数量(即,条带深度乘以条带宽度,在几何上比喻会产生一个区域)有时称为条带大小或条带宽度。当数据块分布在多个阵列(可能是系统中的所有驱动器)上时,就会发生宽条带化。当大块数据分散在单个阵列中的驱动器上时,就会发生窄条带化。

即使在Wikipedia文本中,上面的条纹大小也具有两种不同的含义。但是,我现在想,在创建xfs文件系统时,必须将存储在单个驱动器上的单个块的大小作为su​​的参数给出。这应该mkfs.xfs -d su=256k,sw=8在上面的命令中。正确?

Answers:


12

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=256Ksunit=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_infomkfs.xfs解释sunit,并swidth在512B扇区为单位被指定; 不幸的是,这不是他们所报告的单位。xfs_infomkfs.xfs以基本块大小(bsize)的倍数报告它们,而不是以512B扇区报告。

TL; DR:

指定这些参数的最简单方法通常是通过带材尺寸和锭数,即su=带材尺寸和sw=锭数。


非常感谢您的澄清!术语条带大小的不同使用情况(在一个磁盘或所有数据磁盘一起块)颇为混乱......你能不能也请详细说明条纹块大小的使用作为一个参数pvcreate--dataalignment
sebschub's

1
数据对齐方式应为您的整个条带宽度(在这种情况下为2M),并且与之配合使用的物理扩展区大小vgcreate应相同或为此值的倍数。
迈克尔·汉普顿

1

逻辑卷未划分条带(-i 8 -I 256k),因此您的xfs文件系统除了连续的单个磁盘外什么都看不到

旧问题,但可以使其他搜索者免于相同的错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.