xfs em lvm em hardware RAID: parâmetros corretos?

7

Eu tenho 10 discos com 8 TB cada em um hardware RAID6 (assim, 8 discos de dados + 2 paridade). Seguindo a resposta de uma pergunta muito semelhante , eu esperava por uma detecção automática de todos os parâmetros necessários. No entanto, ao criar o sistema de arquivos XFS no final, recebi

# 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

Parece que essa distribuição não foi usada. Devido aos diferentes termos que encontrei em sites diferentes (tamanho da faixa, tamanho da faixa, fatia da faixa, ...), gostaria de perguntar se acertei os parâmetros manuais.

O RAID 6 foi configurado com um tamanho de faixa de 256 KB:

# ./storcli64 /c0/v1 show all | grep Strip
Strip Size = 256 KB

Assim, o tamanho da faixa é 8 * 256 KB = 2048 KB = 2 MB. Isso está correto? De acordo com isso (e se eu entendi corretamente), o pvcreate tem que usar a faixa (ou pedaço ) tamanho como argumento para dataalignment :

# pvcreate --dataalignment 256K /dev/sdb
  Physical volume "/dev/sdb" successfully created

Note que usei todo o dispositivo RAID sem partições. Agora um

# vgcreate vgdata /dev/sdb
  Volume group "vgdata" successfully created

com um tamanho de PE padrão de 4MB deve ser bom porque é um múltiplo do tamanho da faixa de 2MB. Correto?

Agora, uma parte do vgroup é atribuída a um volume lógico:

# lvcreate -L 40T vgdata -n lvscratch 
  Logical volume "lvscratch" created.

Finalmente, o sistema de arquivos é criado, mas agora com os argumentos corretos (tamanho da faixa de 2MB, largura da faixa de 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

Esta abordagem está correta? Há algo a ter em mente para uma extensão do volume lógico ou do grupo de volumes? Suponho que, se o grupo de volumes fosse estendido com outro sistema RAID6, o tamanho da faixa deveria ser igual ao atual RAID6.

EDIT : A minha confusão parece basear-se principalmente no uso diferente de termos ligados à faixa. O fabricante do meu controlador RAID, LSI ou Avago, define os termos da seguinte maneira :

Stripe Width

Stripe width is the number of drives involved in a drive group where striping is implemented. For example, a four-disk drive group with disk striping has a stripe width of four.

Stripe Size

The stripe size is the length of the interleaved data segments that the RAID controller writes across multiple drives, not including parity drives. For example, consider a stripe that contains 64 KB of disk space and has 16 KB of data residing on each disk in the stripe. In this case, the stripe size is 64 KB, and the strip size is 16 KB.

Strip Size

The strip size is the portion of a stripe that resides on a single drive.

Wikipedia (e IBM ) parecem usar outras definições:

The segments of sequential data written to or read from a disk before the operation continues on the next disk are usually called chunks, strides or stripe units, while their logical groups forming single striped operations are called strips or stripes. The amount of data in one chunk (stripe unit), often denominated in bytes, is variously referred to as the chunk size, stride size, stripe size, stripe depth or stripe length. The number of data disks in the array is sometimes called the stripe width, but it may also refer to the amount of data within a stripe.

The amount of data in one stride multiplied by the number of data disks in the array (i.e., stripe depth times stripe width, which in the geometrical analogy would yield an area) is sometimes called the stripe size or stripe width. Wide striping occurs when chunks of data are spread across multiple arrays, possibly all the drives in the system. Narrow striping occurs when the chunks of data are spread across the drives in a single array.

Mesmo no texto da Wikipedia, o tamanho da faixa acima é usado com dois significados diferentes. No entanto, suponho que agora, ao criar o sistema de arquivos xfs, o tamanho de um único bloco armazenado em uma única unidade tenha que ser fornecido como argumento para o su. Isso deve ser mkfs.xfs -d su=256k,sw=8 no comando acima. Correto?

    
por sebschub 14.07.2016 / 18:36

1 resposta

10

Em vez de "strip size" e "stripe size", as páginas man do XFS usam os termos "stripe unit" e "stripe width", respectivamente.

Isso torna possível decodificar o texto confuso na página mkfs.xfs(8) man:

               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.

Portanto, com sua matriz relatando um tamanho de faixa de 256 KiB, você deve especificar su=256K ou sunit=512 (porque 512 blocos de 512 bytes equivale a 256 KiB).

               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.

Com 10 fusos (8 dados, 2 paridades), você deve especificar sw=8 (data spindles) ou swidth=2M (o tamanho da faixa multiplicado por data spindles).

Observe que xfs_info e mkfs.xfs interpretam sunit e swidth como especificado em unidades de 512B setores; infelizmente, essa não é a unidade na qual eles são relatados. xfs_info e mkfs.xfs reportam-nos em múltiplos do seu tamanho básico de bloco ( bsize ) e não em setores de 512B.

TL; DR:

A maneira mais fácil de especificar isso é geralmente por tamanho de faixa e contagem de fusos, portanto, su= tamanho da tira e sw= contagem de fusos.

    
por 16.07.2016 / 09:32

Tags