我想知道我的 SD 卡可以获得多少个写入周期。
我用谷歌搜索并找到了很好的答案,例如这但对于像我这样的普通人来说太复杂了。
假设它是 64GB exfat 格式化卡。
是不是可以直接向其中写入一个 59GB 的大随机文件。删除它。算一下。并重复整个循环,直到卡出现故障(我假设某些东西最终会阻止写入操作)。
我猜想可以这样创建一个 59GB 的随机文件:
dd if=/dev/urandom of=/dev/sdd1/file.txt bs=61865984 count=1024
删除文件:
rm /dev/sdd1/file.txt
我不确定如何执行计数操作或执行循环,或者将其放入 .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 卡,并确保定期备份卡上的所有重要数据。