SDカードのセクタを意図的に壊す/壊すにはどうすればいいですか?

bad-blocks bad-sectors sd-card

私は、いくつかの組み込みハードウェアのためのいくつかの読み書きコードの回復力をテストする必要があります。制御された研究のために、数枚のSDカードを犠牲にして、いくつかの既知のセクタを壊すにはどうしたらいいでしょうか?

1つのセクタを数百万回上書きすることしか思いつかない。Linuxのバッドブロックスクリプトを作成して、1つのセクタに対して数時間繰り返し破壊テストを実行することはできないだろうか

  141  Gabe Krause  2017-09-11


ベストアンサー

役に立ちそうな代替アプローチ

もしあなたのコードがLinuxで動作しているのであれば、”欠陥のある “論理デバイスでテストできるかもしれません。dmsetupはI/Oエラーを返すデバイスを作ることができます。errorflakeyターゲットを使ってデバイスをビルドしてください。man 8 dmsetupから

error この領域に行くすべてのI/Oをエラーにする。テストや穴の開いたデバイスを作成するのに便利

flakey linear ターゲットと同様のマッピングを作成しますが、定期的に信頼性の低い挙動を示します。テスト時に故障したデバイスをシミュレートするのに便利

注意: flakeyターゲットの使い方は、こちらに文書化されています。基本的な例 こちら

私が知っている限りでは、I/Oエラーはすぐに報告されますので、これは遅延やストールなどが予想される実際のSDカードの動作とは異なります。とはいえ、この方法は、少なくとも高速な予備テストなどを行う場合には有用な場合もあると思います

168  Kamil Maciorowski  2017-09-11


この男は、不良ブロックをマークするために使用されるSDカード内部のマイクロコントローラをハッキングした。https://www.bunniestudios.com/blog/?p=3554

同じことをして、ブロックを任意に欠陥としてマークすることができるかもしれません

今日のChaos Computer Congress (30C3)で、xobsと私は、いくつかのSDカードにはメモリカード自体に任意のコード実行を可能にする脆弱性が含まれているという発見を公開しました。ダークサイドでは、メモリカード上でコードを実行すると、MITM (man-in-the-middle) 攻撃のクラスが可能になります。光の面では、ハードウェア愛好家が、非常に安価でユビキタスなマイクロコントローラのソースにアクセスできる可能性もあります

.

これらのアルゴリズムは、アプリケーションやOSレベルで実行するにはあまりにも複雑でデバイス固有のものであるため、すべてのフラッシュメモリディスクには、ディスク抽象化アルゴリズムのカスタムセットを実行するための合理的に強力なマイクロコントローラが搭載されていることが判明しました。小型のmicroSDカードでさえ、1つではなく、少なくとも2つのチップ-コントローラと少なくとも1つのフラッシュチップ-が含まれています(高密度カードは、複数のフラッシュダイを積み重ねます)

.

組み込みマイクロコントローラは、通常、大きく変更された8051またはARM CPUです。最新の実装では、マイクロコントローラは100MHzのパフォーマンスレベルに近づき、また、いくつかのハードウェアアクセラレータをオンダイで搭載しています。驚くべきことに、これらのコントローラをデバイスに追加するコストは、特にフラッシュメモリとコントローラの両方を同じビジネスユニット内で製造できる企業にとっては、おそらく0.15ドルから0.30ドルのオーダーになるでしょう。各フラッシュメモリチップを徹底的にテストして特性を評価するよりも、これらのマイクロコントローラを追加する方がおそらく安いでしょう

.

重要なのは、特にサードパーティ製コントローラの場合、ファームウェアのローディングとアップデートのメカニズムが事実上必須であるということです。すべては工場で行われるので、エンドユーザーがこのプロセスに触れることはほとんどありませんが、だからといって、このメカニズムが現実味を帯びていないわけではありません。中国の電子機器市場を探索していると、店員がカードの容量を「拡張」するファームウェアをカードに焼き付けているのを見たことがあります。これが販売時点で可能であるという事実は、ほとんどの場合、更新メカニズムが確保されていないことを意味します

30C3 での講演では、特定のマイクロコントローラブランド、すなわち Appotech とその製品である AX211 と AX215 を調査した結果を報告します。我々は、コントローラをファームウェアロードモードに落とし込む、メーカーが保存したコマンド(すなわち、CMD63 に続いて ‘A’、’P’、’P’、’O’)を介して送信される単純な「ノック」シーケンスを発見しました。この時点で、カードは次の512バイトを受け入れ、コードとして実行します

75  FarO  2017-09-12


最近のSDカード(またはeMMC)のほとんどは、静的および動的なウェアレベリングを使用しているため、これは一般的には機能しません

唯一できることは、サプライヤに連絡してデータシートを入手してみることです。これは、潜在的に基礎となるフラッシュの状態/使用量を照会することを可能にします。あるいは、運が悪く、これが存在しない場合もあるかもしれません

本当にフラッシュを破壊することが目的なら、大規模な読み書きサイクルを実行して、読み返しているデータが一貫しているかどうかを継続的にチェックするだけです。例えば、2つの大きなファイルを作成し、それらのチェックサムを保存し、それらのチェックサムを確認するためにそれらを読み書きします。フラッシュが大きくなればなるほど、このプロセスには時間がかかります

38  amo-ej1  2017-09-11


動作温度を上げることで、トランジスタの摩耗を増加させることができます。加熱されたチップ(70~120 °C)で書き込み消去サイクルを使用すると、摩耗が早くなります

30  Pavlus  2017-09-11


序文。このオプションは、追加のプログラミングとハードウェアの変更が必要ですが、ホストにはほとんどの場合、制御された読み取りが可能になります

SDカードには複数のI/Oオプションがありますが、SPIで制御することができます。SD カードを使用して、マイクロコントローラ (Arduino など) にピンを接続できるように変更した場合、Arduino が SD カードを模倣し、SD カードを読み取るデバイスからは透過的になる可能性があります。マイクロコントローラ上のコードは、必要なときにわざと悪いデータを返すことができます。さらに、マイクロコントローラ上に SD カードを配置して、読み取りをマイクロコントローラから SD カードに渡すことができるようにし、ギガバイトのテストを可能にします

17  Eric Johnson  2017-09-11


私はebay/aliexpressに行き、私は中国から見つけることができる最も安いSDカードを購入するだろう、「本当であることがあまりにも良い」もの。彼らは多くの場合、欠陥のあるセクターが付属しているか、ソフトウェアでは、彼らが実際にあるよりもはるかに大きくなるように設定されています。いずれにせよ、あなたはテストに使用するために欠陥のあるSDカードで終わる必要があります

15  GuzZzt  2017-09-12


昔々、何年も前のことですが、取り乱した母親のためにSDカードから卒業式の写真とビデオのセットを取り出すことを依頼されました。よく見てみると、カードは物理的に破損しており、外側のケースには目に見える亀裂があり、特に初期の重要なセクタにはいくつかの不良セクタがあり、当時の最も信頼性の高いリカバリープログラムでさえカードを読み取ることができませんでした。また、当時のフォレンジックデータツールは高価だった

結局、同じブランド/サイズのSDカードを手に入れて、独自の生データダンプと復元ユーティリティを書いて、悪いカードから良いカードにデータをコピーすることにしました。ユーティリティが不良セクタにヒットするたびに、何度もリトライして、そのセクタのデータをすべてゼロにしてから、あきらめて停止するのではなく、失敗を無視して次のセクタに移動しました。一部のセクタの読み取り成功率が40%程度であることに気付いたため、リトライを試みました。データが新しいSDカードに入ってからは、以前に失敗したリカバリーツールは、データの損失/破損を最小限に抑えて完璧に動作しました。全体的に、すべてのファイルの約98%は回復された。何も実際に削除されていないので、以前に削除されていた項目の数も回復されました – ちょうどそのようにマークされ、ゆっくりと上書きされます。少し退屈なデータ回復の練習として始まったものは、私のより記憶に残る興味深い個人的なソフトウェア開発プロジェクトの1つになりました。あなたが不思議に思っていた場合には、母親は興奮していました

いずれにしても、この話は、物理的にSDカードに損傷を与えることが可能であることを示しています。そのようなデータはまだアクセス可能であるが、かろうじて機能しているだけのセクタがあり、何かから読み取ろうとすると、それを行うことが困難になります。SDカードのプラスチックはかなり薄っぺらい傾向があるので、曲げたり、いくつかの安価なものに切断すると、トリックを行う可能性があります。あなたのマイルは異なる場合があります

またあなたの区域のあるデータ回復場所のまわりで尋ねることができる。彼らはさまざまな失敗するか、または失敗した装置からのデータ回復を専門にするので、彼らは有用な入力/ヒントがあるべきであり、あなたがそれらから得ることができるいくつかの事前にバストされたSDカードを手元に持っているかもしれない(訓練目的のための例えば)

11  CubicleSoft  2017-09-13


この回答は、@Ruslanさんのコメントを拡大したものです

  1. SDカードを約99.9%まで充填します
  2. 残りの0.1%の内容を継続的に書き換える(Write A -delete-Write B-delete -Write A …)
  3. すでにカードが壊れているかどうかをテスト(定期的に)します

Possible alternative:

目的に合っているかどうかはわかりませんが、実際にはカードに物理的なダメージを与えるだけで十分なのかもしれませんし、もっと早くなるかもしれません

5  Dennis Jaheruddin  2017-09-11


不安定な電源や高電圧のシグナリングを導入してみてはいかがでしょうか

SDカードの破損とバッテリーの断続的な接触との間に強い相関関係があることを知っています

3  PCARR  2017-09-11


いくつかの古い、低容量のSDカード(16MB程度)は、TSOP/TSSOPスタイルのパッケージでフラッシュチップを使用しています。SMT リワークが可能なワークショップ (組み込み作業をしている場合は、そのスキルを社内に持っているかもしれません。そうでない場合は、ボードレベルの電話/ラップトップの修理をしている小さな会社をチェックしてください) は、デバイスプログラマで読み書きできるように、チップを分離して再アタッチすることが考えられます (ECC コードを含む)

それでも、テストがメインになることを意識してください

  • 内部エラー補正により発生する可能性のあるタイミング収差/ヒックアップをデバイスがどのように処理するか

と、最悪の場合には

  • お使いのデバイスが、終了したSDカードをどのように処理するか

SDカードから何らかの理由で不規則な動作でどのように動作するかをチェックしたいだけなら、インターフェースラインに電気的なノイズを導入するのがベストでしょう(例えば、間にFETバススイッチを入れて、ランダムなタイミングで瞬間的に無意味な信号のソースに切り替えることで(しかし、適切な電気レベルの)

3  rackandboneman  2017-09-12


OlafMの答えに関連していますが、別のものです: SDカードプロトコルを話すように自分のマイクロコントローラをプログラムして、それが持つようにしたい動作をエミュレートすることができます

2  R.. GitHub STOP HELPING ICE  2017-09-13


FAT32 マスターブートレコード領域はおそらく最も悪用されやすい領域で、論理的なレベルでは常に同じ場所にある必要があるからです。(おそらくこれは不良セクタのソフトリマッピングで処理されているのでしょうが、これがすべてのハードウェアに実装されているかどうかは疑問です)。ですから、sfdiskをループで実行して、その方法で破壊できるかどうかを見ることができます

しかし、悪いハードウェアをソフトウェアで処理しようとするのではなく、ハードウェアの信頼性を向上させるためにできることは何でもやってくださいと懇願するつもりです。問題は、SDカードがあらゆる種類の奇妙な方法で故障することです。読み取れなくなったり、書き込めなくなったり、悪いデータが出てきたり、操作中にタイムアウトしたり。カードが故障するすべての方法を予測しようとするのは非常に困難です

私の大好きな失敗の一つ、”ビッグデータモード “がここにあります

bad sd fake big data

SDカードは、途方もないコスト圧力にさらされている一般消費者向けの商品です。部品は急速に変化し、データシートは入手困難です。偽造品も珍しくありません。安価なストレージでは、それらを打ち負かすのは難しいですが、SSDは信頼性を優先していますが、SDカードの優先順位はスピード、容量、コストです(おそらくこの順番ではありません)

あなたの最初の防衛線は、リムーバブルSDカードの代わりに、信頼できるメーカーからの実際のデータシートを持つハンダ付け可能なeMMC部品を使用することです。はい、彼らはGBあたりより多くのコストがかかりますが、部品はより長い期間生産され、少なくともあなたが何を得ているかを知っています。また、部品を半田付けすることで、リムーバブルカードの潜在的な問題(書き込み中にカードが引っ張られる、電気的接触不良など)の全体のホストを回避することができます

あなたの製品がリムーバブルストレージを必要としている場合や、何かを変更するのが遅すぎる場合は、「産業用」グレードのカードに余分なお金をかけるか、使い捨てのオブジェクトとして扱うことを検討してください。(linuxでは)私たちがすることは、起動時にfsckカードを再フォーマットし、エラーが報告された場合には再フォーマットすることです。そして、再度 fsck を実行します。再フォーマットしてもエラーが出る場合は、RMAを行い、ハードウェアをeMMCを使用する新しいバージョンに交換します

Good luck!

1  Robert Calhoun  2017-09-13


おそらくこれはあなたが望んでいた方向ではないかもしれませんが、私のラジオやラップトップがSDカードから読み取っている間にSDカードを取り外すと、約1/5か1/10回SDカードがクラッシュすることを保証することがわかりました。それは、カードは、読み取り中に削除された電源を持ってうまくやっていないようだし、おそらく書き込みを行います。以下のRobert Calhounのコメントを読んだ後、それはそれがFATにダメージを与えているかもしれないと信じて私をリードしています。読み込みだけでクラッシュする理由が分からないのですが、書き込みはしてはいけないのでしょうか?

1  jwzumwalt  2017-09-12


もしSDカードがFAT32フォーマットの場合、2つのFATを16進数で編集し、正しい16進数で不良セクタをマークすることができます。これは、この特定の場所で不良セクタを見つけることを想定したソフトウェアをロジックテストしたい場合のトリックであり、SDカードに害を与えることはありません

1  Emile De Favas  2017-09-18


Linux のバッドブロックスクリプトを作成して、その破壊テストを単一セクタで数時間繰り返し実行することはできないだろうか

単一セクタでは、SDカード内部のウェアレベリングコードが論理ブロックをあちこちにリマップしてしまうからです

しかし、badblocks -wをループで実行すると、いくつかの悪いブロックが現れるまで簡単に実行することができます。このようにすればうまくいくはずです

while badblocks -w /dev/xx; do :; done

badblocks は不良ブロックが検出されなければ 0 を返し、そうでなければ ≠ 0 を返すと仮定しています (マニュアルページには書いてありませんし、ソースコードも確認していません)

0  Tobia  2017-09-18


通常、SD/uSDカードではウェアレベリングが実装されているので、これはかなり難しいかもしれません。タイプ(単層セル、多層、TLC、3D-NANDなど)にもよりますが、セクタプールを使い切るのに必要な書き込みサイクルは数TBになるかもしれません

私は実際に4GB、64GBと256GB Pro Duo、SSDとサムドライブでこれをテストしましたが、64GBのK–s— 4 Micron 16GBチップを使用した場合は、FAT領域で単一のソフトエラーで失敗する前に、約3.84TBを記録しました。256GB を使用している場合は、もう少し持ちませんでしたが、直接チップにアクセスしない場合は、おそらく 5TB の書き込みがあったと推定されますが、最終的に MBR の破損が発生しましたが、コントローラが原因かどうかは不明です。4GB Duoは、データをコピーする際にリーダーで失敗しましたが、これは6年間使用したもので、カメラにも “Recovering “メッセージが表示されていました。ちなみに、書き込み中に電源電圧を変化させると、より早く故障するようになります。私の128GBのmicroSDは、同様の症状で使用して約2年後に失敗しました, また、過剰な電源ドレインと熱を持っていたが、まだデータは正常に読み書きされています

X線実験に関する無関係なメモを削除しました

0  Conundrum  2019-07-15


タイトルとURLをコピーしました