我有一台 Ubuntu 服务器 12.04 64 位,已装入 squashfs 并使用 toram 选项启动到 RAM。当我重新启动机器时,5 次中有 3 次会出现内核崩溃,有时会连续出现多次,但最终它会正常工作。
这是我收到的错误:
Target filesystem doesn't have requested /sbin/init.
run-init: opening console: No such file or directory
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
嗯,显然 /sbin/init 确实存在,因为有时系统加载时没有任何问题,没有任何变化。
此外,该机器是全新的,并且 memtest 显示 RAM 本身没有问题。
以下是我的设置准备方式:
- 我已经在外部 64 位 Ubuntu 服务器 12.04 VirtualBox VM 上编译了内置 aufs 和 squashfs 支持的 Ubuntu-3.11.0-18.32 内核。
- 内核已安装在目标机器上,并且我使用 -always-use-fragments 选项从文件系统副本创建了 squashfs。
我已经安装了 Debian 的 live-boot-3.0.1-1 脚本,以便能够将 squashfs 启动到 RAM。grub 菜单条目如下所示:
menuentry 'Ubun2RAM' --class ubuntu --class gnu-linux --class gnu --class os { linux /boot/vmlinuz-$(uname -r) BOOT=LIVE boot=live toram=filesystem.squashfs rw quiet splash apparmor=0 security="" $vt_handoff kernel.panic=1 initrd /boot/initrd.img-$(uname -r) }
这是基于 Ubun2RAM 指南,可从以下网址获取http://roadha.us/2013/01/resilient-ubuntu-boot-to-ram-usb-stick/,主要的区别在于,在我的情况下,“拇指框”和“目标”是一个 Ubuntu 服务器安装。
我尝试过找出导致内核崩溃的原因,或者通过将 kernel.panic=1 作为启动参数传递或将其放入 /etc/sysctl.conf 中来强制系统在遇到内核崩溃时重新启动。
问题是我无法查看启动失败的任何日志(因为系统启动到 RAM),并且系统在内核崩溃发生后永远不会重新启动(尽管我是这样配置的,至少我是这么认为的)。
理想的解决方案是消除内核崩溃,但是当内核崩溃发生时,系统重新启动就让我很满意了。
任何意见都值得赞赏
。MJD
答案1
我已设法弄清楚了。
显然,当我尝试访问时,我存储文件系统映像的旧驱动器有时尚未准备好(我是偶然发现的)。我从未想到标记为“稳定”的实时启动版本没有等待驱动器准备就绪的功能,但情况似乎确实如此。幸运的是,我发现有一个 4.x alpha 分支,更新到 4.0~alpha21 解决了我的问题。
我还确保问题与我的内核无关,并使用在相关机器上编译的 3.11.0-20.34 内核源获得了完全相同的结果。