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

mdadm и 4k секторы (расширенный формат)

По Serverfault есть множество вопросов о выравнивании дисков 4k секторов, но одна вещь мне пока не совсем ясна.

Я успешно выровнял свой RAID1 + LVM. Одна из вещей, которые я сделал, - это использование суперблока mdadm версии 1.0 (который хранит суперблок в конце диска).

На странице руководства сказано следующее:

В разных подверсиях суперблок хранится в разных местах на устройстве: в конце (для 1.0), в начале (для 1.1) или 4K с начала (для 1.2). «1» эквивалентно «1.0». «default» эквивалентно «1.2».

Версия 1.2, которая установлена ​​по умолчанию, предназначена для дисков 4k секторов? На мой взгляд, это не так, потому что 4k от начала + длина суперблока не является множеством 4k (длина суперблока составляет около 200 байт, если я правильно помню).

Любое понимание этого приветствуется.

редактировать:

ниже был дан ответ, что суперблоки mdadm 1.1 и 1.2 предназначены для выравнивания 4k. Я только что создал рейд для всего устройства:

mdadm --create /dev/md4 -l 1 -n 2 /dev/sdb /dev/sdd

Затем я добавил к нему логический том:

vgcreate universe2 /dev/md4

Массив синхронизируется со скоростью 16 МБ / с:

md4 : active raid1 sdd[1] sdb[0]
      1465137424 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.8% (13100352/1465137424) finish=1471.6min speed=16443K/sec

Поэтому я сомневаюсь, что он правильно выровнен.

(диски - это WD EARS на 1,5 ТБ. Они у меня есть на моем настольном ПК, и они синхронизируются со скоростью около 80 МБ / с.)

Edit2:

Вот - просмотрите вывод:

# mdadm --examine /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 79843828:7d939cce:1c8f0b32:cf339870
           Name : brick:4  (local to host brick)
  Creation Time : Sat Jul  9 10:47:33 2011
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 2930275120 (1397.26 GiB 1500.30 GB)
     Array Size : 2930274848 (1397.26 GiB 1500.30 GB)
  Used Dev Size : 2930274848 (1397.26 GiB 1500.30 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : dd2e3b5f:33214b96:1cb88169:25deb050

    Update Time : Sat Jul  9 10:49:06 2011
       Checksum : 4f7cd785 - correct
         Events : 1


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing)

Смещение данных составляет 2048 секторов, которые делятся на 8, так что можно подумать, что это нормально. Группа томов имеет размер физического экстента 4 МиБ, который также делится на 8. Но это даже не имеет значения, потому что повторная синхронизация не связана с тем, что содержит устройство.

Еще одно редактирование: похоже, это не проблема выравнивания; поскольку hdparm -t показывает очень низкую скорость чтения для одного из дисков (30 МБ / с). Что-то еще не так.

Edit2: Я никогда не забываю обновлять этот пост, когда нашел ответ. Все красиво выровнено. Один из дисков был сломан. Судя по всему, он был на последнем этапе и даже сломался в какой-то момент. Сменный диск работал нормально.

Да, это сделано для выравнивания сектора 4k.

В суперблоках 1.1 и 1.2 пространство резервируется в начале каждого диска, чтобы суперблок не был вытеснен. Код создания суперблока заставляет это зарезервированное пространство быть кратным 4 КБ. Все физические чтения смещены с конца этого зарезервированного места, а не с конца суперблока. Таким образом, сохраняется выравнивание для любого размера сектора, который равномерно делится на 4 КБ.

Если вам интересно, вот доказательство от исходный код mdadm (super1.c):

/* force 4K alignment */
reserved &= ~7ULL;
sb->data_offset = __cpu_to_le64(reserved);

И это data_offset параметр используется Код RAID1 в ядре для компенсации физических чтений, например в пути чтения:

read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset