1

我正在开发一个必须不断将信息写入存储设备的设备项目。该设备需要能够断电,但要准确保留它收集的信息,直到断电为止。

我一直在寻找如果像这样的系统断电会发生什么的答案。断电和不关闭文件有什么问题吗?数据损坏有可能吗?

谢谢

4

2 回答 2

4

“可能断电时安全存储数据”的整个主题很难以通用方式解决 - 确切的解决方案将取决于数据的确切类型,存储数据的速率等。

要在“断电时”保留信息,数据需要存储在非易失性存储器(闪存、eeprom 或电池支持的 RAM)中。同样,这是一个硬件解决方案。

如果您可能“丢失写入文件的数据”?是的,如果系统正在写入时文件存储设备的电源丢失,则完全有可能无法正确写入文件。

这个问题的答案真的取决于你有多少自由来构建/定制硬件来应对这种情况。为高可靠性而设计的系统将有一种方法来检测断电并在断电后仍然运行几秒钟(有时更长),当断电发生时,它会进入“保存所有数据,并很好地关闭”模式。通常,这是通过使用不间断电源 (UPS) 来完成的,该电源具有警报机制,发出外部电源中断的信号,当系统收到此信号时,会启动紧急关闭。

如果您无法连接 UPS 并以有序的方式关闭,那么还有其他功能,例如日志文件系统可以为您提供一组良好的数据,但不能保证为您提供完整的数据(和您需要处理您的文件格式,以便“切断数据”不会完全破坏文件 - 经典示例是一个 zip 文件,它将“目录”(内容列表)存储在文件的最后。所以您可以完成 99.9% 的文件,但缺少的 0.1% 是您解码所有内容所需的。

于 2013-05-30T12:23:32.290 回答
1

是的,数据损坏绝对是一种可能性。

但是,有一些准则可以以纯软件方式将其最小化:

  • 使用日志文件系统并将其置于最大日志模式(例如 for ext3/ext4use data=journal,不少于)。
  • 避免软件缓冲区。如果您别无选择,请尽快冲洗它们。
  • 尽快同步文件系统(通过sync/syncfs/fsync系统调用或使用sync挂载选项)。
  • 永远不要覆盖现有数据,只需将新数据附加到现有文件。
  • 准备好处理不完整的数据记录。

这样,即使您丢失数据,也只会写入最后几个字节,并且文件系统通常不会损坏。

你会注意到我假设了一个 Unix-y 操作系统。据我所知,Windows 没有给你足够的控制来对文件系统实施这种约束。

于 2013-05-30T12:29:30.983 回答