首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写入文件时断电

写入文件时断电
EN

Stack Overflow用户
提问于 2013-05-30 19:59:22
回答 2查看 1.6K关注 0票数 1

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

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-30 20:23:32

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

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

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

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

如果你没有任何方法连接UPS并以有序的方式关闭,那么还有其他功能,如日志文件系统,可以给你一个很好的数据集,但它不能保证给你完整的数据(并且你需要处理你的文件格式,以便“切断数据”不会完全破坏文件-典型的例子是zip- file,它存储在文件的最后的“目录”(内容列表)。因此,您可以完成99.9%的文件,但缺少的0.1%是解码所有内容所需的。

票数 4
EN

Stack Overflow用户

发布于 2013-05-30 20:29:31

是的,数据损坏肯定是有可能的。

然而,有一些指导原则可以用纯软件的方式最小化它:

  • 使用日志记录文件系统,并将其置于最大日志模式(例如,对于ext3/ext4,使用data=journal )。
  • 避免使用软件缓冲区。如果您别无选择,请尽快刷新它们以覆盖文件系统(通过sync/syncfs/fsync系统调用或使用sync挂载option).
  • Never覆盖现有数据,只需将新数据追加到现有文件即可。
  • 准备好处理不完整的数据记录。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16835529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档