我们正在开发一个小型嵌入式Linux系统(2.6.35英寸),该OS具有一个较小的内部NAND设备用于OS和应用程序(250-500Meg),以及一个带有8Gb SDHC SD卡的SD卡用于数据存储。
可以随时切断设备电源。
系统必须将数据存储到SD卡。这些数据非常重要……这是系统的全部目的。系统通常与远程位置的任何网络完全断开连接,并且每隔4-8周通过运动网检索一次数据。
目前,我们只是在SD卡上安装了VFAT。这主要是因为第一个测试客户端可以轻松地将数据手动复制到他们的Win7笔记本电脑上。
但是,我现在担心在错误的时间断电导致数据丢失只是时间问题。
配置这样的系统以防止数据丢失的最佳方法是什么?JFFS2听起来像我想要的数据写入方式(并且对性能的要求根本不高),但是使用block2mtd听起来很笨拙,等等。我也不确定卡的损耗平衡如何相互作用用它。
最好的方法是什么?
编辑
我现在正在考虑离开文件系统VFAT,并一次分配大小为0xFF的日大小文件,这应该大大限制了关机后再启动的风险。然后,我只能将记录追加到这些预先创建的块中,并且希望SD卡不是那么愚蠢,以至于它们会将擦除/耗损级别写入到0xFF区域中。
我可以使用noatime,但是是否有等效的VFAT nomtime来防止写入修改后的时间字段?我需要某种方法来阻止任何元数据更新,直到创建新的一天的文件为止。
编辑2
电子堆栈交换上的某人提醒我,NAND上也有ECC数据,因此无法防止擦除。
那么,通过block2mtd进行JFFS2在这种情况下是否合适?
编辑3
比我想的还要糟。即使您将完全相同的内容写入磁盘,我拥有的SD卡也会擦除数据块。擦除块为64KB,太大,无法完全延迟写入。我将在一种日志中将多达128KB的数据存储在NAND闪存(我可以控制其写入行为)中,然后将128KB的块写入SD卡上VFAT分区中的128KB对齐的文件中(在(如果其他SD卡具有128KB擦除块)。
sync
在每次写入SD卡后使用命令,它会在更改/创建位后立即将位直接写入而不将其存储在RAM中,因此您所做的更改至少应存储在卡上并且不会因功率损耗而消失。
sync
这可能会使情况变得更糟,因为这会增加元数据更新中的时间。