linux-kernel - 如果文件系统损坏,使用 kexec --load-panic 重新启动
问题描述
我有一个设备,它从 coreboot 加载一个小的“安全模式”Yocto 图像,然后选择一个更大的图像来加载,并执行一个 kexec 来加载该图像。通常这是可行的,但在极少数情况下,目标映像的文件系统已损坏并且内核在启动时出现崩溃。
由于该设备最终将部署到难以访问的位置,因此我希望找到一种方法来从任何内核恐慌中恢复,而无需重新启动设备。
为了解决这个问题,我在加载新内核时在 kexec 命令行中使用“init=/sbin/init.sh”添加了一个初始化脚本,并在第二个文件系统上的初始化脚本。这种方法成功地恢复了在启动过程后期发生的内核恐慌,但我遇到了一个文件系统,它以特定方式被丢弃,因此内核恐慌会在启动脚本启动之前发生。由于初始化脚本没有被执行,panic 内核永远不会被加载,并且设备必须重启。
为了解决这个问题,我尝试将恢复内核添加到由 coreboot 加载的初始小内核中,但它似乎只处理在“kexec --exec”命令加载新内核之前发生的内核恐慌。
我试图找出解决这个问题的最佳方法。例如,我可以在 kexec 到新图像之前添加验证。我目前检查文件系统是否可以挂载,它的内核文件和初始化脚本是否存在。如果有人知道获取初始化脚本还需要哪些其他文件,我可以将它们添加到我的验证中。
或者,有没有办法在已经加载恢复内核“--load-panic”参数的情况下加载新内核和kexec?
我尝试将 kexec --load 和 --load-panic 放在同一行,但这不起作用。
非常感谢任何建议。
解决方案
推荐阅读
- swift - 当用户输入日期/时间字段时,我可以对 CKRecord 进行排序吗?
- python - Python PageRank 实现页面排名向量对每个节点收敛到相同的值
- python - Python单元测试补丁失败
- javascript - 在数组 Vue Javascript Vuex 中查找对象值?
- python - 我如何使用 Beautifulsoup 获取 url 地址
- jquery - $("button").trigger("click") 似乎无法正常工作
- javascript - 使用 Javascript 调用 Chrome DevTools 命令
- python - 我正在尝试多次运行随机变量
- android - 使用 android-beacon-library 检测信标不起作用
- macos - SwiftUI 滚动视图部分显示 Mac 应用程序中的最后一项