在我看来,这似乎是一个非常普遍的问题。我有一个从只读根目录运行 Linux 的嵌入式系统。有一个更新守护程序,它会通过覆盖整个分区来安装新的软件映像(如果有)。我的问题是:从正在运行的系统中执行此操作的最佳方法是什么?
- 将更新的分区 dd 到
/dev/sdX
,这是当前(只读)挂载的根? - 按照讨论将当前根使用移动
pivot_root
到 tmpfs这里? - 使用 2 个根分区并在每次更新后切换“活动”分区?
2 和 3 的缺点是,我需要大量 RAM(用于 2)或磁盘空间(用于 3)。有没有一种安全的方法可以从正在运行的系统覆盖只读根分区并重新启动到更新的系统?
答案1
所以我的做法是,我采用了第一种方法,但遇到了很多麻烦,由于文件系统问题,系统不再稳定。我想覆盖已安装的分区不是一个好主意(不过这并不奇怪)。为了解决这个问题,我尝试了第二种想法(pivot_root),这种方法可行,但也有一些缺点。其一是:更新完成后,您必须停止大多数正在运行的进程和/或尽快重新启动。最后,我尝试了第三种想法,唯一的缺点是“浪费”磁盘空间。其他一切都运行良好。