我正在尝试使用我创build的映像执行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
我已经试过在线寻找build议,但是我发现硬件不兼容,或者使用其他内核。 我确信硬件是兼容的,因为我可以从SD卡上启动相同的内核(不幸的是,我没有创build一个自定义的内核)和操作系统(Scientific Linux 5),所以我认为这个networking启动也应该为相同的内核和系统工作。 为了使我的SL5映像networking启动,我已经从SD卡(除了/sys和/proc )完全复制所有文件,但我仍然得到这个错误信息。 我也只尝试复制必要的目录,比如/bin , /dev , /etc , /lib等等。即使只有这些目录,图像大概是2.6GB,我仍然得到这个错误信息。
现在我觉得我有两个select来解决:要么是图像太大,无法安装到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
如果基于SL ISO中的initrd构build了SL5rootfs.gz ,那么它的init脚本仍然具有从CD / ISO挂载根的代码,这就是为什么它失败了。 你必须进入引导脚本链,由/ init开始,现在根据一个networking检索的根分区(即一个压缩的fs文件)来修复根挂载。 你可以通过CIFS,HTTP,NFS等来做到这一点,如果你想看到很多这方面的例子,你可以看一看Serva为PXE启动了很多Linux发行版。 (我与塞尔瓦发展有关)
另外一点你必须考虑的是,如果SL5rootfs.gz真的有networking支持或没有。 如果没有它,你可以很好地从PXE启动它,但这是唯一可以做的事情,因为你将无法networking检索其他任何东西。
原来这张图片其实太大了。 我有一个3 GB的图像,只有500 MB的RAM。 将图像调整到400 MB后,我能够通过这个错误屏幕,并最终启动我的图像。