解释坏块的输出:什么时候该更换 MicroSD 卡?

解释坏块的输出:什么时候该更换 MicroSD 卡?

语境

我正在运行带有 Micro SD 设计的 Raspberry Pi Zero。然而,对于这个特定的应用程序,我无法像通常使用 Raspberry Pi 那样使用只读系统。

客观的

密切关注 Micro SD 的健康状态(并最终以某种方式收到通知,表明需要更换 Micro SD)。

问题

  1. 监控 Micro SD 健康状态的最佳方法是什么(否,fsck因为我无法在系统运行时卸载 Micro SD)?
  2. 就实用性和有效性而言,以下提出的方法是否是最佳解决方案?

提议的方法

我想到使用 的输出来badblocks监视 Micro SD 的状态,并最终在适当的时候更换它。但什么时候该更换 Micro SD 呢?多少个坏块算太多?我应该查看写入错误或读取错误,还是两者都查看?

我做了以下考虑:Micro SD 卡会自动重新分配坏块之外的数据。因此,如果 Micro SD 已满 80%,则有 20% 的块可能“变坏”,但仍然保持 Micro SD 运行。添加一点置信区间,我们是否可以说,如果badblocks输出的坏块数量低于空闲空间块的 50%,那么使用 SD 卡仍然是安全的?

澄清:

  • 区块总数:100
  • 可用空间(以块为单位):20
  • 可接受损坏的块的最大数量(或其他):10

答案1

多少个坏块算太多?

一个。

badblocks是错误的工具。当它报告第一个坏块时,闪存介质已经被使用到损坏的程度。就像一样fsck,它只能检测到已经出现问题的情况——并且您可能已经丢失了数据。

在 SD 卡(通常是您可能遇到的所有闪存大容量存储设备)中,硬件中有一个闪存转换层,这使得本质上模拟、不可靠且容易磨损的实际内存看起来像简单、可靠的块- 可寻址内存。它通过两种方式做到这一点:

  1. 广泛的前向纠错,以对抗比特在物理介质中简单翻转的事实;页面写入的次数越多,这种情况发生的次数就越多
  2. 磨损均衡,使对逻辑页面的写入(如 Pi / 操作系统所见)最终尽可能分布在物理页面上,这样您就不会一直在同一页面上进行操作

这意味着磨损均衡发生在硬件中,对操作系统不可见。当文件系统驱动程序发现坏块时,就会出现纠错无法处理的不可挽回的错误。这不太可能,除非该页面已被写入很多,在这种情况下,整体写入量已经使磨损均衡达到极限。这意味着您已经写入了很多次,因此即使在将写入分布到整个介质之后,某些地方仍然会被频繁写入而导致失败。 (接下来通常发生的事情是SD卡内部的控制器告诉主机它已成为只读设备)。

所以,不。您无法通过验证 SD 卡上的数据来检查 SD 卡的状态(这是 fsck 和 badblocks 所做的),除非您等到为时已晚。

您需要的信息来自里面SD 卡估计有多少总写入“保留”。据我所知,“给我健康信息,亲爱的 SD 卡”命令没有标准回复,但“工业”标记的 SD 卡可能支持 CMD65,并且有一些 Linux 工具(sdmon)支持读取它。

简而言之:如果您需要可靠的写入存储,那么 SD 卡就不是您的最佳选择。该接口最初并不是为此设计的;相反,它假设写入大部分以线性方式发生,一次写入大量数据,并且重复写入很少(相机使用的典型情况是:写入一张完整的图像,然后更新一次 FAT)。

如果您需要在 Pi 上提供长期可靠的大容量存储,恐怕您最好的选择是购买 USB 转 M.2(通常为 SATA)转换器外壳(以及供电的 USB 集线器,如果需要),然后将其插入配备 SSD 后,将其设置为 Rpi 零。大多数这些控制器都支持 SMART 命令,因此您实际上可以使用smartctl;来监视某些内容。确保每个属性的“归一化“ 值是多于这 ”锤石旧”值。确保您不要购买能找到的最便宜的 SSD,但每个中档 SSD 都会带来属性 177、wear-level-count属性 195Hardware ECC Recovered和属性 182。erase-fail-count-total这些归一化值的减少并不一定意味着什么不好(预计会发生这种情况,否则这些指标将毫无用处),但一旦您接近阈值,您可能需要考虑更换 SSD(请注意,您的 Rpi 零可能会首先失效;在 5 之间。 € RPi Zero 和消费级 SSD,该 SSD 是专为机械、热和电气可靠性而设计的。

相关内容