Alter.Org.UA
 << Back Home EN en   Donate Donate

Alternative metadata storage for GMIRROR
(fix for AR and GMIRROR compatibility)

by Alter (alterX@alter.org.ua (remove X))

Есть тазик Fujistsu-Siemens, позиционируемый как модный сервер. На борту PATA контроллер и SATA в виде LSI MegaRaid. На PATA висит CD/DVD, на SATA - 4 жестких диска, видны как /dev/ad* и /dev/ar*
Задача - собрать из них 2 RAID-1. По идее все просто:

  • либо делаем массивы средствами контроллера,
  • либо gmirror.

Но FreeBSD не умеет обновлять метаданные для этого вида контроллеров. Читать умеет, обновлять - нет. Даже в CURRENT. Неудобно, т.к. восстановление массива будет доступно только средствами BIOS. Не устраивает такой вариант. Остается gmirror. Настраиваю его (благо, не на загрузочном диске). И тут оказывается, что LSI MegaRaid

  • всегда модифицирует последний сектор диска.
  • не умеет загружаться с дисков, не содеращих его метаданных.
  • опция отдавать диск as-is (passthrough) не предусмтрена.

Приехали. Пришлось обучить gmirror держать метаданные в предпоследнем секторе. Естественно, опционально. Управляется ключиком -o 1 при создании (label) и добавлении (insert). gmirror сначала ищет свои метаданные в последнем секторе, если не находит, проверяет еще и предпоследний. При обнолениях сохраняет только там, где нашел. gmirror не перезаписывает последний сектор, если его метаданные найдены в предыдущем. Таким образом получаем совместимость с ar*.

В BIOS'е все диски настраиваются как STRIPE-массивы (каждый из одного диска). А средствами gmirror с опцией -o 1 настраиваем свою конфигурацию массива.

В 7.х включены изменения из CURRENT, касающиеся производительности.

PS. было бы правильно средствами ATA или ATARAID проверять и сигнализировать наличие метаданных soft-RAID'ов, чтобы при создании gmirror массивов это факт учитывать и выдавать предупреждение.

Бонусы

  • платформо-независимость gmirror-томов. Можно примонтировать в системе с другим RAID-контроллером или вообще без него.
  • возможность горячей замены без перезагрузки и использования средств BIOS.

Example 1

#> gmirror label -b load -o 1 gm1 ad8
#> gmirror insert -o 1 gm1 ad10
#> gmirror dump ad8
Found metadata on ad8 at offset 1.
Metadata on ad8[1]:
     magic: GEOM::MIRROR
   version: 4
   ....
#> gmirror dump ad10
Found metadata on ad10 at offset 1.
Metadata on ad10[1]:
     magic: GEOM::MIRROR
   version: 4
   ....
#> atacontrol status ar2
ar2: ATA RAID0 stripesize=128 status: READY
 subdisks:
   0 ad8  ONLINE
#> atacontrol status ar3
ar3: ATA RAID0 stripesize=128 status: READY
 subdisks:
   0 ad10  ONLINE

Example 2

#> gmirror label -v -b load gm1 ad8
#> gmirror insert -v gm1 ad10
#> gmirror dump ad8
Metadata on ad8[0]:
     magic: GEOM::MIRROR
   version: 4
   ....
#> gmirror dump ad10
Metadata on ad10[0]:
     magic: GEOM::MIRROR
   version: 4
   ....
#> atacontrol status ar2
atacontrol: ioctl(IOCATARAIDSTATUS): ....

Patch download:
7.2fbsd7-gmirror-mdoffs.20120617.patch.gz
8.x, HEADfbsd8-gmirror-mdoffs.20120617.patch.gz

FreeBSD bugtrack ID: 169539

2012.06.17


FB or mail alterX@alter.org.ua (remove X)   Share
Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2024