| 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:
 
 FreeBSD bugtrack ID: 169539
 
 2012.06.17
 
 
 FB
  or mail alterX@alter.org.ua (remove X)
   
  Share     
 |