Raspberry pi SD卡写入限制-数据记录

Raspberry pi SD卡写入限制-数据记录,raspberry-pi,hardware,sd-card,fat,Raspberry Pi,Hardware,Sd Card,Fat,当我的系统(树莓Pi)关闭时,通常由于突然断电,我需要跟踪/注册 我想通过在SD卡上每10分钟记录一次心跳来做到这一点,这样每10分钟它就会转到SD卡并将当前时间/日期写入文件中。从长远来看,这会损害SD吗 如果它只有10万个写入周期,那么几年后它就会有一个坏块。但是我读到有电路可以阻止它-它能阻止坏块吗?将日志分块分发是否更安全 谢谢这个问题的一般答案是“视情况而定”。(实际答案是您已有的答案;如果您的文件系统参数没有错误,则在这种情况下您有很大的余量。)这取决于以下几点: SD卡类型(SL

当我的系统(树莓Pi)关闭时,通常由于突然断电,我需要跟踪/注册

我想通过在SD卡上每10分钟记录一次心跳来做到这一点,这样每10分钟它就会转到SD卡并将当前时间/日期写入文件中。从长远来看,这会损害SD吗

如果它只有10万个写入周期,那么几年后它就会有一个坏块。但是我读到有电路可以阻止它-它能阻止坏块吗?将日志分块分发是否更安全


谢谢

这个问题的一般答案是“视情况而定”。(实际答案是您已有的答案;如果您的文件系统参数没有错误,则在这种情况下您有很大的余量。)这取决于以下几点:

  • SD卡类型(SLC/MLC)
  • SD卡控制器(磨损均衡)
  • SD卡大小
  • 文件系统
  • 运气
如果我们看一看闪存芯片,它被组织成多个扇区。扇区是一个可以完全擦除的区域(实际上重置为只有1的状态),对于SD卡来说通常为128 KiB。零可以逐位写入,但写入1的唯一方法是擦除扇区

扇区擦除的数量是有限的。每次在同一扇区上执行擦除操作将花费更长的时间,并且写入每个单元的值中存在更多的不确定性。给卡的写限制实际上是单个扇区的擦除次数

为了避免过快达到此限制,SD卡有一个控制器,负责磨损均衡。其基本思想是对用户透明地更改使用的扇区。如果您请求相同的内存位置,它可能会在不同的时间映射到不同的扇区。其基本思想是,该卡有一个空扇区列表,每当需要一个扇区时,它就会选择使用最少的扇区

还有其他算法。控制器可以跟踪扇区上发生的扇区擦除时间或错误。不幸的是,卡制造商通常不会透露太多关于精确算法的信息,但有关概述,请参阅:

有不同类型的闪存芯片可用。SLC芯片每个存储单元只存储一位(0或1),MLC单元存储两位或三位。当然,MLC芯片对老化更敏感。三位(八级)单元的写入次数不能超过1000次。所以,如果你需要可靠性,尽管SLC卡价格较高,但还是要买一张

由于磨损均衡将磨损分布到卡上,较大的卡比较小的卡承受更多的扇区擦除,因为它们有更多的扇区。原则上,具有100000个写入周期的4 GiB卡在其生命周期内将能够承载400 TB的数据

但要使事情变得更复杂,文件系统与此有很大关系。当一小块数据写入磁盘时,会发生很多不同的事情。至少数据被附加到文件中,并且相关的目录信息(文件大小)被更改。对于典型的文件系统,这意味着至少有两个4kib块写入,其中一个可能只是一个附加(不需要擦除)。但很多其他事情可能会发生:写日记,积木变满,等等

有些文件系统已经过调整,可以与flash设备一起使用(JFFS2是最常见的)。据我所知,它们都是针对原始闪光进行优化的,并负责磨损均衡和使用位或八位组级别的原子操作。我不知道有任何针对SD卡优化的文件系统。(也许有学术兴趣的人可以创建一个考虑到卡的磨损均衡系统的文件。这将产生一篇好的论文,甚至是几篇。)幸运的是,通过调整文件系统参数,可以调整常用的文件系统,使其与SD卡更兼容(更快,导致磨损)


现在物理磁盘上有这两层,几乎不可能跟踪执行了多少次擦除。其中一层非常复杂(文件系统),另一层(磨损整平)完全不透明

所以,我们可以做一些粗略的估计。让我们猜测,一次小的写操作平均会使两个4kib块失效。这种方式每10分钟记录一次,每160分钟消耗128 KiB擦除扇区。如果这张卡是8Gib卡,它大约有64k个扇区,因此每20年一次。如果这张卡能经受1000次写入周期,那么它可以使用20000年

上述计算假设完美的磨损均衡和非常高效的文件系统。然而,1000的安全系数应该足够了

当然,这很容易被破坏。最简单的方法之一是忘记装载带有noatime属性的磁盘。然后,文件系统将更新文件访问时间,这可能导致每次访问(甚至读取)文件时都会写入。或者操作系统正在将虚拟内存交换到卡上


最后但并非最不重要的因素是运气。现代SD卡有一种不幸的趋势,即死于其他原因。即使是知名制造商生产的柠檬也不算少。如果你杀死一张牌,不一定是因为磨损极限。如果卡片磨损,它仍然可读。如果它完全死掉了,那就是因为其他原因(静电、某处小骨折)而死掉了。

这取决于SD卡的品牌和型号,但对于大多数现代卡,我认为你应该没问题。感谢你花时间写下如此翔实的答案。