简而言之(据我所知):如果不initramfs
编译自己的内核,我无法通过 LAN 启动 ubuntu(PXE 启动)。据我所知,问题是这样的:网络接口设备根本没有启动。
长话短说,我有两台相同的服务器。一台是带 HDD 的主服务器,另一台是无盘节点。我希望节点从网络启动,根文件系统取自 NFS。我设置了一切(dhcp、tftpd-hpa、nfs-kernel-server)。我创建了一个 /nfsroot。之后,我编译了一个自定义内核,这是第一个重要步骤 - 我已启动Ubuntu没有的帮助initrd.img
。没问题,根文件系统已从主文件系统中取出。但是接下来——这是下一个重要步骤——我想进行相同的启动但无需编译自定义内核。我想借助 来完成initrd.img
。
因此我采取了以下步骤:
- 我改变
BOOT=nfs
了MODULES=netboot
,/etc/initramfs-tools/initramfs.conf
- 运行
mkinitramfs -o ~/initrd.img-
uname -r`` - 将生成的 initrd 映像复制到我的
/tftproot
- 更改
KERNEL=<my bundled kernel>
并添加initrd=...
到命令行中/tftproot/pxelinux.cfg/default
此后,我启动节点,然后……出现内核恐慌。以下是恐慌:
[ 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
。之后mkinitramfs -o ~/initrd.img-
uname -r`` 并将其复制到/tftproot
。结果是一样的。同样的内核崩溃。
我也尝试过通过网络启动 VirtualBox 虚拟机。它仍然会给我带来内核恐慌。
所以我的问题是..哪里出了问题??我的步骤对我来说似乎是无需编译我自己的内核即可创建网络可启动节点的步骤。
一些额外的信息。
- Ubuntu 14.04
- 网络接口是Intel i350(它的驱动程序是igb)
/tftproot/pxelinux.cfg/default
https://dl.dropboxusercontent.com/u/8057759/netboot/default.config
我用它来构建我的自定义内核无需启动初始化文件https://dl.dropboxusercontent.com/u/8057759/netboot/.config- 当前捆绑
/boot/config-3.13.0-24-generic
(如果它能有所帮助)https://dl.dropboxusercontent.com/u/8057759/netboot/config-3.13.0-24-generic - 包含内核崩溃的日志。您可以在最底部看到它。如你所见,没有提到 igb 或 eth0 https://dl.dropboxusercontent.com/u/8057759/netboot/console.txt
谢谢。
答案1
1) 内核崩溃是由于 init 脚本在尝试查找 dhcp 的网络设备时失败而引起的。
2)您不必为 PXE 启动/安装 Ubuntu/Lubuntu 编译自己的内核;事情变得简单多了;
请参阅使用的参数塞瓦当 PXE 启动/安装 Lubuntu 时(我与 Serva 开发相关)
[PXESERVA_MENU_ENTRY]
asset = Lubuntu 14.04 Desktop Live
platform = amd64
kernel = NWA_PXE/$HEAD_DIR$/casper/vmlinuz
append = showmounts toram root=/dev/cifs initrd=NWA_PXE/$HEAD_DIR$/casper/initrd.lz,NWA_PXE/$HEAD_DIR$/casper/INITRD_N11.GZ boot=casper netboot=cifs nfsroot=//$IP_BSRV$/NWA_PXE_SHARE/$HEAD_DIR$ NFSOPTS=-ouser=serva,pass=avres,ro ip=bootp ro
在这种情况下,Serva 使用 CIFS 而不是 NFS,但您可以轻松更改相应的附加参数。您还将看到指向 Serva 存储库的一些其他目录和 IP 参数,必须根据您的需要进行相应的编辑。请注意,您需要从 Serva 的站点免费下载一个小型补充 initrd INITRD_N11.GZ。
当然,您不需要使用 Serva 来启动您的客户端;您可以将 Serva 参数与您自己的 PXE 服务器一起使用。即使您不打算使用 Serva,您也应该使用它来微调您的参数;一旦您获得了工作集,您就可以转到您可能想要使用的任何 PXE 服务器。
答案2
我成功了。问题很简单。我给 PXE 客户端提供了一个 3.13.0-30 内核。但我运行的mkinitramfs
机器的内核是 3.13.0-24。
我开始给 PXE 客户端 3.13.0-24 内核并且它起作用了。