Назад | Перейти на главную страницу

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

У меня есть 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 в команде выше. Верный?

Вместо «размер полосы» и «размер полосы» в справочных страницах 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), а не в секторах 512Б.

TL; DR:

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

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

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