使SD卡防腐

我的embedded式Linux设备使用SD卡来保存某些诊断数据,对于内部闪存来说太多了。

问题是如果设备意外closures,卡上的文件系统(FAT32)已损坏

没有办法来防止意外的断电或用户将其closures,并且设备应该相对免维护。 更糟糕的是,数据是连续写入的,所以腐败是非常频繁的,而Linux在检测到有故障的FS时会以只读方式静默地重新加载它。

你会build议什么方法来缓解这一点? 在启动时会自动运行fsck.vfat吗?

一些更多信息:

  • 该卡不被用户视为可移除的。 这被认为是内部磁盘。 存储在其上的任何数据都可以通过networking或USB驱动器进行下载,系统会自动清除最旧的条目。 这意味着它不需要在普通PC上可读。
  • 该系统目前支持FAT,yaffs和jffs2。 将其他文件系统添加到内核是可能的,但如果存在其他途径,我们首选它们。
  • 即使在几分钟内写入也可以被暂停,而不会丢失数据。
  • 部分数据丢失或轻微腐败是可以接受的。 完全停止logging不是。
  • 大多数情况下关机事件是完全不可预测的。
  • 该系统运行在ARM9,200MHZ,64MB RAM,32M​​B内部闪存上,占用了大部分CPU电源。 在考虑花费大量资源的解决scheme时考虑到这一点。

    您可以使用block2mtd驱动程序来使用您在SD卡上使用的事务性jffs2或yaffs(2)文件系统,这可以解决您在关机时数据丢失或文件系统损坏的问题。

    不过这样做可能会招致其他问题。 由于SD卡可能有自己的磨损平衡和扇区重新映射的机制,这些可能会干扰jffs2和yaffs的实现,从而缩短SD卡的寿命或降低性能。 如果这不是问题,那应该值得尝试。

    检查你使用的内核是否支持vfat的刷新和/或同步标志(看起来有些版本忽略它,要小心!)。

    或者如果一切都可以进入一个文件(就像原始日志stream一样)或者放入一些固定大小的文件(使用分区)