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


22

我正在Linux嵌入式主板(运行Debian)上开发应用程序,例如Raspberry Pi,Beagle Board / Bone或olimex。这些板的工作环境是意外断电(放置PSU等非常复杂),并且每天都会发生两次。我想知道意外的断电是否会导致Linux操作系统崩溃或出现问题?如果要担心的话,您将建议如何防止因意外断电而导致操作系统损坏?

PS。该应用程序需要将一些数据写入存储介质(SD卡),我认为将其安装为只读状态不适合。


1
在您进行了很多修改的文件系统上,远离ext2(使用ext3或更高版本),并且在大多数情况下应该可以。
LawrenceC

除非您在配置SD卡时非常小心,否则如果意外断电,这些将无法提供任何保证。该卡可能处于耗损均衡操作的中间,从而导致怪异的意外损坏,甚至可能位于另一个分区中!
derobert 2013年

我不知道该怎么做,但您可能要考虑使关键应用程序基于事务。这样,您可以拥有当前文件和备份。您将事务应用于当前文件,如果失败,则可以从备份中还原当前文件,然后重新应用事务。如果使用符号链接或交换文件名在当前备份和备份之间切换,则与复制相比,发生这种错误的机会非常快,出错的机会要少得多。成功更新后,您的当前文件将成为您的备份,而备份将成为当前的文件。

继续。这几乎可行。新的当前文件还需要将事务应用于该事务,因此必须两次处理该事务,因此我确信有更好的方法。无论如何,如果文件很大,它可能比复制整个文件更快,更安全。
2013年

Answers:


14

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

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

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


10
用于防止写中断破坏文件的代码的一般过程是,您无需直接修改file.name,而是编写一个全新的文件file.name.newversion,然后使用delete / rename命令将旧版本替换为新的一个。您需要添加清除代码以从每个步骤的中断中恢复;但是这种方法总是在磁盘上留下文件的良好副本。这可能会影响您的设计,因为它无法很好地更新单个大文件或对单个文件进行频繁更改。
Dan Neely 2013年

11

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

此外,大多数这些板的电源需求非常低,因此可以备用电池。Raspberry Pi的“ LiPo rider”板可以用作基本的UPS,以在断电时提供干净的关机。


5

这取决于

  1. 是否使用日记文件系统以及
  2. 应用程序处理中止处理的能力。

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

很难说出一个假设的复杂系统的任何东西,但是大多数稳定的Linux软件似乎都能很好地处理崩溃。


1

由于没有人提到任何特定的文件系统:由于日志记录,较新的文件系统(ext3,ext4,ntfs)比旧文件系统(ext2,ext,fat32)能够更好地处理崩溃。

假设硬盘驱动器没有崩溃也没有说谎,则完全断电不应损坏文件系统。但是,正在写入的单个文件可能仍然已损坏,因此,如果在发生电源故障时正在更新操作系统,则仍然有可能关闭操作系统。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.