背景:我正在开发某种信息亭系统。该系统可以时不时地进行远程升级,我希望它尽可能可靠地工作。
在嵌入式系统中,使用双组“引导”是一种常见的做法。例如,许多 BIOS/UEFI 支持 2 个存储体,当您刷新新固件时,旧的固件不会被删除,并且有一种方法可以从旧的固件上启动(不一定是手动)。
我想使用 GRUB2 来完成此操作。我想安装 2 个操作系统,并且 GRUB2 引导至其中一个操作系统。如果该操作系统无法启动或无法检查,则 GRUB2 将启动另一个操作系统。
检查通常是:
- 校验和(例如分区第一个扇区的 CRC32,或 ISO 文件的 CRC32)
- 旗帜/计数器。
例如,GRUB2 会在某处写入“尝试失败”计数器。每次启动时,该计数器都会递增。操作系统知道在哪里可以找到计数器,并且在成功启动后,将计数器设置回 0。如果该计数器超过 5,那么 GRUB2 就会切换到另一个操作系统。
通过添加第三个操作系统(仅作为远程恢复工具),方案可能会变得更加复杂。
请注意,我愿意接受其他建议(无论是使用另一个引导加载程序、另一种方法......),但安全引导必须是可能的。