
我在產品中使用 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 設備,這需要比我認為這裡需要的更複雜的解決方案。