[Comm] root raid

Aleksey Avdeev =?iso-8859-1?q?solo=5Foboroten_=CE=C1_mail333=2Ecom?=
Чт Май 22 14:20:36 MSD 2003


Владимир пишет:
> Aleksey Avdeev пишет:
> 
>> Борис Ревякин пишет:
>>
>>> On Wed, 21 May 2003 12:10:48 +0400
>>> "Aleksey Avdeev" <solo_oboroten на mail333.com> wrote:
>>>
>>>
>>>> Michael Shigorin пишет:
>>>>
>>>>> On Fri, May 16, 2003 at 11:00:00AM +0400, Борис Ревякин wrote:
>>>>>
>>>>>
>>>>>>> http://search.altlinux.ru/?q=root+raid1 по части обсуждения
>>>>>>
>>>>>>
>>>>>>
>>>>>> Михаил, обсуждения кое какие и правда есть, но я решения не нашел.
>>>>>> Пожалуйста, ткните в решение. Ну _ОЧЕНЬ_ прошу.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Оно там было, ищите -- я тоже буду искать, но не сейчас, а
>>>>> скоро...
>>>>
>>>>
>>>>
>>>>   Только загрузка на raid1 в ДЕГРАДИРОВАННОМ режиме... Как загрузить 
>>>> систему с корнем на raid1 в штатном режиме, мне лично - найти не 
>>>> удалось.
>>>>
>>>>
>>>>> Еще что-то вроде Root-RAID-Boot HOWTO содержало указание на то,
>>>>> что стоит делать /boot первым разделом и ставить загрузчик
>>>>> (точнее, именно LILO) на него.  В случае для зеркала.
>>>>
>>>>
>>>>
>>>>   При пользовании мини HOWTO "Boot + Root + Raid + Lilo : 
>>>> Программный Raid" нужно учитывать что подменой корня в Мастере 
>>>> занимается не linuxrc а кто-то другой (возможно
>>>> BusyBox или код в ядре)... А так, подобная схема у меня работала на 
>>>> ядре 2.4.20-alt5-up, сейчас делаю её же для ядра 2.4.20-alt7-up.
>>>>
>>>>
>>>>> Эх, блин -- на шляпе-то работает...
>>>>>
>>>>
>>>>   ИМХО: В Мастере проблема в том, что автодетект рейда выполняется 
>>>> ДО загрузки необходимых модулей средствами
>>>> linuxrc (помоему, даже до монтирования initrd). При этом, запись в 
>>>> initrd /sbin/modprobe (бинарник с необходимыми либами, или как линк 
>>>> на существующий там insmod) и /etc/modules.conf не помогло.   
>>>> (depmod -a в контексте initrd - тоже.)
>>>
>>>
>>>
>>>
>>> Полностью с Вами согласен.
>>> Если собрать ядро с md внутрях, то загрузка происходит нормально.
>>> Cкажите, что надо править для решения этой проблемы?
>>> Уж очень не хочется пересобирать ядра из-за этой фишки. :-(
>>
>>
>>
>>   Править надо initrd. Пока делаю это примерно так:
>>
>> 1. $ sudo mkinitrd --with raid1 --pause <initrd-image> <kernel-version>
>>
>> 2. Скрипт выведет имя каталога (у меня /tmp/initrd.*) где он создал 
>> заготовку образа и предложит нажать на ENTER после корректировок.
>>
>> 3. Я выполнял следующие (от root, всё относительно /tmp/initrd.*):
>>
>>   а) mkdir proc 
> 
> 
> 
> 
> Я обходился и обхожусь без этого.

   У меня без него raidstart работать отказывался...

> 
> 
>>
>>
>>   б) ln -s bin sbin
>>
>>   в) в bin скопировал системные umount и raidstart 
> 
> 
> 
> 
> Соответственно, umount мне не нужен.
> 
> 
>>
>>
>>   г) в lib - требуемые библиотеки (2 штуки + 2 софт линка на них какие 
>> именно - непомню: сделано дома)
>>
>>   д) в etc - /etc/raidtab 
> 
> 
> 
> 
> Вот здесь у меня получается основная "засада".
> "Теоретически", если корневой raid находится на разделе тип fd, то этот 
> файл не требуется -
> команда raidstart все необходимое должна достать из дескриптора раздела. 
> А этого не происходит.
> С raidtab все стартует, но с руганью.
> 
> md: autorun ...
> md: considering sdb2 ...
> md:  adding sdb2 ...
> md:  adding sda2 ...
> md: created md0
> md: bind<sda2,1>
> md: bind<sdb2,2>
> md: running: <sdb2><sda2>
> md: sdb2's event counter: 0000001c
> md: sda2's event counter: 0000001c
> md: RAID level 1 does not need chunksize! Continuing anyway.
> 
> Вот это мне не понятно. Для raid1 chunks необходимы. В ядре 2.4.18 этой 
> ругани не наблюдалось.
> 
> md0: max total readahead window set to 508k
> md0: 1 data-disks, max readahead per data-disk: 508k
> raid1: device sdb2 operational as mirror 1
> raid1: device sda2 operational as mirror 0
> raid1: raid set md0 active with 2 out of 2 mirrors
> md: updating md0 RAID superblock on device
> md: sdb2 [events: 0000001d]<6>(write) sdb2's sb offset: 337280
> md: sda2 [events: 0000001d]<6>(write) sda2's sb offset: 337280
> [events: 62c1a1d3]
> md: invalid raid superblock magic on md0
> 
> И вот это мне тоже не понятно, на 2.4.18 не наблюдалось.
> 
> md: md0 has invalid sb, not importing!
> md: no nested md device found
> md: ... autorun DONE.

   По моему, это автор эйд ругается. У меня он ещё пытается 
грузить md-persoanality-3 (надеюсь, название не переврал) и 
отваливается, т. к. initrd ещё не смонтирован, по моему. Наличие 
или отсутствие
raidtab при этом - значения не имеет. Во всяком случаи у меня. Но 
может я ошибаюсь. :-)

> 
> 
> Если не обращать внимания на ругань, все остальное в норме.
> 
> 
>>
>>
>>   е) в dev - используемые устройства (в моём случаи - требующиеся sd* 
>> и md*)
>>
>>   ё) дополнить linuxrc следующим кодом (шаблон):
>>
>> /bin/mount <опции, устройство> /proc
>> /bin/raidstart <md*>
>> /bin/umount /proc
> 
> 
> 
> Соответственно, обхожусь без монтирования - размонтирования /proc.
> 
>>
>> 4. Нажать на ENTER :-)
>>
>>   Разумеется решение не очень красивое (например, umount можно 
>> реализовать средствами BusyBox). :-( Над болие красивым я работаю, но 
>> это займёт время, а его - мало.
>>
> 
> А чтобы было "совсем красиво" и при выключении небыло ругани на занятое 
> устройство raid, в
> /etc/lilo.conf можно указать, что корень сидит на "половинке" raid1, а в 
> /etc/fstab, что корень на md{x}
> И для аварийной загрузки так надежнее. На ядре 2.4.18 после правки 
> rc.sysinit можно было грузиться
> обычным образом на половинку raid зеркала и потом инициализировать 
> корневой raid, с 2.4.20 так не
> получается.

   На мой взгляд данное решение страдает минимум 3 недостатками:

1. Приходится руками править rc.sysinit при после обновлений его 
меняющих.

2. Загрузка на деградированный raid может не спасти при потере 
таблицы разделов одного из винтов. Что схема с активацией через 
initrd переживает свободно. Что меня раза 3 и спасало. (Пока не 
подобрал комбинацию железа, которое смогло работать не просаживая 
источник питания. :-))

3. Решение частное и не расширяемое, т. к. работает ТОЛЬКО для 
raid1: если по каким либо причинам потребуется размещать корень 
на массиве другого типа... Или поместить корень на LVM - оно 
работать не будет. Такие конфигурации возможны в первую очередь 
через initrd.

   Нехочу обсуждать сдесь (эта тема tallc-room) нужны ли вообще 
такие варианты положения корня, но явных запретов на их 
существование я не вижу. И ИМХО: Полезно быть к этому готовым.

   А на самом деле, хотелось бы, чтобы mkinitrd сам обеспечивал 
поддержку таких конфигураций каким либо стандартным образом.

-- 

С уважением. Алексей.





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