首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全使用SD卡时,电力可以在任何时候熄灭。

安全使用SD卡时,电力可以在任何时候熄灭。
EN

Unix & Linux用户
提问于 2011-12-10 03:38:19
回答 4查看 7.1K关注 0票数 11

我们正在开发一个小型嵌入式Linux系统(2.6.35-ish),它有一个用于操作系统和应用程序的小型内部NAND设备(250-500Meg)和一个带有8Gb SDHC卡的SD卡。

该装置的功率可随时切断。

系统必须将数据存储到SD卡。这些数据很重要..。这是整个系统的目的。这些系统通常与远程位置的任何网络完全断开连接,并且每隔4-8周就通过鬼网检索数据。

目前,我们只是在SD卡上找到了VFAT。这主要是为了让第一个测试客户端能够轻松地将数据手动复制到他们的Win7笔记本电脑上。

然而,我现在担心的是,在错误的时间停电导致数据丢失只是时间问题。

配置这样一个系统以防止数据丢失的最佳方法是什么?就数据的写入方式而言,JFFS2听起来就像我想要的那样(性能需求一点也不高),但使用block2mtd等听起来相当离谱。我也不知道卡的磨损水平将如何与之交互。

做这件事最好的方法是什么?

编辑

我现在正在考虑离开文件系统VFAT,一次分配一天大小的文件,其中充满了0xFF,这将大大限制电力循环故障的暴露。然后,我只能在那些预先创建的块中添加记录,希望SD卡不会那么愚蠢,它们会擦除/磨损级别写入到0xFF区域。

我可以使用noatime,但是是否有一个VFAT指定时间等效于防止写入修改后的时间字段?在创建新的一天文件之前,我需要一些方法来防止任何元数据更新。

编辑2

电子堆栈交换机上有人提醒我,NAND上也有ECC数据,所以没有办法阻止擦除的需要。

那么,在这种情况下,JFFS2通过block2mtd是否合适呢?

编辑3

比我想象的还要糟。我所拥有的SD卡将擦除数据块,即使您将完全相同的内容写入磁盘。擦除块是64 to,这太大了,不能完全延迟写入。我将以NAND闪存最多128 SD的数据(我可以控制它的写入行为),在一种日志中,然后将128 SD块写到SD卡上VFAT分区中对齐的128 SD文件中(以防其他SD卡有128 SD的删除块)。

EN

回答 4

Unix & Linux用户

发布于 2011-12-10 04:25:26

好吧,你解决这个问题的方法是解决“随时可以切断电源”的问题。连一分钟的电池动力都不可能增加吗?

或者,也许你可以用两张SD卡。把数据写到一张卡上,同步,写到另一张卡。你的每一个数据块都需要一个校验和块号,但是即使有一些不吉利的电源故障,其中一张应该是正确的。

您的基本问题将是在SD卡上的磨损平衡,AFAIK依赖于卡片供应商(甚至批次,他们可以随时改变它)。它可能不能正确处理停电问题。取决于它的作用,这可能不仅仅意味着腐蚀你要写的那块东西。

  1. 假设小卡-3(闪存)块。块1已收到超过2或3的写入,我将按数字调用物理块,并按字母调用逻辑块A、B、C。现在,A=1,B=2,C=3。
  2. 你给A块写一封信。SD卡就像啊哈!我们需要在这里进行磨平,否则块1在2和3之前就会磨损,它决定更换块1和2。
  3. 它将块1读入RAM位置I(在SD卡上,而不是系统RAM上)。它更新了你想要改变的部分。
  4. 它将块2读入RAM位置ii。
  5. 它擦除块1
  6. 它将RAM位置ii写入块1。
  7. 它更新映射表以表示B=1
  8. 它擦除了块2。
  9. 它将RAM位置I写入块2。
  10. 它更新映射表以表示A=2

当然,“更新映射表”并不总是那么简单。而5-10的顺序可能是不同的(当然,如果它们都完成了,那么擦除就必须先写下来)。但是,电力故障会发生,你不仅会得到一个损坏的(如你所期望的),而且还有B。或者,如果在映射更新过程中发生了电源故障,谁知道会导致什么样的损坏。

票数 5
EN

Unix & Linux用户

发布于 2012-06-26 19:24:41

在electronics.stackexchange.com中也讨论了类似的东西:如何保护SD卡防止意外的电源故障?

一个与软件解决方案一起工作的横向答案是,看看硬件( ESE上也有一个关于这个的问题,但我现在找不到它;它不是严格针对SD卡,只是关于设备失去电源,以及如何检测这个问题并对其采取行动)。

短故事是:你可能没有电池电源,但你的电源有一些相当大的电容器来平滑电源。基本上,电力不会就这么熄灭了。电压逐渐变小。可能有一个棕色的保护IC/电路,当电压降到某个点以下时,它会在你的嵌入式系统上断言复位信号。PC主板也有这些功能,它们响应来自PSU的“POWEROK”信号。这意味着,当电源熄灭时,在电压降到安全水平之前,计算机将被迫停机几毫秒。在这段时间里,像SD卡这样的外围设备仍然可以使用,但是没有更多的事务来自计算机。

很可能一个SD卡有足够的时间来完成任何悬而未决的交易,包括磨损平衡,在它的力量熄灭之前。使用足够大的电容器或使用SD卡附近的电源可能有助于确保这一点,但您可以随时试用您的平台。很可能它能保持足够的时间。

如果问题的硬件方面没有问题,您可以解决软件方面的问题。使用两张卡进行冗余的德罗伯特's模式不错,使用像VFAT这样的标准文件系统可以减少混淆卡磨损平衡算法的风险。

不管怎么说,很可能你不会有那么多问题。假设您的卡上的一个块可以保存100次(保守--但一定要尝试获得高质量的卡片!),并且使用8GB的卡,到第一个块死亡时,您已经写了800 8GB(当然,从统计上讲)。

票数 4
EN

Unix & Linux用户

发布于 2014-09-03 08:16:56

我们有一个问题,我们的SD,ext2根文件系统被破坏意外的电源故障。首先,我们让系统使用只读根挂载运行.由于我们需要一些可写存储(但我们不是数据日志),所以我们将第二个分区设置为可写分区。为了最大限度地减少FS对意外电源故障的损害,我们将其设置为一个ext3分区,尽管这将导致至少两倍多的物理写入卡。与数据记录器相比,这种组合(但我承认我们的第二个分区写入频率不高)似乎没有问题。到目前为止。(在专业设施安装约30个月的系统)

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/26516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档