LINUX.ORG.RU
ФорумAdmin

Загрузка по сети (PXE) Ubuntu 14.04 (+initrd): kernel panic

 , , , ,


0

1

Всем доброго времени суток.

(Ввиду насущности вопроса есть кросспосты здесь http://serverfault.com/questions/612024/ubuntu-14-04-pxe-boot-with-initrd-ini... http://sysadmins.ru/post11696659.html#11696659)

В кратце история такова (как я её вижу): у меня не получается загрузить Ubuntu по сети (PXE boot) с использованием образа initrd.img без сборки своего ядра. Я вижу проблему в том, что не поднимается сетевуха.

Теперь подробно. Есть два одинаковых сервера. Один - мастер - с HDD. Второй - узел - без HDD. Нужно сделать загрузку по сети с узла, чтобы корень брался с NFS с мастера. Я установил для этого на мастер всё: dhcp, tftpd-hpa, nfs-kernel-server. Сделал /nfsroot, в него положил файловую систему, скопированную с виртуалки с тем же дистрибутивом (LUbuntu 14.04). Далее первый важный шаг: собираю своё ядро и вуаля загрузка по сети БЕЗ использования initrd.img происходит на ура. Корень берется с /nfsroot с мастера. Всё хорошо. Далее второй важный шаг: я хочу сделать такую же загрузку, но без пересборки ядра, а просто сконфигурив initrd.img через initramfs-tools. Для этого я делаю следюущие шаги:

  • ставлю BOOT=nfs и MODULES=netboot в /etc/initramfs-tools/initramfs.conf
  • mkinitramfs -o ~/initrd.img-`uname -r`
  • копирую получившийся обаз initrd в /tftproot
  • прописыавю KERNEL=<my bundled kernel> и добавляю initrd=... к cmdline в /tftproot/pxelinux.cfg/default

После этого включаю node и.. получаю kernel panic. Вот он:

    [   18.415714] Freeing unused kernel memory: 824K (ffff880001732000 - ffff880001800000)
    [   18.424996] Freeing unused kernel memory: 700K (ffff880001b51000 - ffff880001c00000)
    Loading, please wait...
    [   18.446709] systemd-udevd[340]: starting version 204
    Begin: Loading essential drivers ... done.
    Begin: Running /scripts/init-premount ... done.
    Begin: Mounting root file system ... Begin: Running /scripts/nfs-top ... done.
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    ipconfig: no devices to configure
    /init: .: line 252: can't open '/run/net-*.conf'
    [   18.604039] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000200
    [   18.604039] 
    [   18.613180] CPU: 0 PID: 1 Comm: init Not tainted 3.13.0-30-generic #54-Ubuntu
    [   18.620323] Hardware name: Supermicro X9DRFF-iG+/-7G+/-iTG+/-7TG+/X9DRFF-iG+/-7G+/-iTG+/-7TG+, BIOS 3.0 07/29/2013
    [   18.630668]  ffff8817f8748000 ffff8817fb1d7e48 ffffffff8171a324 ffffffff81a4dcc0
    [   18.638135]  ffff8817fb1d7ec0 ffffffff81713525 ffffffff00000010 ffff8817fb1d7ed0
    [   18.645599]  ffff8817fb1d7e70 ffffffff81f229e0 0000000000000200 ffff8817fb1d8398
    [   18.653070] Call Trace:
    [   18.655539]  [<ffffffff8171a324>] dump_stack+0x45/0x56
    [   18.660696]  [<ffffffff81713525>] panic+0xc8/0x1d7
    [   18.665498]  [<ffffffff8106a391>] do_exit+0xa41/0xa50
    [   18.670554]  [<ffffffff8109dd94>] ? vtime_account_user+0x54/0x60
    [   18.676562]  [<ffffffff8106a41f>] do_group_exit+0x3f/0xa0
    [   18.681954]  [<ffffffff8106a494>] SyS_exit_group+0x14/0x20
    [   18.687458]  [<ffffffff8172aeff>] tracesys+0xe1/0xe6
    [   18.695229] ------------[ cut here ]------------
    [   18.699859] WARNING: CPU: 0 PID: 1 at /build/buildd/linux-3.13.0/arch/x86/kernel/smp.c:124 native_smp_send_reschedule+0x5d/0x60()
    [   18.711494] Modules linked in:
    [   18.714572] CPU: 0 PID: 1 Comm: init Not tainted 3.13.0-30-generic #54-Ubuntu
    [   18.721707] Hardware name: Supermicro X9DRFF-iG+/-7G+/-iTG+/-7TG+/X9DRFF-iG+/-7G+/-iTG+/-7TG+, BIOS 3.0 07/29/2013
    [   18.732044]  0000000000000009 ffff88181fc03d90 ffffffff8171a324 0000000000000000
    [   18.739500]  ffff88181fc03dc8 ffffffff810676bd 0000000000000001 ffff88181fc14440
    [   18.746956]  00000000fffeec2c 0000000000000000 ffff88181fc34440 ffff88181fc03dd8
    [   18.754421] Call Trace:
    [   18.756883]  <IRQ>  [<ffffffff8171a324>] dump_stack+0x45/0x56
    [   18.762675]  [<ffffffff810676bd>] warn_slowpath_common+0x7d/0xa0
    [   18.768676]  [<ffffffff8106779a>] warn_slowpath_null+0x1a/0x20
    [   18.774512]  [<ffffffff8104022d>] native_smp_send_reschedule+0x5d/0x60
    [   18.781041]  [<ffffffff810a800a>] trigger_load_balance+0x16a/0x1e0
    [   18.787232]  [<ffffffff810992c4>] scheduler_tick+0xa4/0xf0
    [   18.792737]  [<ffffffff81076230>] update_process_times+0x60/0x70
    [   18.798753]  [<ffffffff810d5bf5>] tick_sched_handle.isra.17+0x25/0x60
    [   18.805188]  [<ffffffff810d5c71>] tick_sched_timer+0x41/0x60
    [   18.810874]  [<ffffffff8108e547>] __run_hrtimer+0x77/0x1d0
    [   18.816362]  [<ffffffff810d5c30>] ? tick_sched_handle.isra.17+0x60/0x60
    [   18.822980]  [<ffffffff8108ed4f>] hrtimer_interrupt+0xef/0x230
    [   18.828821]  [<ffffffff81043077>] local_apic_timer_interrupt+0x37/0x60
    [   18.835360]  [<ffffffff8172d0bf>] smp_apic_timer_interrupt+0x3f/0x60
    [   18.841715]  [<ffffffff8172ba5d>] apic_timer_interrupt+0x6d/0x80
    [   18.847722]  <EOI>  [<ffffffff810b0bd2>] ? up+0x32/0x50
    [   18.852981]  [<ffffffff817135f0>] ? panic+0x193/0x1d7
    [   18.858036]  [<ffffffff8171355a>] ? panic+0xfd/0x1d7
    [   18.863004]  [<ffffffff8106a391>] do_exit+0xa41/0xa50
    [   18.868059]  [<ffffffff8109dd94>] ? vtime_account_user+0x54/0x60
    [   18.874065]  [<ffffffff8106a41f>] do_group_exit+0x3f/0xa0
    [   18.879459]  [<ffffffff8106a494>] SyS_exit_group+0x14/0x20
    [   18.884947]  [<ffffffff8172aeff>] tracesys+0xe1/0xe6
    [   18.889906] ---[ end trace 614851f5bf760874 ]---

Я подумал, ОК, раз мастер и узел одинаковые, то я сделаю lsmod на мастере, добавлю все модули в /etc/initramfs-tools/modules, выставлю MODULES=list и перегенерю initrd.img. Но и это не помогло. Получаю тот же самый kernel panic.

Я также пробовал загружать по сети виртуалку на virtualbox. Результат тот же - тот же самый kernel panic.

Что я делаю не так? На мой взгляд я делаю именно ТУ последовательность действий, которая должна привести к загрузке по сети с использованием конфигов и initramfs, без пересборки кастомного ядра.

Вот инфа, которая может помочь.

Буду рад советам. Спасибо.

Я давно не изучал внутренности initramfs, но, вроде как /etc/initramfs-tools/modules это список модулей, которые будут включены в этот образ, но не обязательно загружены. В ″essential drivers″ входит мало что, модули устройств должен грузить udev. Почему он у вас не срабатывает не понятно.

Возможно, что нужно засунуть ″force_load igb″ в ″/initramfs-tools/hooks/udev″.

mky ★★★★★ ()
Ответ на: комментарий от mky

Добавил файл /etc/initramfs-tools/hooks/udev

#!/bin/sh

PREREQ=«udev»

prereqs() { echo «$PREREQS»; }

case «$1» in
    prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions
force_load igb

Не помогло..

GrigoryPtashko ()
Ответ на: комментарий от mky

Я проверил. Ваш совет был дельный. Модули действительно грузятся. Там идет серия modprobe, в том числе modprobe igb. Я также добавил все модули, от которых зависит igb (посмотрел по lsmod на работающей системе).

Что еще можно проверить? Почему модули грузятся, а сетевуха не поднимается?

GrigoryPtashko ()
Ответ на: комментарий от GrigoryPtashko

Модули действительно грузятся.

То есть в сообщениях ядра появляется такая строка?

igb: Intel(R) Gigabit Ethernet Network Driver

Что посоветовать ещё не знаю. Можно передать параметр загрузки ″break=modules″ или какое другое значение вместо ″modules″, получить shell и из него смотреть, что там пишет igb и прочие. Может модуль igb просто долго «думает» инициализируя карточку и не успевает к моменту монтирования nfs.

mky ★★★★★ ()
Ответ на: комментарий от mky

Всё решилось. Проблема была до боли проста и тупа. На клиента я отдавал ядро 3.13.0-30. А mkinitramfs я гонял на машине с ядром 3.13.0-24. Я заменил -30 ядро на -24 в /tftpboot и всё завелось.

По поводу строки в dmesg-е. Нет, такой строки не было. break=modules мне тоже не помогло, потому что по какой-то причине у меня отказывалась работать клава при вываливании init-а в шелл. Я добавил set -x в init и увидел, что modprobe добавляла модуль igb. Поэтому я подумал, что модель загружался в ядро.

В общем, спасибо за наводки.

GrigoryPtashko ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.