使 SD 卡防损坏

SF.*_*SF. 11 linux filesystems embedded corruption sd-card

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

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

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

您建议采用哪些方法来缓解这种情况?启动时自动运行 fsck.vfat 就足够了吗?

更多信息:

  • 用户不能认为该卡是可移动的。它被认为是内部磁盘。存储在其上的任何数据都可以通过网络或 USB 驱动器进行下载,并且系统会自动清除最旧的条目。这意味着它不需要在您的普通 PC 中可读。
  • 系统目前支持FAT、yaffs和jffs2。向内核添加其他文件系统是可能的,但如果存在其他途径,我们更喜欢它们。
  • 甚至可以根据需要暂停写入几分钟而不会丢失数据。
  • 部分数据丢失或轻微损坏是可以接受的。完全停止日志记录不是。
  • 大多数情况下,关机事件是完全不可预测的。
  • 该系统运行在 ARM9、200MHZ、64MB RAM、32MB 内部闪存上,并消耗了大部分 CPU 功率作为其主要作用。在考虑花哨的资源密集型解决方案时,请考虑到这一点。

the*_*bit 8

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

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


rac*_*man 5

检查您使用的内核是否支持 vfat 的刷新和/或同步标志(似乎有些版本忽略了它,小心!)。

或者如果一切都可以进入一个文件(就像原始日志流的情况一样!)或几个固定大小的文件(使用分区;)