xfs en lvm en RAID de hardware: ¿parámetros correctos?

10

Tengo 10 discos con 8 TB cada uno en un RAID6 de hardware (por lo tanto, 8 discos de datos + 2 paridad). Siguiendo la respuesta de una pregunta muy similar , esperaba una detección automática de todos los parámetros necesarios. Sin embargo, al crear el sistema de archivos XFS al final, obtuve

# 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

Esto parece que las rayas no se han utilizado. Debido a los diferentes términos que encontré en diferentes sitios (tamaño de banda, tamaño de banda, fragmento de banda, ...), me gustaría preguntar si entendí bien los parámetros manuales.

El RAID 6 se ha configurado con un tamaño de tira de 256 KB:

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

Por lo tanto, el tamaño de la franja es 8 * 256 KB = 2048 KB = 2 MB. ¿Es esto correcto? De acuerdo con esto (y si lo entiendo correctamente), el pvcreatetiene que usar el tamaño de la tira (o fragmento) como argumento para dataalignment:

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

Tenga en cuenta que utilicé todo el dispositivo RAID sin particiones. Ahora un

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

con un tamaño de PE predeterminado de 4 MB debería estar bien porque es un múltiplo del tamaño de banda de 2 MB. ¿Correcto?

Ahora, una parte del vgroup se asigna a un volumen lógico:

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

Finalmente, se crea el sistema de archivos pero ahora con los argumentos correctos (tamaño de banda de 2 MB, ancho de banda 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

¿Es correcto este enfoque? ¿Hay algo a tener en cuenta para una extensión del volumen lógico o el grupo de volúmenes? Supongo que si el grupo de volúmenes se ampliara con otro sistema RAID6, el tamaño de la tira debería ser igual al RAID6 actual.

EDITAR : Mi confusión parece estar basada principalmente en el uso diferente de términos relacionados con stripe. El fabricante de mi controlador RAID, LSI o Avago, define los términos de la siguiente manera :

Ancho de la raya

El ancho de banda es el número de unidades involucradas en un grupo de unidades donde se implementan las bandas. Por ejemplo, un grupo de unidades de cuatro discos con bandas de disco tiene un ancho de banda de cuatro.

Tamaño de la raya

El tamaño de la franja es la longitud de los segmentos de datos intercalados que el controlador RAID escribe en varias unidades, sin incluir las unidades de paridad. Por ejemplo, considere una banda que contiene 64 KB de espacio en disco y tiene 16 KB de datos que residen en cada disco de la banda. En este caso, el tamaño de la franja es de 64 KB y el tamaño de la franja es de 16 KB.

Tamaño de la tira

El tamaño de la franja es la parte de una franja que reside en una sola unidad.

Wikipedia (e IBM ) parecen usar otras definiciones:

Los segmentos de datos secuenciales escritos o leídos desde un disco antes de que la operación continúe en el siguiente disco generalmente se denominan fragmentos, bandas o unidades de bandas, mientras que sus grupos lógicos que forman operaciones de bandas individuales se denominan bandas o bandas. La cantidad de datos en un trozo (unidad de banda), a menudo denominada en bytes, se conoce de varias maneras como el tamaño del fragmento, el tamaño de la banda, el tamaño de la banda, la profundidad de la banda o la longitud de la banda. El número de discos de datos en la matriz a veces se denomina ancho de banda, pero también puede referirse a la cantidad de datos dentro de una banda.

La cantidad de datos en una banda multiplicada por el número de discos de datos en la matriz (es decir, profundidad de banda por ancho de banda, que en la analogía geométrica produciría un área) a veces se denomina tamaño de banda o ancho de banda. Las franjas anchas se producen cuando fragmentos de datos se distribuyen en múltiples matrices, posiblemente en todas las unidades del sistema. Las bandas estrechas se producen cuando los fragmentos de datos se extienden a través de las unidades en una sola matriz.

Incluso en el texto de Wikipedia, el tamaño de la banda anterior se usa con dos significados diferentes. Sin embargo, supongo que ahora, cuando se crea el sistema de archivos xfs, el tamaño de un solo fragmento almacenado en una sola unidad debe darse como argumento para su. Esto, debería estar mkfs.xfs -d su=256k,sw=8en el comando anterior. ¿Correcto?

sebschub
fuente

Respuestas:

12

En lugar de "tamaño de banda" y "tamaño de banda", las páginas de manual de XFS utilizan los términos "unidad de banda" y "ancho de banda" respectivamente.

Esto hace posible decodificar el texto confuso en la mkfs.xfs(8)página de manual:

               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.

Entonces, con su matriz informando un tamaño de tira de 256KiB, debe especificar cualquiera su=256Ko sunit=512(porque 512 bloques de 512 bytes equivalen a 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.

Con 10 cabezales (8 datos, 2 paridad) usted especificaría sw=8(ejes de datos) o swidth=2M(el tamaño de la tira multiplicado por los ejes de datos).

Tenga en cuenta que xfs_info e mkfs.xfsinterpretar sunity swidthcomo se especifica en unidades de 512B sectores; sin embargo, lamentablemente esa no es la unidad en la que se informa. xfs_infoe mkfs.xfsinformarlos en múltiplos de su tamaño de bloque básico ( bsize) y no en sectores de 512B.

TL; DR:

La forma más fácil de especificarlos suele ser por el tamaño de la tira y el número de husillos, por lo tanto su=, el tamaño de la tira y el sw=número de husillos.

Michael Hampton
fuente
Muchas gracias por la aclaración! El uso diferente del término tamaño de banda (para el fragmento en un disco o para todos los discos de datos juntos) es bastante confuso ... ¿Podría también explicar el uso del tamaño del fragmento de banda como argumento para pvcreate's --dataalignment?
sebschub
1
La alineación de los datos debe ser el ancho total de la franja, en este caso 2M, y el tamaño de extensión física que use vgcreatedebe ser el mismo o un múltiplo de este.
Michael Hampton
1

El volumen lógico no estaba dividido, (-i 8 -I 256k), por lo que su sistema de archivos xfs no ve nada más que un solo disco contiguo

Antigua pregunta pero salva a otros buscadores del mismo error.

mwk
fuente