[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