web-dev-qa-db-ja.com

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

私はいくつかの組み込みハードウェアのいくつかの読み取り/書き込みコードの回復力をテストする必要があります。対照研究のために、どうすればいくつかのSDカードを犠牲にし、いくつかの既知の分野を破ることができますか?

私が考えることができる唯一のことは単一セクターを数百万回上書きすることです。 Linuxバッドブロックスクリプトを作成して、破壊テストを1つのセクターで数時間繰り返し実行できるのではないかと思います。

140
Gabe Krause

という代替アプローチが役立つことがあります。

あなたのコードがLinuxの下で動くならば、多分あなたは「不良な」論理装置でそれをテストすることができます。 dmsetupは、入出力エラーを返すデバイスを作成する可能性があります。 errorflakey、あるいはその両方のターゲットを使ってデバイスを構築するだけです。 From man 8 dmsetup

error
この領域に行くすべての入出力をエラーにします。テストや穴のあいたデバイスの作成に役立ちます。

flakey
linearターゲットへの同様のマッピングを作成しますが、信頼性の低い動作を定期的に示します。テスト時に障害のあるデバイスをシミュレートするのに役立ちます。

注:flakeyターゲットの使用法は、ここで文書化されています。基本例 はこちら

私が知る限りでは、I/Oエラーがすぐに報告されるので、これは実際のSDカードの振る舞いとは異なります。遅延、失速などが予想されます。予備試験など.

166

この男は、不良ブロックをマークするために使用される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です。最近の実装では、マイクロコントローラは100 MHzのパフォーマンスレベルに近づき、さらにいくつかのハードウェアアクセラレータをオンダイに搭載しています。驚くべきことに、これらのコントローラをデバイスに追加するコストは、特にフラッシュメモリとコントローラを同じ事業単位内で製造できる企業にとっては、おそらく0.15ドルから0.30ドル程度でしょう。各フラッシュメモリチップを徹底的にテストして特性評価するよりも、これらのマイクロコントローラを追加する方がおそらく安価なので、マイクロコントローラが含まれているにもかかわらず、管理フラッシュデバイスが生のフラッシュチップより1ビットあたり安価になる理由が説明されます。

肝心な点は、ファームウェアのロードとアップデートのメカニズムは、特にサードパーティ製のコントローラーにとっては、実質的に必須であるということです。エンドユーザーがこのプロセスに晒されることはめったにありません。すべてのプロセスが工場で行われるためですが、これによってメカニズムが現実的になることはありません。私が中国の電子機器市場を調査したところ、店主がカードの容量を「拡張」するファームウェアをカードに焼き付けているのを見たことがあります。実際の使用可能ストレージこれが販売時点で可能であるという事実は、ほとんどの場合、更新メカニズムが保護されていないことを意味します。

30C3での講演では、特定のマイクロコントローラブランド、つまりAppotechとそのAX211およびAX215製品を調査した結果について報告します。製造元が予約したコマンド(つまり、CMD63の後に「A」、「P」、「P」、「O」)を介して送信される単純な「ノック」シーケンスを発見し、コントローラをファームウェアロードモードにします。この時点で、カードは次の512バイトを受け取り、それをコードとして実行します。

76
FarO

最近のほとんどのSDカード(またはeMMC)は静的および動的ウェアレベリングを使用しているため、これは通常は機能しません。つまり、インテリジェントコントローラが書き込み命令を解釈し、最も使用頻度の低いフラッシュセクタにマッピングします。

あなたができる唯一のことはあなたの供給者に連絡してそれらのデータシートを尋ねることを試みることです。ウェアレベリングアルゴリズムの状態を取得するための(ベンダー固有の)方法がいくつかあるかもしれません。これは潜在的にあなたが潜在的なフラッシュの状態/使用法を問い合わせることを可能にするでしょう。あるいは、運が悪くてこれが存在しないかもしれません。

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

38
amo-ej1

動作温度を上げることでトランジスタの磨耗を増やすことができます。加熱チップ(70-120°C)で書き込み - 消去サイクルを使用してください。それは早く着ます。

32
Pavlus

まえがき:このオプションでは、追加のプログラミングとハードウェアの変更が必要ですが、ホストに対してトランスペアレントな制御読み取りが可能になります。

SDカードには複数のI/Oオプションがありますが、SPIを介して制御できます。もしあなたがSDカードを持ってきてピンをマイクロコントローラ(例えばArduino)に取り付けることができるようにそれを修正するならば、あなたはArduinoにSDカードをまねさせそしてSDカードを読んでいる装置に対して透明であることができる。マイクロコントローラ上のコードは、必要に応じて意図的に不良データを返す可能性があります。さらに、SDカードをマイクロコントローラに装着すれば、ギガバイトのテストを可能にするために読み取りがマイクロコントローラを通過してSDカードに到達できるようになります。

18
Eric Johnson

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

15
GuzZzt

昔々、私はSDカードから卒業式の写真やビデオのセットを取り戻し、かなり虐待された母親のために報酬を得ました。綿密に検査すると、カードはどういうわけか外装ケースに目に見えるひび割れで物理的に損傷を受けており、いくつかの不良セクタ、とりわけいくつかの初期のクリティカルセクタがあった。また、当時の法医学データツールには大金が必要でした。

私は、同じブランド/サイズのSDカードを入手し、自分のカスタム生データダンプと復元ユーティリティを作成して、データを不良カードから正常なものにコピーしました。ユーティリティが不良セクタをヒットするたびに、そのセクタのすべてのゼロを書き込む前に何度も再試行し、あきらめて停止するのではなく、失敗を無視して次のセクタに進みます。私はまたいくつかのセクターがまだ約40%の読み取り成功率を持っていることに気づいていたので、再試行を試みました。データが新しいSDカードに保存されると、以前失敗したリカバリツールは最小限のデータ損失/破損で問題なく動作しました。全体として、全ファイルの約98%が復元されました。実際には何も削除されていないため、以前に削除されたアイテムの数も回復されました。少し退屈なデータ回復の練習として始まったことは私のより記憶に残るそして興味深い個人的なソフトウェア開発プロジェクトの1つになりました。あなたが疑問に思っていたのなら、母親は興奮していました。

いずれにせよ、この物語は、データはまだアクセス可能であるが機能しているセクターがほとんどなく、そこから読み取ることを試みるものには困難があるため、SDカードを物理的に損傷する可能性があることを示しています。 SDカードのプラスチックはかなり薄っぺらである傾向があるので、安価なものに折り曲げたりカットしたりするとうまくいく可能性があります。あなたのマイレージは異なる場合があります。

あなたはまたあなたの地域のいくつかのデータ回復場所であちこちに尋ねることができます。彼らは様々な障害や故障したデバイスからのデータ復旧を専門としているので、それらはあなたがそれらから得ることができるいくつかの役に立つ入力/チップを持ちそして手持ちのSDカードさえ持っているかもしれません。

11
CubicleSoft

この答えは@Ruslanのコメントを拡張したものです

  1. あなたのSDカードを約99.9%までいっぱいにしてください
  2. 残りの0.1%の内容を継続的に再書き込みします(書き込みA - 削除 - 書き込みB - 削除 - 書き込みA ...)
  3. あなたがすでにカードを壊したかどうかを(定期的に)テストする

考えられる代替案

これがあなたの目的に合っているかどうかはわかりませんが、実際にはあなたのカードを物理的に損傷するのに十分であるかもしれません。

5

TSOP/TSSOPスタイルのパッケージでは、古い、小容量のSDカード(16MB相当)がフラッシュチップを使用しています。 SMTのリワークが可能なワークショップ(あなたが埋め込み作業をしている場合は、そのスキルを社内で持っているかもしれません。そうでなければ、ボードレベルの電話/ラップトップ修理を行っている中小企業をチェックしてください)。デバイスプログラマーによるraw(ECCコードを含む).

それでも、あなたは主にテストすることになることに注意してください:

  • 内部エラー訂正によって発生する可能性のあるタイミング異常/しゃっくりをデバイスがどのように処理するか

そして最悪の場合

  • 端末の故障したSDカードの処理方法.

SDカードから何らかの理由でそれが不規則な振る舞いでどのように振る舞うかをチェックしたいだけなら、インターフェースラインに電気的ノイズを入れることが最善でしょう(例えば、間にFETバススイッチを置くこと、ランダムな瞬間に瞬間的に切り替える)。それは無意味な信号の発生源へのものです(ただし正しい電気レベルのものです)。

3
rackandboneman

あなたは不安定な電源またはより高い電圧シグナリングを導入することを試みることができました。

私が知っているデバイスファミリの一般的な欠点は、SDカードの破損とバッテリの断続的な接触との間に強い相関関係があることです。

3
PCARR

OlafMの答えに関連していますが違います:あなたはSDカードプロトコルを話すようにあなた自身のマイクロコントローラをプログラムして、それからあなたがそれに持ってほしいどんな行動でもエミュレートすることができます。

2
R..

おそらくこれはあなたが望んでいた方向ではありませんが、私のラジオまたはラップトップがそれから読んでいる間に私は私のSDカードを取り外すことが約1/5または1/10倍クラッシュしたSDカードを保証します。カードの読み取り中やおそらく書き込み中に電源が切られてもうまく動作しないようです。以下のRobert Calhounのコメントを読んだ後、それは私がFATに害を及ぼす可能性があると信じるように私を導きます。読み取りだけでクラッシュが発生する理由はわかりませんが、書き込みが行われないようにする必要がありますか。

1
jwzumwalt

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

しかし、ソフトウェアで悪いハードウェアを処理するのではなく、ハードウェアの信頼性を向上させるためにできる限りのことをするようにお願いします。 SDカードがあらゆる種類の奇妙な方法で失敗するという問題です。それらは読めなくなったり、書き込めなくなったり、悪いデータを与えたり、運用中にタイムアウトしたりします。カードが失敗する可能性のあるすべての方法を予測しようとするのは非常に困難です。

これが私のお気に入りの失敗の1つ、「ビッグデータモード」です。

bad sd fake big data

SDカードは多大なコストプレッシャーの下にある一般消費財です。部品は急速に変わり、データシートは入手困難です。偽造品は前代未聞ではありません。安価なストレージのためにそれらは打ち負かすのは難しいですが、SSDが信頼性を優先するのに対して、SDカードのための優先はスピード、容量とコストです(おそらくその順序ではありません)。

あなたの最初の防衛線は、取り外し可能なSDカードの代わりに信頼できる製造元からの本当のデータシートではんだ付け可能なeMMC部分を使うことです。はい、それらは1GBあたりより多くの費用がかかります、しかし部分はより長い期間の間量産になります、そして少なくともあなたは何を得ているか知っています。部品をはんだ付けすることで、取り外し可能なカードを使用することで、多数の潜在的な問題(書き込み中にカードがぶつかったり、電気的接触が悪くなったりするなど)も回避できます。

あなたの製品がリムーバブルストレージを必要としている、あるいは何かを変更するのが遅すぎるならば、「工業用」グレードのカードのために余分なお金を使うことを考えるか、使い捨てのものとして扱う。この使用例では再フォーマットが許容されるので、(linuxの下で)私たちが行うことはブート時にカードをfsckし、エラーが報告された場合はそれを再フォーマットすることです。それから我々は再びそれをfsckします。それでも再フォーマットしてもエラーが報告される場合は、それをRMAし、ハードウェアをeMMCを使用する新しいバージョンと交換します。

がんばろう!

1
Robert Calhoun

あなたのSDカードがFAT32フォーマットであるならば、あなたは2つの脂肪を16進数編集して、正しい16進数コードで不良としてセクターをマークすることができます。この特定の場所で不良セクタを見つけることになっているソフトウェアを論理的にテストしたい場合、これはトリックです。それはあなたのSDカードにも害を与えることはありません、再フォーマットはそれを通常の状態に戻します。

1
Emile De Favas

Linuxバッドブロックスクリプトを作成して、破壊テストを1つのセクターで数時間繰り返し実行できるのではないかと思います。

SDカード内のウェアレベリングコードがあちこちで論理ブロックを再マッピングするため、単一のセクターでは不要です。

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

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

不良ブロックが検出されなかった場合はbadblocksが0を返し、それ以外の場合は≠0を返すと仮定します(マニュアルページには記載されていないので、ソースコードを確認していません)。

0
Tobia