По 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