意外断电会损害 Linux 安装吗?

22 linux debian operating-systems power-supply embedded-linux

我正在 Linux 嵌入式开发板(运行 Debian)上开发应用程序,例如 Raspberry Pi、Beagle Board/Bone 或 olimex。电路板在意外断电的环境中工作(放置 PSU 等非常复杂),并且每天都会发生几次。我想知道意外断电是否会导致 Linux 操作系统崩溃/问题?如果这是我应该担心的事情,您有什么建议可以防止意外断电对操作系统造成损害?

附注。应用程序需要向存储介质(SD卡)写入一些数据,我认为将其挂载为只读是不合适的。

小智 14

意外断电可能会导致文件系统数据损坏 - 例如,如果进程已开始写入文件,但尚未完成写入,则文件最终可能只写入了一半。现在想象一下,如果在内核升级进行到一半时发生断电……

正如 l0b0 所写,使用日志文件系统会有所帮助,因为它能够跟踪实际完成的工作。除了维基百科的信息是l0b0链接,你可能有兴趣在 https://unix.stackexchange.com/questions/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure以及.

作为程序员,您显然需要仔细考虑如何处理对文件的写入,以便它成为一个原子过程(即它要么完全完成,要么根本没有完成,但永远不会完成一半)。这是一个相当复杂的问题。

  • 防止写中断损坏文件的代码的一般过程是,不是直接修改 file.name,而是编写一个全新的文件 file.name.newversion,然后使用删除/重命名命令将旧版本替换为新的一个。您需要在每一步添加清理代码以从中断中恢复;但这种方法总是在磁盘上留下文件的良好副本。这会影响您的设计,因为它在更新单个大文件或频繁更改单个文件时表现不佳。 (10认同)

小智 11

为了帮助最大限度地减少操作系统损坏的可能性,最好在 SD 卡上有单独的“系统”和“数据”分区。这样您就可以以只读方式挂载“系统”分区,并在“数据”分区上使用高弹性的 FS。

此外,这些电路板中的大多数都具有非常低的功率要求,因此可以使用备用电池。Raspberry Pi 的“LiPo 骑手”板可用作基本 UPS,以在断电时提供干净的关机。


l0b*_*0b0 5

这将取决于

  1. 您是否正在使用日志文件系统以及
  2. 应用程序处理中止处理的能力如何。

例如,考虑一个应用程序,它处理一个文件并将计算结果(每个输入行一个输出行)写入另一个文件。如果在处理过程中断电,并且在重新启动后运行相同的应用程序,则不能仅从输入文件的开头重新开始处理——这意味着输出文件将包含重复的信息。

可能很难对假设的复杂系统做出明确的判断,但大多数稳定的 Linux 软件似乎都能很好地处理崩溃。