我正在 Linux 嵌入式主板(运行 Debian)上开发应用程序,例如 Raspberry Pi、Beagle Board/Bone 或 olimex。主板在意外断电的环境中工作(放置 PSU 等非常复杂),并且每天都会发生几次。我想知道意外断电是否会导致 Linux 操作系统崩溃/出现问题?如果这是我应该担心的事情,您建议如何防止意外断电对操作系统造成损害?
PS. 应用程序需要将一些数据写入存储介质(SD 卡),我认为将其安装为只读不太合适。
答案1
意外断电可能会导致文件系统数据损坏 - 例如,如果某个进程已开始写入文件,但尚未完成写入,则文件可能只写入了一半。现在想象一下,如果在您进行内核升级时发生断电......
正如 l0b0 所写,使用日志文件系统会有所帮助,因为它能够跟踪实际完成的工作。除了 l0b0 链接的维基百科信息外,您可能还对以下内容感兴趣 https://unix.stackexchange.com/questions/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure也一样。
作为一名程序员,你显然需要仔细考虑如何处理文件写入,以便使其成为一个原子过程(即要么完全完成,要么根本不完成,但绝不会只完成一半)。这是一个相当复杂的问题。
答案2
为了最大限度地降低操作系统损坏的可能性,最好在 SD 卡上设置单独的“系统”和“数据”分区。这样,您可以以只读方式安装“系统”分区,并在“数据”分区上使用高弹性 FS。
此外,大多数电路板的功率要求都很低,因此可以使用电池备份。Raspberry Pi 的“LiPo rider”电路板可用作基本 UPS,在断电时提供干净的关机。
答案3
这取决于
- 无论你使用的是日志文件系统和
- 应用程序处理中止处理的能力有多好。
例如,考虑一个处理文件并在计算结果时将其写入另一个文件(每行输入一个输出行)的应用程序。如果在处理过程中断电,并且重新启动后运行相同的应用程序,它不能只是从输入文件的开头重新开始处理 - 这意味着输出文件将包含重复的信息。
对于一个假设的复杂系统来说,可能很难说出任何明确的信息,但是大多数稳定的 Linux 软件似乎能够很好地处理崩溃。