[devel] software raid root

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Ср Июл 9 20:20:51 MSD 2003


Hello!

Я позанимался вопросом загрузки системы с корнем на software RAID (на
простом md - без EVMS). Сейчас это у нас не работает - а зря.

Причина неработоспособности очевидна: автоопределение разделов с RAID
происходит слишком рано - ещё до обработки initrd, когда никакие
модули RAID ещё не загружены; в самом initrd тоже нет средств для
запуска RAID.

Возможны два подхода к решению этой проблемы:

1) Использование уже имеющихся средств автооопределения разделов RAID
с соответствующими исправлениями, чтобы автозапуск RAID выполнялся из
initrd после загрузки всех нужных модулей.

2) Запуск RAID с помощью raidstart из initrd.

Вариант с автоопределением лучше тем, что получающаяся система более
устойчива к изменениям конфигурации. Например, можно как угодно
переставлять диски - изменение имён устройств автоматически
обнаруживается, и система загружается без проблем. В случае с
raidstart это не пройдёт - если имена устройств изменятся, загрузка
системы будет либо вообще невозможна (если изменится имя первого
диска; raidstart берёт только первый диск из raidtab), либо RAID
запустится в деградированном режиме (если переместился другой диск). Я
сделал поддержку первого варианта - с автоопределением.

В драйвере md уже есть средство для запуска автоопределения в нужный
момент - ioctl RAID_AUTORUN; это работает, если md.c вкомпилирован в
ядро. Правда, если остальные части RAID собраны модулями, при загрузке
выдаётся куча сообщений об ошибке запуска RAID, но, как выяснилось,
это не мешает второй попытке запуска - просто некрасиво. Можно слегка
подпатчить ядро по этому поводу - не запускать автоопределение, если
ни один тип RAID не зарегистрирован.

В принципе можно сделать даже так, чтобы автоопределение работало даже
при вынесении md.o в модуль - для этого оттуда надо вытащить маленький
кусок, отвечающий за сбор списка разделов RAID, и вкомпилировать его в
ядро, а также вернуть в код md.o функцию автозапуска (обычно при
сборке модуля она оттуда выбрасывается). Этот патч получается
несколько больше - там приходится патчить ещё и fs/partitions/*.c
(#ifdef CONFIG_BLK_DEV_MD).

Сейчас собрал такую конструкцию (в том числе с md.o в модуле),
попробовал на ядре на базе 2.4.21-std-up-alt1 (хотя по патчам оно уже
почти alt3), подёргал туда-сюда диски (IDE) - работает, также спокойно
переносит издевательства вроде перестановки дисков местами или с
master на slave. RAID5 и т.п. не пробовал - только RAID1.

Ещё попробовал на старом ядре (под руку подвернулось не вытертое со
времени установки 2.4.20-alt5-up) - с ним тоже работает (с руганью при
первой неудачной попытке запуска; добавлением опции raid=noautodetect
и эта ругань убирается).

Получился следующий набор патчей (два в mkinitrd и два в ядро):

busybox-0.60.5-alt-raidautorun.patch - добавляет в busybox из пакета
mkinitrd команду raidautorun, которая запускает автоопределение RAID.

mkinitrd-2.8.7-alt-rootraid.patch - дополнение для mkinitrd; при
обнаружении /dev/md* в fstab вставляет вызов raidautorun в создаваемый
linuxrc.

01_md-delay-autostart.patch - убирает бесполезный вызов
autostart_arrays(), если не зарегистрирована поддержка ни одного типа
RAID.

02_md-autodetect-module.patch - позволяет использовать RAID_AUTORUN
даже при выносе md.o в модуль (в ядре остаётся только
md_autodetect_dev()). Для включения необходимо дополнительно включить
в конфигурации ядра CONFIG_BLK_DEV_MD_AUTODETECT. Если не собирать
md.o модулем, этот патч не нужен.

-- 
Sergey Vlasov
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : busybox-0.60.5-alt-raidautorun.patch
Тип     : application/octet-stream
Размер  : 2975 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20030709/d2f62264/attachment-0004.obj>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : mkinitrd-2.8.7-alt-rootraid.patch
Тип     : application/octet-stream
Размер  : 838 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20030709/d2f62264/attachment-0005.obj>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : 01_md-delay-autostart.patch
Тип     : application/octet-stream
Размер  : 695 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20030709/d2f62264/attachment-0006.obj>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : 02_md-autodetect-module.patch
Тип     : application/octet-stream
Размер  : 8019 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20030709/d2f62264/attachment-0007.obj>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20030709/d2f62264/attachment-0001.bin>


Подробная информация о списке рассылки Devel