[make-initrd] [degraded md-raid] make-initrd в p9 и в Сизифе

Leonid Krivoshein klark.devel at gmail.com
Fri Feb 28 00:26:17 MSK 2020


Доброй ночи!


27.02.2020 23:10, Alex Gladkov пишет:
> On Mon, Feb 17, 2020 at 04:23:13PM +0100, Alexey Gladkov wrote:
>> On Mon, Feb 17, 2020 at 02:27:30PM +0300, Leonid Krivoshein wrote:
>>> Привет, Алексей, ещё раз! :-)
> Я попытался исправить проблему с таймаутом при медленной инициализации
> дисков [1]. Эта проблема может как-то затрагивает и описанное здесь.

Ух-ты, не ожидал столь скорых подвижек!


> Суть фикса [2] это использовать не фиксированный таймаут для инициализации
> рейдовых дисков, а сделать его скользящим. Таймаут отчитывается от
> появления последнего raid-member. По умолчанию новый таймаут выставлен в
> 10 секунд т.е. если через 10 секунд после появления последнего
> raid-member есть рейды в состоянии inactive, то выполняется mdadm -IRs.

Хорошая идея. И задержка разумная. Но по реализации 100-timeout есть 
сомнения: использован RTC вместо твоего же MONOTONIC TIMESTAMP (а время 
в этой стадии точно не может скакануть?), перезатирается $tsfile вторым 
экземпляром (по идее, надо сначала проверять наличие PID-файла), и вот 
этот код в самом конце -- вызов mdadm -IRs в цикле (если имелась ввиду 
повторная обработка после изменения структуры /sys/block/md*/, то её не 
будет, но будет вероятно избыточные вызовы mdadm -IRs для каждого 
массива, хотя достаточно одного на все).


> Также бага [1] открыла ещё одну проблему, которую не очень понятно как
> лечить автоматически: если в /etc/mdadm.conf описан не только корень, а
> целый букет разных рейдов, то все они попадут в initrd, но при этом initrd
> не будет ждать сборки их всех. Пока лучшей идеи, чем указание кастомного
> mdadm.conf в такой ситуации у меня нет.

Виталий там написал, почему идея не очень: действительно имена md будут 
другими. Пока хороших идей нет. В идеале иметь возможность указывать 
некий target (чего должен ждать init), и чтобы этим target'ом мог бы 
быть даже некий кастомный скрипт, который определяет условие завершения 
работы. Тогда можно будет обеспечить выход после обнаружения всех 
массивов, нескольких сетевых карт, итд.


> Не могли бы заинтересованные люди потестировать фикс [2] на реальном
> железе ? У меня есть возможность протестировать в qemu, что не есть айс в
> этой ситуации.
>
> [1] https://bugzilla.altlinux.org/show_bug.cgi?id=37737
> [2] http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/fix-mdadm-timeout
>

На железе точно нет. А на PVE тот же qemu. Есть ещё VirtualBox.


>>> 17.02.2020 13:42, Alexey Gladkov пишет:
>>>> On Sun, Feb 16, 2020 at 08:31:37PM +0300, Leonid Krivoshein wrote:
>>>>> Всем привет!
>>>>>
>>>>>
>>>>> На p8 была попытка исправить проблему загрузки с деградированного массива:
>>>>>
>>>>> http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git;a=commitdiff;h=9f1bee4172c43ae7208855c6cb991e0e415d7f08
>>>>>
>>>>> В коде исправлялось сразу две проблемных ситуации (inactive и read-auto),
>>>>> но, если не ошибаюсь, исправить удалось только одну из них, вторую надо было
>>>>> лечить где-то в другом месте. Однако в новом коде такого файла (050-mdstart)
>>>>> больше нет, есть только это:
>>>>>
>>>>> http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git;a=blob;f=features/mdadm/data/lib/uevent/extenders/100-mdstart;h=3df8f9ea40654d2eeb5551ad14f7358834c03396;hb=c52b3398d8547c8d00412c153c0679968af8a58a
>>>>>
>>>>> Две ситуации исправляются руками тривиально: в случае inactive одного из
>>>>> дисков просто mdadn -IRs разово, в случае read-auto (что типично для корня
>>>>> или свопа на рейде) -- перевести его обратно в режим чтения/записи командой
>>>>> mdadm -w /dev/MDDEV. В старом коде make-initrd была задержка в 1/3 времени
>>>>> таймаута, то есть, 1 минута, которая запускает этот траблешуттер, если
>>>>> корень не обнаружился. В новом -- я вообще не понимаю, как должно работать,
>>>>> но по факту никак не работает. Система не грузится даже с только что
>>>>> созданного рейда, который не досинхронизирован до конца. Плюс к тому: shaba@
>>>>> что-то говорил, что в новом LVM другой принцип обработки обнаруженных томов
>>>>> (это уже про ситуацию, когда LVM поверх MD).
>>>>>
>>>>> Ещё такой момент: ситуацию хорошо бы исправлять для всех дисков на раннем
>>>>> этапе, а не только если корень не нашёлся. Да и неправильно это ждать минуту
>>>>> не пойми чего, когда диск который часть рейда или LVM нашёлся, о нём уже всё
>>>>> известно. Есть какие-нибудь идеи, камрады?
>>>> Вы много написали, но я явно не в контекте. Давайте по порядку.
>>>>
>>>> Есть features/mdadm/data/lib/uevent/extenders/100-mdstart.
>>>>
>>>> Он решает проблему и не решает какую проблему ?
>>>> Какие ещё проблемы есть ?
>>> Не решает ни одну из двух проблем:
>> ok. Значит он перестал работать совсем.
>>
>> Нужно будет написать тест про degraded raid. Я примерно понимаю как это
>> должно выглядеть. А вот с read-auto сложнее. Что это ?
>>
>> Можно тебя попросить написать тест (я готов ответить на любые вопросы про
>> новые end-to-end тесты) ?
>>
>>> - не "чинит" MD-устройства в состоянии "read-auto", поэтому после перехода в
>>> stage2 корень на RAID нельзя перемонтировать в режим чтения-записи.
>>>
>>> - по сравнению с make-initrd0.8.x, теперь вообще нельзя загрузиться с
>>> MD-RAID, который в состоянии "degraded", хотя для больших дисков это норма
>>> сразу после инсталляции -- они просто ещё не успели до-синхронизироваться. В
>>> старой версии отрабатывал troubleshutter by mike@, который я перетянул из
>>> p7/c7 в p8 и c8/c8.1. Во времена p7 ты утянул этот troubleshutter в
>>> тогдашний Сизиф, но видимо теперь оно совсем нерабочее.
>>>
>>> В идеале решать обе проблемы в новом make-initrd2 для любых обнаруживаемых
>>> блочных дисков, а не только для тех, на которых корень, аккуратно пытаться
>>> исправить приведёнными командами. Очевидно, обработка должна находиться не
>>> здесь, а где-то ещё.
>>>
>>> Сейчас я воспроизведу на виртуалке и отпишу более детально...
>> Было бы здорово, если бы ты выложил это куда-нибудь, чтобы мне можно тоже
>> было посмотреть.
>>
>> -- 
>> Rgrds, legion
>>
>> _______________________________________________
>> Make-initrd mailing list
>> Make-initrd at lists.altlinux.org
>> https://lists.altlinux.org/mailman/listinfo/make-initrd

-- 
Best regards,
Leonid Krivoshein.



More information about the Make-initrd mailing list