Здравствуйте,
пишу сюда маленький отчет о том, что получилось:
дано: платформа в ДЦ, там 1 SSD и 2 HDD
ls /dev/disk/by-id/
scsi-SATA_OCZ-VERTEX3_OCZ-SR1JY2829D281969
scsi-SATA_TOSHIBA_DT01ACA_15354TTGS
scsi-SATA_WDC_WD3000FYYZ-_WD-WCC133RT47RK
цель: установить на зеркало из 2-х HDD систему так, чтобы даже в случае если из сервера вынут SSD и один HDD, система могла бы быть загружена и работать.
Решений в интернете много, но мне в этих решениях не нравилось собирать массив из разделов дисков (/dev/sd[bc]1), а не из самих дисков (/dev/sdb, /dev/sdc). Получается так, что после замены диска в массиве нужно будет вспоминать как был разбит бывший, создавать разделы на новом и добавлять созданные разделы в рейд руками.
Не буду утомлять пересказом множества инструкций на тему как установить систему на один диск, а потом перетащить её на софт-рейд.
Перейду сразу к трудности: когда диски больше 2TB зеркало может иметь суперблок с метаданными версии 1.2 и не может версии 0.9. Старое ядро не умеет работать с метаданными 1.2.
Решение:
1) в initrd добавил модулей и вызов mdadm для сборки массива до монтирования рута.
2) суперблок начинается по смещению 4К от начала диска, GPT таблица разделов рейда начинается с 34К, а по смещению 0 у нас нули, легси биос не видит ни одного загрузочного устройства, если не специального раздела с каталогом /boot
Загрузчиком ОС выступает Extlinux (Syslinux), а он свой код хранит в разделе с ОС.
Решение получилось такое: рисуем на обоих дисках по смещению 0 mbr с единственным разделом (который первый в md-рейд, в котором /boot) и добавляем загрузочный код от Syslinux 440 байт.
Пришлось в ручную считать новое смещение раздела (с учетом суперблока md-рейда и GPT) оно получилось 2320 секторов (первый раздел в рейде имеет смещение 2048) и пользоваться давно забытыми инструментами.
Работает.
gdisk, mbr, mdadm, metadata, raid1