gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:20:59 27 4
gpt4 key购买 nike

我想在我的系统(Raspberry Pi)关闭时进行跟踪/注册,通常是由于突然断电。

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

如果它只有 10 万个写周期,那么几年后它就会有一个坏块。但我读过有防止它的电路 - 它会防止坏块吗?将日志分布在几个块中会更安全吗?

谢谢

最佳答案

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

  • SD 卡类型 (SLC/MLC)
  • SD 卡 Controller (磨损均衡)
  • SD 卡大小
  • 文件系统
  • 运气

  • 如果我们看一下闪存芯片,它被组织成扇区。扇区是可以完全删除的区域(实际上重置为只有 1 的状态),对于 SD 卡通常为 128 KiB。零可以逐位写入,但写入 1 的唯一方法是删除扇区。

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

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

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

    http://en.wikipedia.org/wiki/Wear_leveling

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

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

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

    有一些文件系统已被调整为与闪存设备一起使用(JFFS2 是最常见的)。据我所知,它们都针对原始闪存进行了优化,并负责磨损均衡并使用位或八位字节级原子操作。我不知道有任何针对 SD 卡优化的文件系统。 (也许有学术兴趣的人可以创建一个考虑到卡片的磨损均衡系统。这会产生一篇漂亮的论文,甚至是一些。)幸运的是,通常的文件系统可以调整为更兼容(更快,领先)磨损)与 SD 卡通过调整文件系统参数。

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

    所以,我们可以做一些粗略的估计。假设一次小的写入平均会使两个 4 KiB 的块无效。这种方式每 10 分钟记录一次,每 160 分钟消耗 128 KiB 删除扇区。如果该卡是 8 GiB 卡,它有大约 64k 个扇区,因此该卡每 20 年经过一次。如果卡能承受 1000 次写入周期,那么它可以使用 20 000 年……

    上面的计算假设完美的磨损平衡和非常有效的文件系统。但是,1 000 的安全系数应该足够了。

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

    最后但并非最不重要的因素是运气。现代 SD 卡不幸有死于其他原因的趋势。即使是相当知名的制造商,柠檬的数量也不是很少。如果杀卡,不一定是因为磨损限制。如果卡已磨损,它仍然可以读取。如果它完全死了,它已经死了(静电,某处小断裂)。

    关于raspberry-pi - SD 卡写入限制 - 数据记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356909/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com