我正在尝试使用我创建的映像进行 PXE 引导,但在加载映像和内核后,我收到以下错误消息:
主要的错误信息是这样的:
No filesystem could mount root, tried: ext3 ext2 iso9668
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0
Pid: 1, comm: swapper not tainted 2.6.34.1 #4
我已经尝试在网上查找有关此的建议,但我发现要么硬件不兼容,要么使用另一个内核。我相信硬件是兼容的,因为我能够毫无问题地从 SD 卡启动相同的内核(不幸的是,我没有创建的自定义内核)和操作系统(Scientific Linux 5),所以我认为这个网络引导也应该适用于相同的内核和系统。/sys
为了使我的 SL5 映像用于网络启动,我已经从 SD 卡中完全复制了所有文件(和中的文件除外/proc
),但我仍然收到此错误消息。我也只尝试复制必要的目录,如/bin
, /dev
, /etc
,/lib
等。即使只有这些目录,图像也是 2.6GB 左右,我仍然收到此错误消息。
现在我觉得我有两个选择要解决:要么图像太大而无法安装ram0
(有大小限制吗?),在这种情况下我应该修剪目录的内容;或者系统根本无法识别ram0
,并且 initrd 进程存在问题。
以下是我的pxelinux.cfg/default
文件的相关内容:
LABEL SL5
MENU LABEL SL5
KERNEL images/vmlinuz-2.6.34.1-32-v7805
APPEND initrd=images/SL5rootfs.gz root=/dev/ram0 ramdisk_size=3100000 rw ip=dhcp fastboot mem=3g
如果您
SL5rootfs.gz
基于 SL ISO 中的 initrd 构建,那么它的init
脚本仍然包含用于从 CD/ISO 安装根目录的代码,这就是它失败的原因。您必须进入从 /init 开始的引导脚本链,并现在根据网络检索到的根分区(即 squshd fs 文件)修复根挂载。你可以通过 CIFS、HTTP、NFS 等来做到这一点。如果你想看到很多这方面的例子,你可以看看Serva为 PXE 引导许多 Linux 发行版所做的事情。(我与Serva开发有关)您必须考虑的额外一点是是否
SL5rootfs.gz
真的有净支持。如果没有它,您可以很好地从 PXE 启动它,但这是您唯一可以做的事情,因为您将无法通过网络检索其他任何内容。原来图像实际上太大了。我有一个 3 GB 的图像,只有 500 MB 的 RAM。将图像大小调整为 400 MB 后,我能够通过此错误屏幕,并最终启动我的图像。