一部の組み込みハードウェアの読み取り/書き込みコードの回復力をテストする必要があります。制御された研究のために、いくつかのSDカードを犠牲にし、いくつかの既知のセクターを破壊するにはどうすればよいですか
私が考えることができる唯一のことは、単一のセクターを数百万回上書きすることです。Linuxのbadblocksスクリプトを作成して、破壊テストを1つのセクターで数時間繰り返し実行できるかどうかは疑問です。
一部の組み込みハードウェアの読み取り/書き込みコードの回復力をテストする必要があります。制御された研究のために、いくつかのSDカードを犠牲にし、いくつかの既知のセクターを破壊するにはどうすればよいですか
私が考えることができる唯一のことは、単一のセクターを数百万回上書きすることです。Linuxのbadblocksスクリプトを作成して、破壊テストを1つのセクターで数時間繰り返し実行できるかどうかは疑問です。
回答:
役に立つかもしれない代替アプローチ。
コードがLinuxで実行されている場合は、「障害のある」論理デバイスでテストできます。dmsetup
I / Oエラーを返すデバイスを作成できます。error
および/またはflakey
ターゲットを使用してデバイスを構築するだけです。からman 8 dmsetup
:
error
この領域に送られるI / Oにエラーが発生します。テストまたは穴のあるデバイスの作成に役立ちます。
flakey
linear
ターゲット と同様のマッピングを作成しますが、定期的に信頼できない動作を示します。テスト時の故障デバイスのシミュレーションに役立ちます。
注:flakey
ターゲットの使用法はここに記載されています。基本的な例はこちら。
私の知る限り、I / Oエラーはすぐに報告されるため、遅延やストールなどが予想される実際のSDカードの動作とは異なります。予備試験など。
この男は、不良ブロックをマークするために使用されるSDカード内のマイクロコントローラーをハッキングしました:https : //www.bunniestudios.com/blog/?p=3554
あなたは同じことをすることができるかもしれなくて、任意にブロックを欠陥があるとマークします。
本日、Chaos Computer Congress(30C3)で、xobsと私は、一部のSDカードに任意のコード実行を可能にする脆弱性がメモリカード自体に含まれているという発見を開示しました。暗い面では、メモリカードでコードを実行すると、クラスが一方向に動作しているように見えるMITM(中間者)攻撃のクラスが有効になりますが、実際には別の動作をします。ライト側では、ハードウェア愛好家が非常に安価でユビキタスなマイクロコントローラーのソースにアクセスできる可能性もあります。
。
これらのアルゴリズムは複雑すぎて、アプリケーションやOSレベルで実行するにはデバイス固有であるため、すべてのフラッシュメモリディスクには、ディスク抽象化アルゴリズムのカスタムセットを実行するための適度に強力なマイクロコントローラーが搭載されています。小型のmicroSDカードでさえ、1つではなく、少なくとも2つのチップ(コントローラー、および少なくとも1つのフラッシュチップ)を搭載しています(高密度カードは複数のフラッシュダイをスタックします)。
。
組み込みマイクロコントローラは通常、大幅に変更された8051またはARM CPUです。最新の実装では、マイクロコントローラーは100 MHzのパフォーマンスレベルに近づき、ダイ上にいくつかのハードウェアアクセラレーターも備えています。驚いたことに、これらのコントローラーをデバイスに追加するコストは、おそらく同じビジネスユニット内でフラッシュメモリとコントローラーの両方を製造できる企業にとっては、おそらく0.15ドルから0.30ドルのオーダーです。これらのマイクロコントローラーを追加する方が、各フラッシュメモリチップを徹底的にテストして特性評価するよりもおそらく安価です。
。
重要なのは、特にサードパーティのコントローラーの場合、ファームウェアのロードと更新のメカニズムが実質的に必須であることです。このプロセスはすべて工場で行われるため、エンドユーザーがこのプロセスにさらされることはめったにありませんが、これによりメカニズムが現実的になることはありません。中国の電子機器市場の調査で、カードの容量を「拡張」するカードにファームウェアを焼き付けている店主が見ました。つまり、カードの容量がはるかに大きいことを報告するファームウェアをロードします実際に利用可能なストレージ。これが販売時点で可能であるという事実は、おそらく、更新メカニズムが保護されていないことを意味します。
30C3での講演では、特定のマイクロコントローラーブランド、つまりAppotechとそのAX211およびAX215製品について調査した結果を報告します。製造元が予約したコマンド(つまり、CMD63の後に「A」、「P」、「P」、「O」が続く)を介して送信された単純な「ノック」シーケンスを発見します。この時点で、カードは次の512バイトを受け入れ、コードとして実行します。
これは通常、ほとんどの最新のSDカード(またはeMMC)が静的および動的なウェアレベリングを使用しているため、機能しません。つまり、インテリジェントコントローラーが書き込み命令を解釈し、最も使用頻度の低いフラッシュセクターの1つにマッピングします。
できることは、サプライヤに連絡してデータシートを要求することだけです。ウェアレベリングアルゴリズムの状態を取得するいくつかの(ベンダー固有の)方法があるかもしれません。これにより、潜在的なフラッシュの状態/使用状況を照会できる可能性があります。または、あなたは不運かもしれませんし、これは存在しないかもしれません。
あなたの目標が本当にフラッシュを破壊することであるなら、あなたができることは大規模な読み書きサイクルを実行し、読み返しているデータがまだ一貫していることを継続的にチェックすることです。たとえば、2つの大きなファイルを作成し、チェックサムを保存して、チェックサムを検証するために読み取り/書き込みを行います。フラッシュが大きいほど、このプロセスにかかる時間が長くなります。
動作温度を上げることでトランジスタの摩耗を増やすことができます。加熱されたチップ(70-120°C)で書き込み消去サイクルを使用します。より速く摩耗します。
序文:このオプションでは、追加のプログラミングとハードウェアの変更が必要ですが、ホストに対して透過的な制御された読み取りが可能になる可能性があります。
SDカードには複数のI / Oオプションがありますが、SPIで制御できます。SDカードを取り出して、ピンをマイクロコントローラー(Arduinoなど)に接続できるように変更する場合、ArduinoがSDカードを模倣し、SDカードを読み取るデバイスに対して透過的になるようにすることができます。マイクロコントローラー上のコードは、必要なときに意図的に不良データを返す可能性があります。さらに、読み取りがマイクロコントローラーを介してSDカードに渡され、ギガバイトのテストができるように、マイクロコントローラーにSDカードを置くことができます。
私はebay / aliexpressに行き、私が中国で見つけられる最も安いSDカードを購入します。これは「本当であるには良すぎる」カードです。多くの場合、不良セクタが付属しているか、実際よりもはるかに大きくなるようにソフトウェアに設定されています。いずれにしても、テストに使用するSDカードに障害が発生するはずです。
むかしむかし、何年も前、私はかなり混乱した母親のために、SDカードから卒業写真とビデオのセットを取得するために支払われました。綿密な検査の結果、カードは何らかの形で物理的に破損しており、外部ケースに目に見える亀裂があり、いくつかの不良セクター、特にいくつかの初期の重要なセクターがあったため、当時の最も信頼性の高い回復プログラムでさえも完全に読み取れませんでした。また、当時のフォレンジックデータツールには大金がかかりました。
最終的には、同じブランド/サイズのSDカードを入手し、独自のカスタム生データダンプおよび復元ユーティリティを作成して、不良カードから良好なカードにデータをコピーしました。ユーティリティが不良セクタにヒットするたびに、そのセクタのすべてのゼロを書き込む前に何度も再試行し、あきらめて停止する代わりに、失敗を無視して次のセクタに進みます。一部のセクターではまだ約40%の読み取り成功率があることに気付いていたため、再試行が行われました。データが新しいSDカードに格納されると、以前は失敗していたリカバリツールが最小限のデータ損失/破損で完全に機能しました。全体として、すべてのファイルの約98%が回復されました。実際には何も削除されないため、以前に削除されていた多くのアイテムも回復されました。そのようにマークされ、ゆっくり上書きされます。少し退屈なデータリカバリの練習として始まったものが、私の記憶に残る興味深い個人用ソフトウェア開発プロジェクトの1つになりました。あなたが疑問に思っている場合には、母親は興奮していた。
とにかく、この話は、データにアクセスできるがSDカードを物理的に損傷する可能性があることを示していますが、セクタはほとんど機能しておらず、そこから読み取ることは困難です。SDカードのプラスチックは非常に脆い傾向があるため、いくつかの安価なものに曲げたりカットしたりするとうまくいく可能性があります。あなたのマイレージは異なる場合があります。
また、お住まいの地域のいくつかのデータ復旧場所で尋ねることができます。さまざまな故障または故障したデバイスからのデータ復旧に特化しているため、いくつかの有用な入力/ヒントが必要です。また、それらから入手できる事前に破壊されたSDカード(例:トレーニング目的)があります。
dd
で、これと同じように動作するようになると思います。よくわかりません。
この回答は、@ Ruslanのコメントを拡張したものです。
可能な代替案:
これが目的に合っているかどうかはわかりませんが、実際にはカードに物理的な損傷を与えるだけで十分な場合があります。
一部の古い、低容量のSDカード(16MB程度)は、TSOP / TSSOPスタイルのパッケージでフラッシュチップを使用します。SMTのリワークが可能なワークショップ(組み込み作業を行っている場合は、社内でそのスキルを持っている可能性があります。さもなければ、ボードレベルの電話/ラップトップの修理を行う小規模企業を確認してください)デバイスプログラマーによる未加工(ECCコードを含む)。
それでも、主にテストすることに注意してください:
そして最悪の場合
何らかの理由でSDカードからの不規則な動作での動作を確認したい場合は、おそらく電気ノイズをインターフェイスラインに導入することをお勧めします(例えば、FETバススイッチを間に置き、ランダムに瞬間的に切り替える(適切な電気レベルの)無意味な信号のソースに。
論理レベルでは常に同じ場所にある必要があるため、FAT32マスターブートレコード領域はおそらく最も悪用されやすい領域です。(おそらく、これは不良セクタのソフト再マッピングによって処理されますが、これがすべてのハードウェアに実装されていることはやや懐疑的です。)sfdisk
ループで実行して、その方法で破壊できるかどうかを確認できます。
ただし、ソフトウェアの不良ハードウェアを処理しようとするのではなく、ハードウェアの信頼性を向上させるためにできる限りのことを行うようお願いします。問題は、SDカードがあらゆる種類の奇妙な方法で失敗することです。読み取り不能になり、書き込み不可になり、不正なデータを与えたり、操作中にタイムアウトしたりします。カードが故障する可能性のあるすべての方法を予測しようとするのは非常に困難です。
私のお気に入りの失敗の1つ、「ビッグデータモード」を次に示します。
SDカードは、多大なコスト圧力の下にある一般消費者向け製品です。部品は急速に変化し、データシートは入手困難です。偽造品は前代未聞ではありません。安価なストレージの場合、それらは打ち負かすことは困難ですが、SSDは信頼性を優先事項にしますが、SDカードの優先事項は速度、容量、コストです(おそらくこの順序ではありません)。
最初の防衛線は、取り外し可能なSDカードの代わりに、信頼できる製造業者の実際のデータシートとともにはんだ付け可能なeMMCパーツを使用することです。はい、GBあたりのコストは高くなりますが、部品の生産期間はより長くなり、少なくとも何が得られるかはご存知でしょう。また、部品をはんだ付けすることにより、取り外し可能なカードで発生する可能性のある問題(書き込み中にカードが引っ張られたり、電気的接触が不十分になるなど)を回避できます。
製品にリムーバブルストレージが必要な場合、または変更するには遅すぎる場合は、「工業用」グレードのカードに余分なお金を費やすか、使い捨てのオブジェクトとして扱うことを検討してください。(Linuxの下で)行うことはfsck
、ブート時のカードであり、エラーが報告された場合は再フォーマットします。このユースケースでは再フォーマットが許容されます。それからfsck
また。再フォーマット後もエラーが報告される場合は、RMAを行い、ハードウェアをeMMCを使用する新しいバリアントに置き換えます。
幸運を!
おそらくこれはあなたが望んだ方向ではないかもしれませんが、私のラジオやラップトップが読み取り中にSDカードを取り外すと、1/5または1/10回クラッシュしたSDカードが保証されます。カードは、読み取りおよびおそらく書き込み中に電源が切断されてもうまく機能しないようです。以下のロバートカルホーンのコメントを読んだ後、FATに損害を与える可能性があると信じるようになります。読んでいるだけでクラッシュが発生する理由はわかりませんが、書き込みは行わないでください。
SDカードがFAT32フォーマットの場合、2つの脂肪を16進編集し、正しい16進コードでセクターを不良としてマークできます。これは、この特定の場所で不良セクタを検出するはずのソフトウェアを論理テストする場合にのみ、トリックです。また、SDカードに害を与えることもありません。再フォーマットすると、通常の状態に戻ります。
--make-bad-sector
フラグは有望に見えます!ただし、これが最初にこのコマンドを実行するLinuxシステム内でのみ機能するかどうかはわかりません。このコマンドhdparm --make-bad-sector 20000 /dev/sd#
により、セクタ20000が何らかの形で不良になり、Linuxを実行していない組み込みハードウェアデバイスで不良として検出されることを期待しています。何かご意見は?
Linuxのbadblocksスクリプトを作成して、破壊テストを1つのセクターで数時間繰り返し実行できるかどうかは疑問です。
単一のセクターで-いいえ。SDカード内のウェアレベリングコードが論理ブロックを場所全体に再マッピングするためです。
ただし、不良ブロックがbadblocks -w
発生するまでループで簡単に実行できます。このような何かが動作するはずです:
while badblocks -w /dev/xx; do :; done
不良ブロックが検出されなかった場合はbadblocksが0を返し、それ以外の場合は≠0を返します(マニュアルページには書かれておらず、ソースコードを確認していません)。
通常、SD / uSDカードではウェアレベリングが実装されるため、これは非常に困難です。タイプ(シングルレイヤーセル、マルチレイヤー、TLC、3D-NANDなど)に応じて、セクタープールを使い果たすのに十分な書き込みサイクルが複数TBにある場合があります。
4GB、64GB、256GB Pro Duo、SSD、サムドライブで実際にこれをテストしました。64GBK ------ 4 Micron 16GBチップを使用すると、約3.84TB持続し、その後FATエリアで1つのソフトエラーが発生しました。 。256GBの使用は少し短くなりましたが、直接チップアクセスなしで推定するとおそらく5TBを書き込んでからMBRが破損しましたが、コントローラがUSB3モードでしっかりと動作したがUSB2がリードバック中にさらにグリッチを引き起こしたかどうかは明確ではありませんでしたまた、非常に暑くなりました。4GB Duoは、データをコピーするときにリーダーで失敗しました。これも確かではありませんが、6年の使用に相当し、カメラも「Recovering」メッセージを表示していました。ちなみに、書き込み中に電源電圧を変えると、LOTがより速く失敗します。私の128GB microSDは、約2年の使用後に同様の症状で失敗しましたが、
X線実験に関する無関係なメモを削除しました。