xfs на lvm на аппаратном RAID: правильные параметры?

10

У меня есть 10 дисков с 8 ТБ каждый в аппаратном 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 был настроен с размером полосы 256 КБ:

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

Таким образом, размер полосы составляет 8 * 256 КБ = 2048 КБ = 2 МБ. Это правильно? В соответствии с этим (и если я правильно понимаю), pvcreateнеобходимо использовать размер полосы (или чанка) в качестве аргумента для dataalignment:

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

Обратите внимание, что я использовал все устройство RAID без разделов. Сейчас

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

с размером PE по умолчанию 4 МБ должно быть хорошо, потому что он кратен размеру полосы 2 МБ. Правильный?

Теперь часть vgroup назначена логическому тому:

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

Наконец, файловая система создана, но теперь с правильными аргументами (размер полосы 2 МБ, ширина полосы 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 КБ дискового пространства и содержит 16 КБ данных, находящихся на каждом диске в полосе. В этом случае размер полосы составляет 64 КБ, а размер полосы - 16 КБ.

Размер полосы

Размер полосы - это часть полосы, которая находится на одном диске.

ВикипедияIBM ), похоже, используют другие определения:

Сегменты последовательных данных, записываемые на диск или считываемые с диска до продолжения операции на следующем диске, обычно называются блоками, шагами или единицами чередования, а их логические группы, образующие отдельные чередующиеся операции, называются чередованиями или полосами. Количество данных в одном блоке (единица полосы), часто выражаемое в байтах, по-разному называется размером фрагмента, размером шага, размером полосы, глубиной полосы или длиной полосы. Количество дисков данных в массиве иногда называют шириной полосы, но это также может относиться к объему данных в полосе.

Количество данных за один шаг, умноженное на количество дисков данных в массиве (то есть, глубина полосы, умноженная на ширину полосы, которая в геометрической аналогии дала бы область) иногда называется размером полосы или шириной полосы. Широкое чередование происходит, когда порции данных распределяются по нескольким массивам, возможно, по всем дискам в системе. Узкое чередование происходит, когда порции данных распределяются по дискам в одном массиве.

Даже в тексте Википедии размер полосы выше имеет два разных значения. Тем не менее, я полагаю, что при создании файловой системы xfs размер отдельного чанка, хранящегося на одном диске, должен быть указан в качестве аргумента su. Это должно быть mkfs.xfs -d su=256k,sw=8в команде выше. Правильный?

sebschub
источник

Ответы:

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.

Итак, если ваш массив сообщает о размере полосы 256 КБ, вы должны указать либо либо, su=256Kлибо sunit=512(поскольку 512 блоков по 512 байт равны 256 КБ).

               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.

TL; DR:

Самый простой способ указать их обычно по размеру полосы и количеству шпинделей, таким образом, su=размер полосы и sw=количество шпинделей.

Майкл Хэмптон
источник
Большое спасибо за разъяснения! Различное использование термина размер полосы (для чанка на одном диске или для всех дисков с данными вместе) весьма запутанно ... Не могли бы вы также пояснить, как использовать размер чередования в качестве аргумента для pvcreates --dataalignment?
себщуб
1
Выравнивание данных должно быть полной шириной полосы, в данном случае 2M, а размер используемого вами физического экстента vgcreateдолжен быть одинаковым или кратным.
Майкл Хэмптон
1

Логический том не был чередующимся, (-i 8 -I 256k), поэтому ваша файловая система xfs не видит ничего, кроме единого диска

Старый вопрос, но спасите других искателей от той же ошибки.

MWK
источник