我在产品中使用 microSD 卡,由于坏扇区,我遇到了一些故障。我还有同一批的更多 SD 卡,我想看看我是否可以对它们进行破坏性测试(即直到扇区磨损),并测量在此之前写入卡中的总数据量。
我该如何做这件事?
谢谢
答案1
一种简单的方法是使用安全磁盘擦除工具。这些工具将一系列数据写入驱动器上的每个位置。这将测试驱动器的所有扇区。您可以反复运行这些工具以确保磁盘非常干净。此清理将耗尽 SD 卡的使用寿命。如果您跟踪卡发生故障前运行的次数,您将知道向磁盘写入了多少数据。也就是说,这是驱动器的最佳情况,因为写入分布在整个磁盘上。
最糟糕的情况是反复写入同一个扇区,直到扇区发生故障。这将导致在卡开始发生故障之前写入的数据量最少。如果您要写入一个文件并删除它,然后反复写入,这应该会导致卡过早发生故障,写入的数据量最少。这假设卡不是智能的,不会像 SSD 那样在闪存中重新映射扇区。
以上两项操作都可以使用 Linux 中的 dd 命令或 Linux live CD 来完成。
假设设备是 /dev/sdx,则以下操作应该有效。
i=0
while :
do
dd if=/dev/urandom of=/dev/sdx bs=1024 count=1000
if [ $? != 0 ];then break;fi
let i=i+1
echo $i
done
这并不完美,但几乎可以达到你不编写代码就能达到的效果。每次迭代时,它将向磁盘写入 1MB 的随机数据。当 dd 开始出错时,它将退出,然后你就会知道在失败之前经过了多少次迭代。这里最大的缺陷是数据是随机的。如果位与之前相同,则闪存可能不会写入它们,因此不会执行。假设分布完美,结果将是失败所需的实际写入次数的两倍。
更完美的解决方案是在零和一之间进行迭代或使用交替棋盘。如果 Linux 中没有 /dev/one 设备,那么这需要比我认为更复杂的解决方案。