使用简单的 shell 脚本对 SD 卡进行压力(写入)测试以使其损坏

使用简单的 shell 脚本对 SD 卡进行压力(写入)测试以使其损坏

我想知道我的 SD 卡可以获得多少个写入周期。

我用谷歌搜索并找到了很好的答案,例如但对于像我这样的普通人来说太复杂了。

假设它是 64GB exfat 格式化卡。

是不是可以直接向其中写入一个 59GB 的大随机文件。删除它。算一下。并重复整个循环,直到卡出现故障(我假设某些东西最终会阻止写入操作)。

  1. 我猜想可以这样创建一个 59GB 的随机文件:

    dd if=/dev/urandom of=/dev/sdd1/file.txt bs=61865984 count=1024
    
  2. 删除文件:

    rm /dev/sdd1/file.txt
    
  3. 我不确定如何执行计数操作或执行循环,或者将其放入 .sh 文件中是否具有其他语法/限制。你能帮我解决这个问题吗?

我的上述想法可以吗(可以接受)。我并不想变得完美。

还有一些现成的软件/脚本可以做到这一点吗?

(我知道为此我需要让电脑保持开启状态几个月,但我对此表示同意。或者也许当我在重新启动后运行脚本时,它只会添加到之前的计数中。)

谢谢。 :-)。

PS:为什么我要这样做 - 我发现 OEM/无名品牌提供大容量 microSD 卡,与优质品牌卡相比,这些卡相当便宜。人们说这些卡不可靠。我只是想看看他们到底有多糟糕。实际上我的想法是 - 5 年内我可能会向卡写入总计 1TB 的数据。那只是17个周期!我想即使是最差的卡也能做到。 :-)............

答案1

我认为你的想法可行。

您可以将数据直接写入驱动器的设备节点(例如/dev/sdd)。该rm命令是不可能或没有必要的(无论如何,它并不会真正删除太多数据,rm只会更新文件系统中的元数据。您可能会考虑在一个周期中写入所有 1,然后在下一个周期中写入全零。

持久计数器

诀窍是制作一个持久计数器,您可以在之后拾取重新启动。这可以通过文件轻松完成,在示例中COUNT_FILE是“$HOME/.counter”。该计数可能低于实际计数,因为系统可能在dd完成之前已重新启动等。

您还可以调用类似的东西来在/etc/rc.local系统启动时自动启动它。

#!/bin/ss

COUNT_FILE="$HOME/.counter"

read COUNT < "$COUNT_FILE"

if echo "$COUNT" | grep '[^0-9]' > /dev/null
then
    echo >&2 "$0: ERROR: non-integer counter found in $COUNT_FILE."
    exit 1
fi

while true
do
    echo dd if=/dev/urandom of=/dev/sdd bs=61865984
    COUNT=$(( COUNT + 1 ))
    echo $(( COUNT )) > "$COUNT_FILE"
done

坏块

您还可以研究badblocks将模式写入磁盘并将其读回的命令。使用的好处badblocks是它会在每个周期写入、读取和比较每个字节,因此当磁盘开始出现故障时,您应该开始看到越来越多的“坏块”数字。

警告

另外,如果您不小心连接了另一个 USB 驱动器/dev/sdd,那么当此脚本运行时您将完全破坏它。

答案2

当您得到答案时,该特定 SD 卡已损坏。这可能会给您一些相同品牌和型号的其他卡的使用寿命的指示(或者可能不会......各个卡有所不同,更糟糕的是,底层硬件可能会在型号不变的情况下发生变化 - 制造商会做一些邪恶的事情,例如一直如此)。

我的建议是不要在意。购买备用 SD 卡,并确保定期备份卡上的所有重要数据。

相关内容