Bug 28582

Summary: Автозамена алгоритма может сделать неработоспособный initrd
Product: Sisyphus Reporter: serpiph <serpiph>
Component: make-initrdAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: glebfm, jinn, lav, ldv, legion, placeholder, real.altlinux.org
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
initrd для 3.7.9-std-def-alt1 с AUTODETECT=all
none
initrd для 3.7.9-std-def-alt1 с AUTODETECT=common none

Description serpiph 2013-02-20 11:33:44 MSK
У меня 2 компьютера, у которых не работает алгоритм автопоиска root (пытается загрузить модули ide, из-за этого компьютер вешается на этапе загрузки), поэтому я в /etc/initrd.mk прописал:

AUTODETECT = common

MODULES_ADD += crc-t10dif sd_mod libata ata_piix pata_acpi ata_generic xfs
FEATURES += add-modules compress cleanup

При обновлении с 0.8.0-alt1 до 0.8.1-alt1 происходит принудительное исправление автодетектирования на all, из-за этого ломается сборка initrd с получением такого режима загрузки:

...
initrd: Generation fstab...
initrd: Initialize lo interface...
initrd: Starting sysklog...
chdir: /etc/syslog.d: No such file or directory
initrd: Loading modules before udevd...
initrd: Starting udevd...
initrd: Processing kernel events...
<в этом месте большая временная пауза>
initrd: loop: ERROR: /root: Not mounted
initrd: Stage 'loop' failed
initrd: This shell remains here for debug purposes. Press Ctrl-D to continue.
(initramfs)

По Ctrl-D происходит kernel panic из-за попытки закрыть процесс с PID=1.

Не надо никаких автозамен работы make-initrd!

P.S. Опечатка: вместо 'Generation fstab...' надо писать 'Generating fstab...'
Comment 1 serpiph 2013-02-20 11:34:57 MSK
После отката с 'all' на 'common' всё вернулось в норму.
Comment 2 serpiph 2013-02-20 11:38:46 MSK
Created attachment 5744 [details]
initrd для 3.7.9-std-def-alt1 с AUTODETECT=all

Образ загрузочного диска с режимом детектирования AUTODECT=all
Comment 3 serpiph 2013-02-20 11:40:21 MSK
Created attachment 5745 [details]
initrd для 3.7.9-std-def-alt1 с AUTODETECT=common

Загрузочный образ для 3.7.9-alt1 с AUTODETECT=common, остальное тоже самое.
Comment 4 Alexey Gladkov 2013-02-20 15:24:53 MSK
Дело в том, что common теперь уже не тот, что в предыдущей версии. Наиболее близкий вариант при миграции это добавить вместо common новый all.

В вашей конфигурации (учитывая добавление FEATURES) AUTODETECT вообще не нужен.
Comment 5 serpiph 2013-02-20 17:11:21 MSK
Вообще без AUTODETECT тоже не работает. :)
Comment 6 Alexey Gladkov 2013-02-20 18:36:32 MSK
(В ответ на комментарий №5)
> Вообще без AUTODETECT тоже не работает. :)

С "AUTODETECT =" в /etc/initrd.mk ?
Comment 7 serpiph 2013-02-21 08:55:47 MSK
(В ответ на комментарий №6)
> С "AUTODETECT =" в /etc/initrd.mk ?

Со строкой

AUTODETECT=common 

проблем меньше всего. Не могу понять, но мой вариант подобрался методом проб и ошибок. Почему-то совсем без AUTODETECT с предыдущими версиями make-initrd на некоторых ядрах загрузка не идёт. Закономерности в отказах не вижу.

В результате при обновлении имеющийся AUTODETECT от предыдущей версии заменяется непонятно на что.

Вы предлагаете проверить загрузку с образом, созданным совсем без AUTODETECT?
Comment 8 Alexey Gladkov 2013-02-21 10:50:18 MSK
(В ответ на комментарий №7)
> Не могу понять, но мой вариант подобрался методом проб и
> ошибок. Почему-то совсем без AUTODETECT с предыдущими версиями make-initrd на
> некоторых ядрах загрузка не идёт. Закономерности в отказах не вижу.

Отключение AUTODETECT как в старой, так и в новой версии возлагает на вас обязанность прописать в конфиг абсолютно все модули. Единственное с чем поможет make-initrd, так это с зависимостями модулей, которые он запакует.

Если вы что-нибудь забыли, то система не загрузится.

> Вы предлагаете проверить загрузку с образом, созданным совсем без AUTODETECT?

Если ide модули необходимы на этой машине, но мешают созданию образа, то попробуйте собрать initrd с вот таким конфигом:

AUTODETECT = all
FEATURES += ide-to-scsi

P.S. Эта ошибка максимум Severity:major.
Comment 9 serpiph 2013-02-21 11:19:33 MSK
(В ответ на комментарий №8)

> Отключение AUTODETECT как в старой, так и в новой версии возлагает на вас
> обязанность прописать в конфиг абсолютно все модули. Единственное с чем поможет
> make-initrd, так это с зависимостями модулей, которые он запакует.

Начиная с версии 3.4, модули подсистемы ide почему-то вешают загрузку. Винчестер не определяется, поэтому нет корня и т.д.
 
> Если вы что-нибудь забыли, то система не загрузится.

Я как раз и прописал то, что мне нужно.
 
> > Вы предлагаете проверить загрузку с образом, созданным совсем без AUTODETECT?
> 
> Если ide модули необходимы на этой машине, но мешают созданию образа, то
> попробуйте собрать initrd с вот таким конфигом:
> 
> AUTODETECT = all
> FEATURES += ide-to-scsi

Модули ide как раз не нужны, их загрузка мешает, но возможно подключение ide-устройств, поэтому приходится модули держать в системе:

# lsmod
Module                  Size  Used by
ipv6                  280669  20 
8139too                19150  0 
nouveau               803085  1 
snd_intel8x0           25435  0 
snd_ac97_codec         97109  1 snd_intel8x0
mxm_wmi                 1522  1 nouveau
wmi                     8119  2 mxm_wmi,nouveau
video                  11030  1 nouveau
ttm                    58081  1 nouveau
drm_kms_helper         34681  1 nouveau
drm                   217390  3 ttm,drm_kms_helper,nouveau
uhci_hcd               20364  0 
ehci_hcd               40061  0 
usbcore               150362  2 uhci_hcd,ehci_hcd
snd_pcm                74003  2 snd_ac97_codec,snd_intel8x0
snd_page_alloc          7219  2 snd_intel8x0,snd_pcm
snd_timer              17275  1 snd_pcm
snd                    48541  4 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm
soundcore                849  1 snd
mii                     4395  1 8139too
hwmon                   1408  1 nouveau
i2c_algo_bit            4998  1 nouveau
skge                   35585  0 
ac97_bus                1011  1 snd_ac97_codec
iTCO_wdt                4877  0 
usb_common               802  1 usbcore
iTCO_vendor_support     2391  1 iTCO_wdt
moxa                   15293  14 
sr_mod                 13205  0 
cdrom                  32019  1 sr_mod
intel_agp               9274  1 
intel_gtt              13381  1 intel_agp
agpgart                27972  4 drm,ttm,intel_agp,intel_gtt
lpc_ich                10194  0 
i2c_i801                8656  0 
mperf                   1232  0 
ppdev                   5034  0 
rtc_cmos                8519  0 
microcode              10714  0 
parport_pc             28078  0 
floppy                 50934  0 
parport                31107  2 ppdev,parport_pc
evdev                   8164  2 
processor              26833  0 
pcspkr                  1483  0 
button                  4416  1 nouveau
psmouse                68836  0 
autofs4                20710  2 
xfs                   740612  5 
sd_mod                 35360  7 
crc_t10dif              1264  1 sd_mod
ata_generic             2735  0 
pata_acpi               2698  0 
ata_piix               20592  6 
libata                175819  3 pata_acpi,ata_generic,ata_piix
scsi_mod              173106  3 libata,sd_mod,sr_mod
#

> P.S. Эта ошибка максимум Severity:major.

Я считаю, что блокер (ну или критичная), так как идёт тихая подмена режима работы make-initrd. Строчка "переход на новую схему" в глаза совершенно не бросается среди других сообщений и никак не понуждает проверить make-initrd.  Что в дальнейшем ведёт к подлянке при установке нового ядра в систему.

У людей могут быть и другие схемы работы make-initrd.

Неужели настолько большие изменения в make-initrd, что необходимо принудительно переводить детектирование на all? Я ещё могу понять перевод стандартной схемы "common"+"root".
Comment 10 Alexey Gladkov 2013-02-21 11:37:53 MSK
(В ответ на комментарий №9)
> (В ответ на комментарий №8)
> 
> > Отключение AUTODETECT как в старой, так и в новой версии возлагает на вас
> > обязанность прописать в конфиг абсолютно все модули. Единственное с чем поможет
> > make-initrd, так это с зависимостями модулей, которые он запакует.
> 
> Начиная с версии 3.4, модули подсистемы ide почему-то вешают загрузку.
> Винчестер не определяется, поэтому нет корня и т.д.
> 
> > Если вы что-нибудь забыли, то система не загрузится.
> 
> Я как раз и прописал то, что мне нужно.
> 
> > > Вы предлагаете проверить загрузку с образом, созданным совсем без AUTODETECT?
> > 
> > Если ide модули необходимы на этой машине, но мешают созданию образа, то
> > попробуйте собрать initrd с вот таким конфигом:
> > 
> > AUTODETECT = all
> > FEATURES += ide-to-scsi
> 
> Модули ide как раз не нужны, их загрузка мешает, но возможно подключение
> ide-устройств, поэтому приходится модули держать в системе:
> 
> # lsmod
> Module                  Size  Used by
> ipv6                  280669  20 
> 8139too                19150  0 
> nouveau               803085  1 
> snd_intel8x0           25435  0 
> snd_ac97_codec         97109  1 snd_intel8x0
> mxm_wmi                 1522  1 nouveau
> wmi                     8119  2 mxm_wmi,nouveau
> video                  11030  1 nouveau
> ttm                    58081  1 nouveau
> drm_kms_helper         34681  1 nouveau
> drm                   217390  3 ttm,drm_kms_helper,nouveau
> uhci_hcd               20364  0 
> ehci_hcd               40061  0 
> usbcore               150362  2 uhci_hcd,ehci_hcd
> snd_pcm                74003  2 snd_ac97_codec,snd_intel8x0
> snd_page_alloc          7219  2 snd_intel8x0,snd_pcm
> snd_timer              17275  1 snd_pcm
> snd                    48541  4 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm
> soundcore                849  1 snd
> mii                     4395  1 8139too
> hwmon                   1408  1 nouveau
> i2c_algo_bit            4998  1 nouveau
> skge                   35585  0 
> ac97_bus                1011  1 snd_ac97_codec
> iTCO_wdt                4877  0 
> usb_common               802  1 usbcore
> iTCO_vendor_support     2391  1 iTCO_wdt
> moxa                   15293  14 
> sr_mod                 13205  0 
> cdrom                  32019  1 sr_mod
> intel_agp               9274  1 
> intel_gtt              13381  1 intel_agp
> agpgart                27972  4 drm,ttm,intel_agp,intel_gtt
> lpc_ich                10194  0 
> i2c_i801                8656  0 
> mperf                   1232  0 
> ppdev                   5034  0 
> rtc_cmos                8519  0 
> microcode              10714  0 
> parport_pc             28078  0 
> floppy                 50934  0 
> parport                31107  2 ppdev,parport_pc
> evdev                   8164  2 
> processor              26833  0 
> pcspkr                  1483  0 
> button                  4416  1 nouveau
> psmouse                68836  0 
> autofs4                20710  2 
> xfs                   740612  5 
> sd_mod                 35360  7 
> crc_t10dif              1264  1 sd_mod
> ata_generic             2735  0 
> pata_acpi               2698  0 
> ata_piix               20592  6 
> libata                175819  3 pata_acpi,ata_generic,ata_piix
> scsi_mod              173106  3 libata,sd_mod,sr_mod
> #
> 
> > P.S. Эта ошибка максимум Severity:major.

> Я считаю, что блокер (ну или критичная),

http://www.altlinux.org/Bug_Severity_Policy

> так как идёт тихая подмена режима

Изменение происходит не тихо.

> работы make-initrd. Строчка "переход на новую схему" в глаза совершенно не
> бросается среди других сообщений и никак не понуждает проверить make-initrd. 

Если не провести миграцию, то у большинства пользователей проблем будет больше.

> Что в дальнейшем ведёт к подлянке при установке нового ядра в систему.

Проблемы могут быть, но не фатальные. Старая конфигурация остаётся в конфиге закомментированной.

> Неужели настолько большие изменения в make-initrd, что необходимо принудительно
> переводить детектирование на all?

Изменения большие.
Comment 11 Alexey Gladkov 2013-02-21 11:43:21 MSK
(В ответ на комментарий №9)
> Начиная с версии 3.4, модули подсистемы ide почему-то вешают загрузку.
> Винчестер не определяется, поэтому нет корня и т.д.

Это известная проблема.

> > Если ide модули необходимы на этой машине, но мешают созданию образа, то
> > попробуйте собрать initrd с вот таким конфигом:
> > 
> > AUTODETECT = all
> > FEATURES += ide-to-scsi
> 
> Модули ide как раз не нужны, их загрузка мешает, но возможно подключение
> ide-устройств, поэтому приходится модули держать в системе:

Я вас правильно понял и предложил конфиг.
Comment 12 serpiph 2013-02-21 12:18:13 MSK
(В ответ на комментарий №11)

> Я вас правильно понял и предложил конфиг.

Хорошо, попробую Ваш вариант.(В ответ на комментарий №10)

> (В ответ на комментарий №9)
> http://www.altlinux.org/Bug_Severity_Policy

У меня как раз вся система встала колом. :)
 
> Изменение происходит не тихо.

Сообщение я увидел случайно, а в конфиге я еле понял, что и как было закомментировано, так как там было опробовано несколько вариантов и оставлено в комментариях "на потом". Стало совершенно неинформативно.
 
> Если не провести миграцию, то у большинства пользователей проблем будет больше.

Понятно.
 
> Проблемы могут быть, но не фатальные. Старая конфигурация остаётся в конфиге
> закомментированной.

У меня оказалось почти фатальным. :)
 
> > Неужели настолько большие изменения в make-initrd, что необходимо принудительно
> > переводить детектирование на all?
> 
> Изменения большие.

Понятно. Жаль, что такие большие изменения отмечены только субминорным номером. Нелогично. Кстати, анонса изменений нигде нет.
Comment 13 Alexey Gladkov 2013-02-21 15:00:37 MSK
(В ответ на комментарий №12)
> У меня как раз вся система встала колом. :)

Почти не считается :)

> Сообщение я увидел случайно, а в конфиге я еле понял, что и как было
> закомментировано, так как там было опробовано несколько вариантов и оставлено в
> комментариях "на потом".

Ну извините. Такое мне предугадать сложно :)

> Понятно. Жаль, что такие большие изменения отмечены только субминорным номером.

Десятичная система.

> Кстати, анонса изменений нигде нет.

Это не единственная проблема этого проекта, о которых могу рассказать в привате.
Не люблю лирики в постах.
Comment 14 serpiph 2013-02-22 09:58:20 MSK
Попробовал Ваш вариант, получилось загрузиться.
При этом список модулей такой:

# make-initrd
Config file: /etc/initrd.mk
Generating module dependencies on host ...
Creating initrd image ...
Adding modules ...
Generating module dependencies in image ...
Adding resue modules ...
Adding syslog support ...
Packed modules: 8139too ata_generic ata_piix cdrom crc-t10dif evbug evdev libata mii pata_acpi pci_hotplug scsi_mod sd_mod serio_raw shpchp skge sr_mod xfs 
Packing image to archive ...
Compressing image ...
Installing image ...
Removing work directory ...

Image is saved as /boot/initrd-3.7.9-std-def-alt1.img

#
Comment 15 serpiph 2013-02-22 10:00:28 MSK
Список модулей при новой загрузке.
# lsmod
Module                  Size  Used by
ipv6                  280669  16 
nouveau               803085  1 
snd_intel8x0           25435  0 
snd_ac97_codec         97109  1 snd_intel8x0
mxm_wmi                 1522  1 nouveau
wmi                     8119  2 mxm_wmi,nouveau
video                  11030  1 nouveau
ttm                    58081  1 nouveau
drm_kms_helper         34681  1 nouveau
drm                   217390  3 ttm,drm_kms_helper,nouveau
uhci_hcd               20364  0 
iTCO_wdt                4877  0 
ehci_hcd               40061  0 
usbcore               150362  2 uhci_hcd,ehci_hcd
hwmon                   1408  1 nouveau
i2c_algo_bit            4998  1 nouveau
snd_pcm                74003  2 snd_ac97_codec,snd_intel8x0
snd_page_alloc          7219  2 snd_intel8x0,snd_pcm
snd_timer              17275  1 snd_pcm
snd                    48541  4 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm
soundcore                849  1 snd
iTCO_vendor_support     2391  1 iTCO_wdt
ac97_bus                1011  1 snd_ac97_codec
usb_common               802  1 usbcore
moxa                   15293  14 
intel_agp               9274  1 
intel_gtt              13381  1 intel_agp
agpgart                27972  4 drm,ttm,intel_agp,intel_gtt
mperf                   1232  0 
lpc_ich                10194  0 
i2c_i801                8656  0 
ppdev                   5034  0 
evdev                   8164  2 
microcode              10714  0 
floppy                 50934  0 
rtc_cmos                8519  0 
parport_pc             28078  0 
parport                31107  2 ppdev,parport_pc
processor              26833  0 
pcspkr                  1483  0 
button                  4416  1 nouveau
psmouse                68836  0 
autofs4                20710  2 
xfs                   740612  5 
sr_mod                 13205  0 
cdrom                  32019  1 sr_mod
sd_mod                 35360  7 
crc_t10dif              1264  1 sd_mod
ata_generic             2735  0 
pata_acpi               2698  0 
8139too                19150  0 
mii                     4395  1 8139too
skge                   35585  0 
ata_piix               20592  6 
libata                175819  3 pata_acpi,ata_generic,ata_piix
scsi_mod              173106  3 libata,sd_mod,sr_mod
#
Comment 16 Alexey Gladkov 2013-02-22 15:50:39 MSK
(В ответ на комментарий №14)
> Попробовал Ваш вариант, получилось загрузиться.
> При этом список модулей такой:

> Packed modules: 8139too ata_generic ata_piix cdrom crc-t10dif evbug evdev
> libata mii pata_acpi pci_hotplug scsi_mod sd_mod serio_raw shpchp skge sr_mod
> xfs 

Насколько я понимаю, если брать модули для корня, то вы примерно их и клали ... но только руками. В make-initrd-0.8.1 общий список того, что будет положено в образ будет ещё меньше.
Comment 17 serpiph 2013-02-22 16:16:15 MSK
(В ответ на комментарий №16)
> Насколько я понимаю, если брать модули для корня, то вы примерно их и клали ...
> но только руками. В make-initrd-0.8.1 общий список того, что будет положено в
> образ будет ещё меньше.

Во втором случае это как раз и был 0.8.1-alt1. Или Вы имеете другую версию make-initrd?
Comment 18 Alexey Gladkov 2013-02-22 16:59:36 MSK
(В ответ на комментарий №17)
> Во втором случае это как раз и был 0.8.1-alt1. Или Вы имеете другую версию
> make-initrd?

Да. Другую ... потому что я имел в виду 0.8.2 конечно же :)
Comment 19 Alexey Gladkov 2018-04-11 18:43:04 MSK
Feel free to reopen if necessary.