Filesystems 嵌入式文件系统与关机

Filesystems 嵌入式文件系统与关机,filesystems,embedded,power-off,Filesystems,Embedded,Power Off,我正在开发一个嵌入式应用程序,没有任何需要使用文件系统的操作系统。我已经与项目中的人员讨论过很多次了,有些人同意我的观点,即每当出现电源故障时,系统必须正确关闭系统,否则文件系统可能会发疯 有些人说,如果你简单地关闭系统,让自然运行,这并不重要,但我认为这是最糟糕的事情之一,特别是如果你知道这会给你带来问题,并可能缩短你的产品寿命 在最后一段中,我只是假设这是一个问题,但我的问题仍然是: 断电对文件系统有影响吗?这完全取决于您使用的文件系统,以及是否可以根据您的项目要求在断电时丢失一些数据 可以

我正在开发一个嵌入式应用程序,没有任何需要使用文件系统的操作系统。我已经与项目中的人员讨论过很多次了,有些人同意我的观点,即每当出现电源故障时,系统必须正确关闭系统,否则文件系统可能会发疯

有些人说,如果你简单地关闭系统,让自然运行,这并不重要,但我认为这是最糟糕的事情之一,特别是如果你知道这会给你带来问题,并可能缩短你的产品寿命

在最后一段中,我只是假设这是一个问题,但我的问题仍然是:


断电对文件系统有影响吗?

这完全取决于您使用的文件系统,以及是否可以根据您的项目要求在断电时丢失一些数据

可以想象使用一个文件系统,该系统可以防止无人值守的断电,并且能够从部分写入序列中恢复。因此,在应用程序方面,如果您没有绝对需要在关机前写入的批评数据,则不需要特定的断电检测程序

现在,如果您想为您的项目提供更具体的答案,您必须提供有关您正在使用的文件系统和项目需求的更多信息


编辑:由于您需要在关机前保存关键的应用程序数据,我认为您自己已经回答了这个问题。确保无人值守电源关闭的唯一方法是使用褐化检测,该检测会提醒您的嵌入式设备以及一些硬件电路,这些硬件电路允许持续向设备提供足够的电源以执行关闭过程。

对于非日志文件系统,意外关闭可能意味着某些数据损坏,包括目录结构。如果缓存中有未保存的数据,或者FS正在写入多块更新,并且仅写入某些块时会发生中断,则会发生这种情况

日记主要解决这个问题——如果中间有中断,恢复程序或FS(通常隐含地)检查和修复操作将文件系统带到一致的状态。但是,这种状态并不总是最新的-即,如果内存缓存中有一些数据,即使使用日志记录,这些数据也可能丢失。这是因为日志记录可以避免文件系统的损坏,但并没有发挥神奇的作用

直写模式(无写缓存)降低了数据丢失的可能性,但并不能完全解决问题,因为日志记录将作为缓存工作(在很短的时间内)


因此,不幸的是,备份或数据复制是防止数据丢失的主要方法。

如果写入正在进行,或者文件在关闭时打开,特别是如果存在未刷新的缓冲操作,FAT文件系统特别容易损坏。在我参与的一个项目中,解决方案是在启动时运行文件系统完整性检查和修复(基本上是chkdsk/scandsk)。这种策略并没有防止数据丢失,但确实防止了文件系统变得不可用

许多供应商为FAT提供日志附加组件,以准确地解决这个问题。这些包括,例如


无论哪种方式,您的系统通常都应该采用开放-写-关闭方法来访问文件,或者如果您认为需要保持文件打开,则应采用开放-写-刷新方法

这里列出了帮助嵌入式系统容忍电源故障的各种技术。这些可能不适用于您的特定应用。

  • 使用-可以容忍由于电源故障、操作系统崩溃等导致的不完整写入。大多数现代文件系统都有日志记录,但要做好确认的准备

  • 除非您的应用程序需要写入性能,否则请禁用所有写入缓存。检查磁盘驱动程序中的缓存选项。在Linux/UNIX下,考虑在同步模式下安装文件系统。

  • 除非必须是可写的,否则将其设置为只读。尝试将应用程序可执行文件和操作系统文件保留在各自的分区上,并设置写保护(例如,在Linux中以只读方式装载)。读/写数据应该在自己的分区上。即使您的应用程序数据被破坏,您的系统也应该能够启动(尽管使用了故障保护默认配置)

    3a。对于只写入一次的数据(例如,配置设置),请尝试在大多数情况下将其以只读方式装入。如果有设置更改,请临时将装载更改为R/W,更新数据,然后以只读方式卸载/重新装载数据

    3b。使用类似于3a的技术处理现场的应用程序/操作系统更新

    3c。如果将FS安装为只读,则至少应考虑将单个文件打开为只读(例如,FP= FOPEN(“配置”INI),“R”)。< /P>
  • 如果可能,请使用单独的设备进行存储。将内容保存在单独的分区中可以提供一些保护,但仍有一些边缘情况,分区表可能会损坏并导致整个驱动器无法读取。使用物理上独立的设备进一步隔离一个损坏的设备,从而导致整个系统崩溃。在一个完美的世界中,您将拥有至少4个独立的设备:

    4a。引导加载程序

    4b。操作系统和应用程序代码

    4c。配置设置

    4e。应用数据

  • 了解存储设备的特性,并控制所用设备的品牌/型号/版本。某些硬盘忽略操作系统的缓存刷新命令。我们曾经遇到过这样的情况:某些型号的CompactFlash卡在断电时会损坏自身,但“工业”型号没有这个问题。当然,这些信息