Gab*_*use 141 sd-card bad-sectors bad-blocks
我需要测试一些嵌入式硬件的一些读/写代码的弹性。我怎么可能牺牲一些 SD 卡并破坏几个已知扇区来进行对照研究?
我唯一能想到的就是将单个扇区覆盖几百万次。我想知道是否可以创建一个 Linux badblocks 脚本来在单个扇区上重复运行几个小时的破坏性测试。
Kam*_*ski 168
一种可能有用的替代方法。
如果您的代码在 Linux 下运行,那么也许您可以使用“有故障”的逻辑设备对其进行测试。dmsetup可以创建返回 I/O 错误的设备。只需使用error和/或flakey目标构建您的设备。来自man 8 dmsetup:
error
进入该区域的任何 I/O 出错。用于测试或创建带有孔的设备。
flakey
创建到linear目标的类似映射,但会定期表现出不可靠的行为。用于在测试时模拟故障设备。
据我所知,会立即报告 I/O 错误,因此这与真正的 SD 卡行为不同,您可以预期延迟、停顿等。不过我认为这种方法在某些情况下可能很有用,至少可以快速执行初步测试左右。
Far*_*arO 75
这家伙黑掉了用于标记坏块的 SD 卡内的微控制器:https : //www.bunniestudios.com/blog/?p=3554
您也许可以执行相同的操作并任意将块标记为错误。
今天在 Chaos Computer Congress (30C3) 上,xobs 和我披露了一项发现,即某些 SD 卡包含允许任意代码执行的漏洞——存储卡本身。在黑暗的一面,存储卡上的代码执行会导致一类 MITM(中间人)攻击,其中卡似乎以一种方式运行,但实际上它做的是其他事情。从好的方面来说,它还使硬件爱好者有可能获得非常便宜且无处不在的微控制器来源。
.
这些算法过于复杂且过于特定于设备,无法在应用程序或操作系统级别运行,因此事实证明,每个闪存磁盘都配备了一个相当强大的微控制器来运行一组自定义的磁盘抽象算法。即使是微型 microSD 卡也不是一个,而是至少两个芯片——一个控制器和至少一个闪存芯片(高密度卡将堆叠多个闪存芯片)。
.
嵌入式微控制器通常是经过大量修改的 8051 或 ARM CPU。在现代实现中,微控制器将达到 100 MHz 的性能水平,并且还具有多个片上硬件加速器。令人惊讶的是,将这些控制器添加到设备的成本可能在 0.15 美元到 0.30 美元之间,特别是对于可以在同一业务部门内同时制造闪存和控制器的公司。添加这些微控制器可能比彻底测试和表征每个闪存芯片更便宜,这解释了为什么托管闪存设备可以比原始闪存芯片更便宜,尽管包含微控制器。
.
关键是固件加载和更新机制实际上是强制性的,尤其是对于第三方控制器。最终用户很少接触到这个过程,因为这一切都发生在工厂里,但这并没有让这个机制变得不那么真实。在我对中国电子市场的探索中,我看到店主在“扩展”卡容量的卡上烧固件——换句话说,他们加载一个固件,报告卡的容量远大于卡的容量。实际可用存储空间。事实上,这在销售点是可能的,这意味着更新机制很可能是不安全的。
在 30C3 的演讲中,我们报告了探索特定微控制器品牌的发现,即 Appotech 及其 AX211 和 AX215 产品。我们发现通过制造商保留的命令(即 CMD63 后跟“A”、“P”、“P”、“O”)传输的简单“敲门”序列使控制器进入固件加载模式。此时,卡将接受接下来的 512 个字节并将其作为代码运行。
amo*_*ej1 38
这通常不起作用,因为大多数最新的 SD 卡(或 eMMC)使用静态和动态磨损均衡,这意味着智能控制器会解释您的写入指令并将其映射到最少使用的闪存扇区之一。
您唯一能做的就是尝试联系您的供应商并索取他们的数据表;可能有一些(特定于供应商的)方法来检索其磨损均衡算法的状态。这可能允许您查询底层闪存的状态/使用情况。或者你可能不走运,这可能不存在。
如果你的目标真的是摧毁闪存,你所能做的就是运行大量的读写周期并不断检查你正在读回的数据是否仍然一致。例如,创建两个大文件,存储它们的校验和并读/写它们以验证它们的校验和。闪存越大,此过程所需的时间就越长。
小智 30
您可以通过提高工作温度来增加晶体管的磨损。在加热的芯片 (70-120 °C) 上使用写擦除循环;它会磨损得更快。
Eri*_*son 17
前言:此选项需要额外的编程和硬件修改,但它允许对主机很可能透明的受控读取。
SD 卡有多个 I/O 选项,但可以通过 SPI 进行控制。如果您要使用 SD 卡并对其进行修改,以便可以将引脚连接到微控制器(例如 Arduino),您可以让 Arduino 模拟 SD 卡并对读取 SD 卡的设备透明。您在微控制器上的代码可能会在需要时故意返回错误数据。此外,您可以将 SD 卡放在微控制器上,以便读取数据能够通过微控制器到达 SD 卡,以进行千兆字节的测试。
Guz*_*Zzt 15
我会去 ebay/aliexpress 购买我能从中国找到的最便宜的 SD 卡,那个“好得令人难以置信”。它们通常带有错误的扇区,或者在软件中设置的比实际大得多。无论哪种方式,您最终都会使用有故障的 SD 卡进行测试。
Cub*_*oft 11
Once upon a time, many years ago, I was paid to retrieve a set of graduation photos and videos from a SD card for a rather distraught mother. Upon close inspection, the card had somehow been physically damaged with a visible crack in the outer case and had several bad sectors, most notably several early, critical sectors, which made even the most reliable recovery programs at the time completely fail to read the card. Also, forensic data tools back then cost a fortune.
I ended up obtaining an identical brand/size SD card and writing my own custom raw data dump and restore utility to copy the data from the bad card to the good one. Every time the utility hit a bad sector, it would retry a number of times before writing all zeroes for that sector and, instead of giving up and stopping, ignore the failure and move on to the next sector. The retry attempts were made since I had also noticed that some sectors still had around a 40% read success rate. Once the data was on the new SD card, the recovery tools that had failed before worked flawlessly with minimal data loss/corruption. Overall, about 98% of all of the files were recovered. A number of items that had been previously deleted were also recovered because nothing is ever actually deleted - just marked as such and slowly overwritten. What started out as a slightly boring data recovery exercise became one of my more memorable and interesting personal software development projects. In case you were wondering, the mother was thrilled.
无论如何,这个故事表明,物理损坏 SD 卡是可能的,这样数据仍然可以访问,但扇区几乎不能正常工作,任何试图从中读取的东西都很难做到。SD 卡塑料往往非常脆弱,因此弯曲或切割成一些便宜的塑料可能会奏效。你的旅费可能会改变。
您也可以在您所在地区的一些数据恢复场所四处询问。由于他们专门从各种故障或故障设备中恢复数据,因此他们应该有一些有用的输入/提示,甚至可能手头有一些预先损坏的 SD 卡(例如用于培训目的),您可以从他们那里获得。
这个答案是对@Ruslan 评论的扩展
可能的替代方案:
不确定这是否适合您的目的,但也许它实际上足以物理损坏您的卡,这可能会快得多。