xfs sur lvm sur RAID matériel: paramètres corrects?

10

J'ai 10 disques de 8 To chacun dans un RAID6 matériel (donc 8 disques de données + 2 parités). Suite à la réponse à une question très similaire , j'espérais une détection automatique de tous les paramètres nécessaires. Cependant, lors de la création du système de fichiers XFS à la fin, j'ai eu

# 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

Il semble que la bande n'a pas été utilisée. En raison des différents termes que j'ai trouvés sur différents sites (taille de bande, taille de bande, morceau de bande, ...), je voudrais demander si j'ai bien défini les paramètres manuels.

Le RAID 6 a été configuré avec une taille de bande de 256 Ko:

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

Ainsi, la taille de la bande est de 8 * 256 Ko = 2048 Ko = 2 Mo. Est-ce correct? Selon cela (et si je comprends bien), le pvcreatedoit utiliser la taille de la bande (ou du morceau) comme argument pour dataalignment:

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

Notez que j'ai utilisé l'ensemble du périphérique RAID sans partitions. Maintenant un

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

avec une taille PE par défaut de 4 Mo devrait convenir car il s'agit d'un multiple de la taille de bande de 2 Mo. Correct?

Maintenant, une partie du vgroup est affectée à un volume logique:

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

Enfin, le système de fichiers est créé mais maintenant avec les arguments corrects (taille de bande de 2 Mo, largeur de bande 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

Cette approche est-elle correcte? Y a-t-il quelque chose à garder à l'esprit pour une extension du volume logique ou du groupe de volumes? Je suppose que si le groupe de volumes devait être étendu avec un autre système RAID6, la taille de la bande devrait être égale à l'actuelle RAID6.

EDIT : Ma confusion semble être principalement basée sur l'utilisation différente des termes liés à la bande. Le fabricant de mon contrôleur RAID, LSI ou Avago, définit les termes de la manière suivante :

Largeur de bande

La largeur de bande est le nombre de lecteurs impliqués dans un groupe de lecteurs où la répartition est implémentée. Par exemple, un groupe d'unités à quatre disques avec répartition sur disque a une largeur de bande de quatre.

Taille de bande

La taille de bande est la longueur des segments de données entrelacés que le contrôleur RAID écrit sur plusieurs disques, sans compter les disques de parité. Par exemple, considérons une bande contenant 64 Ko d'espace disque et 16 Ko de données résidant sur chaque disque de la bande. Dans ce cas, la taille de la bande est de 64 Ko et la taille de la bande est de 16 Ko.

Taille de bande

La taille de bande est la partie d'une bande qui réside sur un seul lecteur.

Wikipédia (et IBM ) semblent utiliser d'autres définitions:

Les segments de données séquentielles écrites ou lues sur un disque avant que l'opération ne se poursuive sur le disque suivant sont généralement appelés blocs, foulées ou unités de bande, tandis que leurs groupes logiques formant des opérations à bande unique sont appelés bandes ou bandes. La quantité de données dans un bloc (unité de bande), souvent libellée en octets, est appelée de manière variée la taille de bloc, la taille de foulée, la taille de bande, la profondeur de bande ou la longueur de bande. Le nombre de disques de données dans la baie est parfois appelé largeur de bande, mais il peut également faire référence à la quantité de données dans une bande.

La quantité de données dans une foulée multipliée par le nombre de disques de données dans la matrice (c'est-à-dire la profondeur de bande multipliée par la largeur de bande, ce qui dans l'analogie géométrique donnerait une zone) est parfois appelée la taille de bande ou la largeur de bande. Une large répartition se produit lorsque des blocs de données sont répartis sur plusieurs baies, éventuellement sur tous les lecteurs du système. Une répartition étroite se produit lorsque les blocs de données sont répartis sur les disques dans une seule baie.

Même dans le texte de Wikipédia, la taille de bande ci-dessus est utilisée avec deux significations différentes. Cependant, je suppose que maintenant, lors de la création du système de fichiers xfs, la taille d'un seul morceau stocké sur un seul lecteur doit être donnée comme argument à su. Cela devrait être mkfs.xfs -d su=256k,sw=8dans la commande ci-dessus. Correct?

sebschub
la source

Réponses:

12

Plutôt que «taille de bande» et «taille de bande», les pages de manuel XFS utilisent respectivement les termes «unité de bande» et «largeur de bande».

Cela permet de décoder le texte autrement déroutant dans la mkfs.xfs(8)page de manuel:

               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.

Ainsi, avec votre tableau indiquant une taille de bande de 256 Ko, vous devez spécifier soit su=256Kou sunit=512(car 512 blocs de 512 octets équivalent à 256 Ko).

               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.

Avec 10 broches (8 données, 2 parités), vous devez spécifier soit sw=8(broches de données) soit swidth=2M(la taille de bande multipliée par les broches de données).

Notez que xfs_info et mkfs.xfsinterprétez sunitet swidthcomme étant spécifié en unités de secteurs 512B; ce n'est malheureusement pas l'unité dans laquelle ils sont rapportés, cependant. xfs_infoet mkfs.xfssignalez-les en multiples de la taille de base de votre bloc ( bsize) et non dans les secteurs 512B.

TL; DR:

La façon la plus simple de les spécifier est généralement la taille de bande et le nombre de broches, donc la su=taille de bande et le sw=nombre de broches.

Michael Hampton
la source
Merci beaucoup pour la clarification! L'autre utilisation du terme taille de bande (pour le morceau sur un disque ou pour tous les disques de données en même temps) est assez déroutant ... Pouvez - vous aussi s'il vous plaît donner des détails sur l'utilisation de la taille du morceau de bande comme argument pour pvcreate« s --dataalignment?
sebschub
1
L'alignement des données doit être votre largeur de bande complète, dans ce cas 2M, et la taille de votre étendue physique avec laquelle vous utilisez vgcreatedoit être la même, ou un multiple de cela.
Michael Hampton
1

Le volume logique n'a pas été agrégé par bandes, (-i 8 -I 256k) de sorte que votre système de fichiers xfs ne voit rien d'autre qu'un disque unique contigu

Ancienne question mais sauvez les autres chercheurs de la même erreur.

mwk
la source