我正在尝试使用我创建的映像进行 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),没有任何问题,因此我认为这种网络启动也应该适用于相同的内核和系统。为了制作用于网络启动的 SL5 映像,我从 SD 卡中准确复制了所有文件(/sys
和中的文件除外/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
答案1
如果您SL5rootfs.gz
基于 SL ISO 中的 initrd 进行构建,则其init
脚本仍包含从 CD/ISO 安装根目录的代码,这就是失败的原因。您必须进入以 /init 开头的启动脚本链,并根据网络检索到的根分区(即 squshd fs 文件)修复根目录安装。您可以通过 CIFS、HTTP、NFS 等方式执行此操作。如果您想查看大量示例,可以查看塞瓦用于 PXE 启动许多 Linux 发行版。(我与 Serva 开发有关)
您还必须考虑的另一点是它是否SL5rootfs.gz
真的有网络支持。如果没有,您可以从 PXE 启动它,但这是您唯一能做的事情,因为您将无法通过网络检索任何其他内容。
答案2
事实证明,该映像确实太大了。我有一个 3 GB 的映像,但只有 500 MB 的 RAM。将映像大小调整为 400 MB 后,我能够跳过此错误屏幕,并最终启动我的映像。