SDカードのセクタを意図的に破壊する方法はありますか?
ある組み込みハードウェアの読み書きコードの回復力をテストする必要があります。SDカードを数枚犠牲にして、制御された研究のためにいくつかの既知のセクタを破壊するにはどうしたらよいでしょうか?
唯一思いつくのは、1つのセクタを数百万回上書きすることです。Linuxのbadblocksスクリプトを作成して、単一セクタに対して数時間繰り返し破壊的なテストを実行できないものだろうか。
141
3
有用かもしれない別のアプローチ。
もしあなたのコードがLinuxで動作しているなら、quot;faulty"論理デバイスでテストすることができるかもしれません。dmsetup
は I/O エラーを返すデバイスを作成することができます。error
やflakey
ターゲットを使ってデバイスをビルドするだけです。man 8 dmsetup`]1 より。Note:
flakey
ターゲットの使い方は こちらに記載されています。基本的な例 ここ。私の知る限り、I/Oエラーは即座に報告されるので、遅延やストールなどが予想される実際のSDカードの動作とは異なっています。とはいえ、この方法は、少なくとも高速な予備テストなどには有用な場合があると思います。
最近のSDカード(またはeMMC)は、静的および動的なウェアレベリングを使用しているため、これは通常動作しません。つまり、インテリジェントコントローラは、書き込み命令を解釈し、最も使用されていないフラッシュセクターの1つにマッピングします。
ウェアレベリングアルゴリズムの状態を取得する(ベンダー固有の)方法がある可能性があります。そうすれば、基盤となるフラッシュの状態や使用状況を問い合わせることができるかもしれません。あるいは、運が悪いと、この方法が存在しないかもしれません。
本当にフラッシュを破壊することが目的であれば、大量の読み取りと書き込みのサイクルを実行し、読み取ったデータがまだ一貫しているかどうかを継続的にチェックするだけでよいのですが、そうでない場合は、次のような方法があります。例えば、2つの大きなファイルを作成し、それらのチェックサムを保存し、チェックサムを検証するために読み書きを行う。フラッシュが大きければ大きいほど、この処理に時間がかかります。
動作温度を上げることで、トランジスタの摩耗を増加させることができます。加熱されたチップ(70-120 °C)で書き込み-消去サイクルを使用すると、より速く摩耗します。