Bug 27010

Summary: Генерирует нерабочий образ initrd (md_run)
Product: Sisyphus Reporter: Evgenii Terechkov <evg>
Component: make-initrdAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: critical    
Priority: P3 CC: cetus, dd1email, glebfm, grizlik78, iadzhubey, ldv, legion, mike, placeholder, real.altlinux.org, serpiph, shaba, stalker, tohen80
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://lists.altlinux.org/pipermail/sisyphus/2012-February/356926.html
Attachments:
Description Flags
make-initrd bug-report
none
Рабочий образ от 0.6.2
none
Нерабочий образ от 0.7.0
none
make-initrd bug-report
none
образ от 0.6.2
none
образ от 0.7.0
none
initrddiff
none
initramfs.gz none

Description Evgenii Terechkov 2012-02-29 19:59:15 MSK
После обновления ядра до 3.2.8-std-def-alt1 система (ThinkPad T410 в режиме x86_64) не загружается:

mv: cannot stat '/dev/.initramfs/handler-events/md_run.*': No such file or directory
initrd: udev: ERROR: event handler failed: md_run
initrd: Stage 'udev' failed
initrd: This shell remains here for debug puproses. Press Ctrl-D to continue.
(initramfs) 

Если тут нажать Ctrl-D, то ядро уходит в панику и показывает трейс, т.к.
убит процесс init. Это вроде логично.

Откат пакетов make-initrd make-initrd-devmapper make-initrd-lvm до
0.6.2-alt1 и вызов 'make-initrd -k 3.2.8-std-def-alt1' помогли.

Нужную дополнительную информацию и/или файл(ы) образов предоставлю если нужно.
Comment 1 Anton Zivzah 2012-02-29 20:30:29 MSK
Систему, установленную на USB-HDD тоже не грузит, доходит до определения usb-устройств, сам внешний жесткий определяется, а дальше ничего не происходит - похоже, что sd_mod не подгружается и /dev/sdXX не появляются и всё стопорится на ожидании появления раздела для монтирования.
Comment 2 Aleksey Borisenkov 2012-02-29 20:33:00 MSK
Да, в общем-то, если в этом шелле набрать lsmod, то лично у меня оно показывает, что вообще никаких модулей не загружено.
Comment 3 Alexey Gladkov 2012-02-29 23:39:28 MSK
приложите пожалуйста результат "make-initrd bug-report", получившийся initrd (если остался) и рабочий initrd (0.6.2-alt1).
Comment 4 Evgenii Terechkov 2012-03-01 02:45:18 MSK
Created attachment 5337 [details]
make-initrd bug-report
Comment 5 Evgenii Terechkov 2012-03-01 02:46:40 MSK
Created attachment 5338 [details]
Рабочий образ от 0.6.2
Comment 6 Evgenii Terechkov 2012-03-01 02:48:13 MSK
Created attachment 5339 [details]
Нерабочий образ от 0.7.0
Comment 7 Alexey Gladkov 2012-03-02 02:55:09 MSK
Не могли бы вы проверить исправление в git:

http://git.altlinux.org/people/legion/packages/make-initrd.git

?
Comment 8 Aleksey Borisenkov 2012-03-02 03:35:36 MSK
У меня случай попроще, нет ни RAID, ни LVM. Просто не может смонтировать root.
Поэтому я не удивился, что исправление не помогло.
А помогло добавление в /etc/initrd.mk строчки
MODULES_PRELOAD += ahci sd_mod ext3
Но в 0.6.2-alt1 и более ранних этого, вроде, не требовалось.
Это так и должно быть?
Comment 9 Evgenii Terechkov 2012-03-02 04:45:52 MSK
Попробую сегодня вечером проверить.

У меня различий по модулям ядра между образами нет, как видно, так что initrd.mk я не менял.
Comment 10 Alexey Gladkov 2012-03-02 16:44:11 MSK
(В ответ на комментарий №8)
> А помогло добавление в /etc/initrd.mk строчки
> MODULES_PRELOAD += ahci sd_mod ext3
> Но в 0.6.2-alt1 и более ранних этого, вроде, не требовалось.
> Это так и должно быть?

Разумеется так быть не должно, но это другая проблема нежели проблема с md_run.
Comment 11 Aleksey Borisenkov 2012-03-02 16:48:48 MSK
(В ответ на комментарий №10)
> Разумеется так быть не должно, но это другая проблема нежели проблема с md_run.

Завести новый баг? Приложить свои образы сюда?
Comment 12 Alexey Gladkov 2012-03-02 17:39:28 MSK
(В ответ на комментарий №11)
> Завести новый баг? Приложить свои образы сюда?

Давайте пока сюда.
Comment 13 Aleksey Borisenkov 2012-03-02 17:43:53 MSK
Created attachment 5344 [details]
make-initrd bug-report
Comment 14 Aleksey Borisenkov 2012-03-02 17:44:34 MSK
Created attachment 5345 [details]
образ от 0.6.2
Comment 15 Aleksey Borisenkov 2012-03-02 17:45:09 MSK
Created attachment 5346 [details]
образ от 0.7.0
Comment 16 Aleksey Borisenkov 2012-03-02 17:47:46 MSK
Симптомы, в общем-то, по ссылке описаны:

[    1.355754] Executing init=/init
initrd: Starting sysklog...
initrd: Loading modules before udevd...
initrd: Starting udevd...
initrd: udev: ERROR: Unable to mount root
initrd: Stage 'udev' failed

Образы с virtualbox'а, но на реальной машине ведёт себя так же точно.
Comment 17 Evgenii Terechkov 2012-03-03 05:40:32 MSK
(В ответ на комментарий №7)
> Не могли бы вы проверить исправление в git:
> http://git.altlinux.org/people/legion/packages/make-initrd.git
> ?

Проверил, замечательно работает. Удалил пакеты make-initrd-{devmapper,lvm}, убрал raid/lvm из /e/initrd.mk (давно собирался, нужна отпала), перегенерировал образ, загрузился - замечательно работает.
Comment 18 Evgenii Terechkov 2012-03-03 05:59:53 MSK
Заодно собрал в сизиф утилиту сравнения образов, называется initrddiff.
Comment 19 Alexey Gladkov 2012-03-03 20:14:21 MSK
(В ответ на комментарий №18)
> Заодно собрал в сизиф утилиту сравнения образов, называется initrddiff.

Это ваша утилита ?
Comment 20 Alexey Gladkov 2012-03-04 03:11:37 MSK
Created attachment 5355 [details]
initrddiff

Я немного переделал этот скрипт. Теперь он не требует отдельного создания временных файлов и из-за этого чуть-чуть упростился.
Comment 21 Evgenii Terechkov 2012-03-04 08:26:19 MSK
Да.

Собрал.
Comment 22 Alexey Gladkov 2012-03-04 23:13:02 MSK
(В ответ на комментарий №21)
> Да.

Если хотите, можно добавить эту утилиту в make-initrd.
Comment 23 Michael Shigorin 2012-03-04 23:24:02 MSK
+1
Comment 24 Evgenii Terechkov 2012-03-05 03:02:25 MSK
Хочу.
Comment 25 Alexey Gladkov 2012-03-05 16:21:54 MSK
(В ответ на комментарий №16)
> Симптомы, в общем-то, по ссылке описаны:
> 
> [    1.355754] Executing init=/init
> initrd: Starting sysklog...
> initrd: Loading modules before udevd...
> initrd: Starting udevd...
> initrd: udev: ERROR: Unable to mount root
> initrd: Stage 'udev' failed
> 
> Образы с virtualbox'а, но на реальной машине ведёт себя так же точно.

Вы не могли бы добавить параметр rootdelay=3 и когда появится shell посмотреть что в /var/log/initramfs ?
Comment 26 Aleksey Borisenkov 2012-03-05 19:34:34 MSK
Created attachment 5358 [details]
initramfs.gz
Comment 27 Alexey Gladkov 2012-03-05 23:31:49 MSK
(В ответ на комментарий №26)
> Created an attachment (id=5358) [details]
> initramfs.gz

Очень странно всё. По логам и по содержимому образов всё нормально должно быть.

В порядке догадки попробуйте добавить в initrd.mk строчку:
DISABLE_FEATURES += syslog
Comment 28 Aleksey Borisenkov 2012-03-05 23:59:10 MSK
Мало что изменилось. Логи пропали, остаток лога выдаётся в консоль.
Появилось строчка hrtimer: interrupt took 30947578 ns.
А так всё то же самое.
Согласен, что странно. Нужные модули есть, вручную прекрасно загружаются, а автоматом не хотят. Но воспроизводится на всех моих сизифах, двух железных и двух виртуальных (обе архитектуры). И, судя по рассылке, не только у меня.
Comment 29 Alexey Gladkov 2012-03-06 00:15:17 MSK
Вы можете подготовить тестовый образ виртуалки для расследования?
Если возможно для qemu (если нет, то любой удобный вам).
Comment 30 Aleksey Borisenkov 2012-03-06 00:20:19 MSK
Ок. Попробую завтра (то есть уже сегодня) соорудить.
Comment 31 Alexey Gladkov 2012-03-06 02:16:45 MSK
(В ответ на комментарий №30)
> Ок. Попробую завтра (то есть уже сегодня) соорудить.

Протестируйте пожалуйста make-initrd-0.7.2.
Comment 32 Aleksey Borisenkov 2012-03-06 02:30:36 MSK
Протестировал. Не помогло.
Comment 33 Aleksey Borisenkov 2012-03-06 13:56:20 MSK
Пока делал образ, кажется, нашёл причину.
Помогает удаление udev-initramfs с последующей перегенерацией initrd. Если вдруг зачем-то этот пакет поставить, то проблема снова возникнет.
Comment 34 Evgenii Terechkov 2012-03-06 18:15:24 MSK
2legion: предлагаю добавить Obsolete: initrddiff
Comment 35 Michael Shigorin 2012-03-06 18:22:41 MSK
Да пока маленькое и все видевшие точно читали эту багу -- можно сделать вид, что не было. :)
Comment 36 Evgenii Terechkov 2012-03-06 18:58:26 MSK
Ну мало ли кто мог установить и не читать багу.
Comment 37 Anton Zivzah 2012-03-06 20:25:02 MSK
0.7.2 работает, udev-initramfs не установлен
Comment 38 Michael Shigorin 2012-03-07 11:46:38 MSK
Ещё говорят про разницу при смонтированном в чруте /sys:
http://lists.altlinux.org/pipermail/sisyphus/2012-March/356983.html
Comment 39 Ivan Adzhubey 2012-03-07 20:51:17 MSK
(In reply to comment #33)
> Пока делал образ, кажется, нашёл причину.
> Помогает удаление udev-initramfs с последующей перегенерацией initrd. Если
> вдруг зачем-то этот пакет поставить, то проблема снова возникнет.

make-initrd-0.7.2-alt1
udev-initramfs-150-alt8
kernel-image-std-def-3.2.9-alt1.1

Виснет при загрузке на:
initrd: Loading modules before udevd...
initrd: Starting udevd...

Совет про удаление udev-initramfs не очень понятен - там много всего сносится:

# apt-get remove --purge udev-initramfs
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
  bootsplash* design-bootsplash-office-server* mkinitrd* udev-initramfs*
0 upgraded, 0 newly installed, 4 removed and 11 not upgraded.

Что делать-то?
Comment 40 Aleksey Borisenkov 2012-03-07 20:54:20 MSK
Сносить. Вместо bootsplash, если очень хочется, сейчас используется plymouth. mkinitrd не неужен, make-initrd, по сути, его замена.
Comment 41 Ivan Adzhubey 2012-03-07 21:00:09 MSK
(In reply to comment #40)
> Сносить. Вместо bootsplash, если очень хочется, сейчас используется plymouth.
> mkinitrd не неужен, make-initrd, по сути, его замена.

Ясно, попробую завтра, как до сервера доберусь. Плимут мне там не нужен...
Comment 42 Alexey Gladkov 2012-03-09 21:52:44 MSK
(В ответ на комментарий №34)
> 2legion: предлагаю добавить Obsolete: initrddiff

Хорошо. Я не поставил его с самого начала потому что немного переименовал утилиту.
Comment 43 Ivan Adzhubey 2012-03-10 22:18:57 MSK
(In reply to comment #40)
> Сносить. Вместо bootsplash, если очень хочется, сейчас используется plymouth.
> mkinitrd не неужен, make-initrd, по сути, его замена.

Снес, перегенерировал initrd, теперь ядро нормально грузится. Всем спасибо за помощь!
Comment 44 Alexey Gladkov 2012-03-10 22:29:20 MSK
Нужно будет провести расследование, что так фатально изменилось в udev-initramfs.
Comment 45 Aleksey Borisenkov 2012-03-10 22:45:43 MSK
(В ответ на комментарий №44)
> Нужно будет провести расследование, что так фатально изменилось в
> udev-initramfs.

Учитывая, что версия у него 150 (когда у самого udev 172) и пакету более чем 1,5 года, то вряд ли в нём что-то изменилось :)
Но странно, что 0.6.2 с ним работает, а 0.7.x нет.
Comment 46 serpiph 2012-03-11 10:50:59 MSK
Мне не помогло... Вычистил и udev-initramfs, и mkinitrd.* и *initramfs* с компа - бесполезно. И перегенерил образы для новых ядер... Все компы (4 штуки) на ядре 3.2.9-un-def-alt2 и 3.2.9-std-def-alt1.1

В общем, для меня make-initrd нерабочий больше, чем полностью. Версия 0.6.2-alt1 для этих ядер тоже перестала генерить правильные образы...

Старый mkinitrd на всех (кроме raid) делает рабочие образы.
Comment 47 serpiph 2012-03-11 11:34:53 MSK
Сейчас проверил на 2.6.9-std-def-alt1.1 на софт-raid:
1) make-initrd создает нерабочий initrd, в котором есть /dev/mdXpY. То есть самовольно объединяет целиком винты в один рейд, из-за чего ядро не может понять, что же делать с ним и какая там файловая система;
2) mkinitrd создает рабочий образ с файлами /dev/mdZ. То есть каждый раздел на одном винте объединяется с аналогичным разделом на другом винте в отдельный рейд. Ядро спокойно разбирается в типе файловой системы каждого рейда.

При этом есть файл /dev/mdadm.conf, который описывает создание рейдов. Что это за самовольность make-initrd?
Comment 48 Alexey Shabalin 2012-03-11 12:59:27 MSK
Специально для тестирования systemd в различных конфигурациях держу несколько виртуалок.
Перестала грузится виртуалка, где корень на lvm.
Ошибка похожа на 
mv: cannot stat '/dev/.initramfs/handler-events/lvm.*': No such file or
directory

Ощущение, что events создаются в udev-event, а пытаются удалиться из handler-events.
Comment 49 serpiph 2012-03-11 16:35:14 MSK
(В ответ на комментарий №48)

> Перестала грузится виртуалка, где корень на lvm.
> Ошибка похожа на 
> mv: cannot stat '/dev/.initramfs/handler-events/lvm.*': No such file or
> directory

Аналогично было и с md в версии 0.7.0-alt1. У меня корень на софт-raid1 под md.
Comment 50 Alexey Gladkov 2012-03-12 10:56:41 MSK
Так. Господа, открывайте новые баги т.к. тут уже невозможно понять, что у кого не работает. Описанная ошибка в md_run была исправлена в 0.7.2.
Comment 51 Alexey Gladkov 2012-03-12 11:02:37 MSK
(В ответ на комментарий №46)
> В общем, для меня make-initrd нерабочий больше, чем полностью. Версия
> 0.6.2-alt1 для этих ядер тоже перестала генерить правильные образы...

Это уже не к make-initrd, а к kernel/udev. На старых ядрах make-initrd работает?
Comment 52 Alexey Gladkov 2012-03-12 11:12:46 MSK
(В ответ на комментарий №47)
> Сейчас проверил на 2.6.9-std-def-alt1.1 на софт-raid:
> 1) make-initrd создает нерабочий initrd, в котором есть /dev/mdXpY. То есть
> самовольно объединяет целиком винты в один рейд, из-за чего ядро не может
> понять, что же делать с ним и какая там файловая система;

Самовольно make-initrd ничего не делает.

> При этом есть файл /dev/mdadm.conf, который описывает создание рейдов. 

mkinitrd активизирует рейд через ядро. Это же делает features/raid.
Comment 53 Evgenii Terechkov 2012-03-12 11:13:41 MSK
УМВР. Не надо смешивать различные проблемы.
Comment 54 Alexey Gladkov 2012-03-12 11:14:46 MSK
(В ответ на комментарий №48)
> Ощущение, что events создаются в udev-event, а пытаются удалиться из
> handler-events.

Какую версию вы проверяете ?
Comment 55 Aleksey Borisenkov 2012-03-12 12:05:02 MSK
Перенёс свою проблему в #27061