microSD カードの寿命を(破壊するまで)テストするにはどうすればよいでしょうか?

microSD カードの寿命を(破壊するまで)テストするにはどうすればよいでしょうか?

私は製品に microSD カードを使用していますが、不良セクタが原因でいくつかの障害が発生しました。同じバッチの SD カードがまだいくつかあるので、それらを破壊まで (つまり、セクタが摩耗するまで) テストして、それまでにカードに書き込まれたデータの合計量を測定できるかどうかを確認したいと考えていました。

どうすればこれを実行できるでしょうか?

ありがとう

答え1

1 つの簡単な方法は、安全なディスク消去ツールを使用することです。これらのツールは、ドライブ上のすべての場所に一連のデータを書き込みます。これにより、ドライブのすべてのセクターがテストされます。これらのツールを繰り返し実行して、ディスクが非常にクリーンであることを確認できます。このクリーニングは SD カードの寿命を消費します。カードが故障するまでに実行されたパスの数を追跡すると、ディスクに書き込まれたデータの量がわかります。ただし、書き込みがディスク全体に分散されるため、これはドライブにとって最良のケースです。

最悪のケースは、同じセクターに何度も書き込み、障害が発生するまで続けることです。この結果、カードが故障し始める前に書き込まれるデータ量は最小限になります。1 つのファイルを書き込んでから削除し、再度繰り返し書き込むと、書き込まれるデータ量が最小限になり、カードが早期に故障することになります。これは、カードがスマートではなく、SSD のようにフラッシュ内のセクターを再マップしないことを前提としています。

上記の両方とも、Linux の dd コマンドまたは Linux ライブ 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

これは完璧ではありませんが、独自のコードを書かなくてもほぼ実現できます。各反復ごとに 1 MB のランダム データをディスクに書き込みます。dd がエラーを起こし始めると終了し、失敗するまでに何回反復が行われたかがわかります。ここでの大きな欠点は、データがランダムであることです。ビットが以前と同じであれば、フラッシュによって書き込まれず、実行されない可能性があります。完全な分布を想定すると、結果は失敗するために必要な実際の書き込み数の 2 倍になります。

より完璧な解決策としては、0 と 1 を繰り返すか、交互にチェッカーボードを使用することです。Linux に /dev/one デバイスがない場合、ここで正当化されるよりも複雑な解決策が必要になります。

関連情報