Sd-Card

壓力(寫入)使用簡單的 shell 腳本測試 SD 卡以進行破壞

  • February 11, 2021

我想知道我可以從我的 SD 卡中獲得多少個寫入周期。

我用Google搜尋並找到了這樣的好答案,但對於像我這樣的普通人來說太複雜了。

說它是 64GB exfat 格式的卡。

不可能只向它寫入一個 59GB 的大隨機文件。刪除它。數一數。並重複整個循環,直到卡出現故障(我假設某些東西最終會阻止寫操作)。

  1. 我猜可以像這樣創建一個 59GB 的隨機文件:
dd if=/dev/urandom of=/dev/sdd1/file.txt bs=61865984 count=1024
  1. 刪除文件:
rm /dev/sdd1/file.txt
  1. 我不確定如何進行計數操作或循環,或者將其放入 .sh 文件中是否有其他語法/限制。你能幫我解決這個問題嗎?

我的上述想法可以嗎(可以接受)。我並不想做到完美。

還有一些現成的軟體/腳本可以做到這一點嗎?

(我知道為此我需要將 PC 保持開啟數月,但我可以接受。或者當我在重新啟動後執行腳本時,它只會增加之前的計數。)

謝謝你。:-)。

PS:我為什麼要這樣做 - 我發現 oem/沒有名牌的大容量 microsd 卡與優質品牌卡相比非常便宜。人們說這些卡不可靠。我只是想看看他們到底有多糟糕。實際上我的想法是——在 5 年內我可能會在一張卡上寫入總共 1TB 的容量。那隻是17個週期!我想即使是最糟糕的卡也可以做到。:-)…………

我認為你的想法可行。

您可以將數據直接寫入驅動器的設備節點(例如/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,那麼當此腳本執行時,您將完全銷毀它。

當你得到答案時,那個特定的 SD 卡已經死了。這可能會為您提供一些具有相同品牌和型號的其他卡的壽命的跡象(或者它可能不會……個別卡會有所不同,更糟糕的是,底層硬體可能會在沒有更改型號的情況下發生變化 - 製造商會做一些壞事,比如一直這樣)。

我的建議是不要在意。購買備用 SD 卡,並確保定期備份卡上的所有重要數據。

引用自:https://unix.stackexchange.com/questions/243053