防止SD卡损坏


11

我的嵌入式linux设备使用SD卡来保存某些诊断数据,对于内部闪存而言这太丰富了。

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

无法防止意外断电或用户将其关闭,该设备应相对免维护。更糟糕的是,数据是连续写入的,因此损坏非常频繁,并且Linux在检测到故障FS时会以静默方式将其重新装入只读状态。

您会建议采用哪些方法来减轻这种情况?在启动时自动运行fsck.vfat是否足够?

更多信息:

  • 该卡不被用户视为可移动。可以将其视为内部磁盘。存储在上面的任何数据都可以通过网络或USB驱动器下载,系统会自动清除最早的条目。这意味着它不需要在普通PC上可读。
  • 该系统当前支持FAT,yaffs和jffs2。可以在内核中添加其他文件系统,但是如果存在其他途径,我们最好先使用它们。
  • 可以按需暂停写入,即使几分钟也不会丢失数据。
  • 可接受部分数据丢失或轻微损坏。不是完全停止日志记录。
  • 在大多数情况下,关闭电源事件是完全不可预测的。
  • 该系统在ARM9、200MHZ,64MB RAM,32M​​B内部闪存上运行,并在其主要角色上消耗了大部分CPU电源。在考虑花哨的大量资源解决方案时要考虑到这一点。

3
您可能已经考虑过了,但是值得在这个问题上徘徊的其他人提到:大多数闪存卡(SD,CF等)的写容限只有几千个周期(最多)。使用普通卡进行数据记录或类似任务最终会杀死它们(通常比人们认为的时间短)。
克里斯S

@ChrisS:这主要是仅追加操作,并且用最新的条目替换最旧的条目,具有固有的良好写入负载平衡特性,尤其是填充卡片需要几个月的时间。问题可能出在FAT条目本身上,但我相信控制器对此有所了解。
SF。

如果您的设备已关闭电源并且没有将此数据写入卡,该怎么办?就像不编写诊断数据一样,您会浪费大量时间或金钱,或者只是没有一些日志文件吗?
2013年

1
@Freiheit:缺少为客户销售的虽然不是完全不重要的功能,但它仍然不为人所知,另外如果万一其他人搞砸了并寻求替罪羊,我们将失去法庭上的一种辩护途径。最重要的是在可能发生故障之前的数据-证明设备可以正常工作直到最后一刻,而不是设备本身的故障使事件升级为灾难。
SF。

注意。您显然正在捕获重要数据!
2013年

Answers:


8

您可以使用block2mtd驱动程序来使用似乎在其他地方用于SD卡的事务性jffs2或yaffs(2)文件系统,这将解决掉电时数据丢失或文件系统损坏的问题。

但是,这样做可能会引起其他问题。由于SD卡可能具有适当的损耗均衡和扇区重新映射机制,因此它们可能会干扰jffs2和yaffs的实现方法,从而缩短了SD卡的使用寿命或降低了其性能。如果这不是问题,则值得尝试。


一两个月可以装满2GB SD卡,即使完全随机地进行负载均衡也可以达到磨损极限,这应该不是问题。
SF。

5

检查您使用的内核是否支持vfat的flush和/或sync标志(似乎有些版本会忽略它,请小心!)。

或者如果所有内容都可以放入一个文件(例如原始日志流!)或放入几个固定大小的文件(使用分区;),则完全取消文件系统

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.