カーネルトレースでエラーが発生したSDカードの状態を定義しますか?

カーネルトレースでエラーが発生したSDカードの状態を定義しますか?

一連の障害/時々欠陥のあるSDカードがあります。dmesg次のいずれかの出力を提供します。

完全に死んだ(に記載されていない/dev/mmcblk0):

[  +0,000010] mmc0: error -110 whilst initializing SD card 
[  +2,819983] mmc0: card never left busy state

失敗したもの(時々インストールされることがあります):

[Jun16 06:28] mmc0: new high speed SDHC card at address 0001
[  +0,000339] mmcblk0: mmc0:0001 00000 3.68 GiB 
[  +0,002835]  mmcblk0: p1 p2 p3 p4
[ +10,256689] mmcblk0: timed out sending r/w cmd command, card status 0x900
[ +11,264358] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000016] print_req_error: I/O error, dev mmcblk0, sector 7716736
[ +10,239972] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000018] print_req_error: I/O error, dev mmcblk0, sector 7716736
[  +0,000008] Buffer I/O error on dev mmcblk0, logical block 964592, async page read
[ +10,239931] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000009] print_req_error: I/O error, dev mmcblk0, sector 81792
[Jun16 06:29] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000020] print_req_error: I/O error, dev mmcblk0, sector 1066880
[ +10,240219] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000011] print_req_error: I/O error, dev mmcblk0, sector 2101120

私が持っている最高の点error -110はそれです。停止するどの程度までは、SDCardで実際に何が起こるのかについては知られていません。

このような背景

作業中の一部(任意に見える)内蔵デバイスでは、SDカードがこの状態で表示され、これがSDカードが破損しているのかコントローラドライバに問題があるのか​​を理解しようとしています。それはカードの腐敗を促進しています。

カードの5%程度が完全に消滅しましたが、他のカードにもこのようなことが発生していることを確認しています。

SDカードに問題の再現を強制しようとしましたが、テストしたSDカード(同じブランド、同じタイプ、同じソフトウェア)では、テストの一部として数百ギガバイトのデータを継続的に使っていても摩耗跡が現れませんでした。私は使うプレッシャープレートそのような理由で。

デバイスの電源がどのくらいの頻度で切断されるかはわかりませんが、電源はデバイスの他のすべての要件を十分に満たす一般的な2A AC-DCアダプタです。

修正する

質問はhelps me prevent failed SD cards in the futureの反対に終わるか答えるよう提案するようですusing Linux to diagnose what is the current state of the SDcards

つまり、次のようになります。

LinuxでSDカードのエラーを分析する最も徹底的な方法は何ですか?

  • より多くの情報を得るためにMMCサブシステムのデバッグロギングを有効にできますか?
  • 何ですかcard status 0x900
  • カードにエラーが発生し始めたことを示すために、ユーザースペースでSDバスまたはSDバス通信をスニッピングすることは可能ですか?

ベストアンサー1

これは、他のものよりもハードウェア/ユースケースの問題のようです。おそらく、Linux技術よりも常識が重要です。カード、MySQL / Apache /コンパイルなどのI / O ... syslog /頻繁にシステムアップデートをたくさんしますか? ——Rui F Ribeiroのコメント

上記の内容を拡張できます。しかし、私は最初のポイントに同意し、これが最初の質問であることに同意します。


  • MMCサブシステムの一部のデバッグロギングを有効にする必要がありますか?
  • 何が起こっているのかを知るためのユーザースペースツールはありますか?
  • エラーコードをより意味のあるものにするにはどうすればよいですか?

失敗の帰因に対する私の唯一の確信は、下位レベルのコマンドの特定のエラーよりも、私が得た「歴史」と一般的な結果からもたらされます。それにもかかわらず、実装方法が異なる場合があります。

SSDを使っても合理的なブランドのSSDはすでに持っていると思います。無効なデータを返します。I/O エラーを置き換えます。これは確かに多くのSSDの既知のエラーモードの1つです。 [2013年][2017年]。 (これは、より管理しやすいエラーモードのセットを期待する最新のファイルシステムとデータベースの実装に精通している人にとっては驚くべきことです。) /不良セクタ区切り以外は、報告されたエラーを区別しなくなりました。

私のSSDエラーは、一度「修理」された後に再びエラーを表示し始めた「売り手リファーブ」ノートブックで発生しました。リンクされたファイルと同様に、ドライブに電力損失が発生する可能性があります。また、安定した電圧レベルを提供できない場合があります。

これがSDカードが破損しているのか、それともコントローラドライバに問題があり、カードが破損しているのかを理解しようとしています。

良いハードウェアと良い電源は良いSDカードを損傷しません。〜しない限りあなたはそれにあまりにも多くの重量を載せています。作業量は非常に重要な変数です、あなたは[最初に]言及していません。これらのメモリカードは、メディアファイルを保存するのに比較的面倒でない使用のために設計された比較的小さく安価なハードウェアです(MMC、「MultiMediaCard」)。特に安価な製品が「ウェアレベリング」(ホット論理ブロックの負荷を複数の物理ブロックに再配布すること)には必ずしも良いわけではありません。

毎日cronジョブを実行するようにスケジュールするために、クイックハッキングで作業量を測定しましたtunefs -l /dev/mmcblk0p4 | grep writes >> /var/log/writes.log

しかし、ワークロードを控えて、これまでに提供してきた情報をもとに、コントローラ側の問題がある可能性があると考えるのが正しいです。ポケットデバイスからの書き込み(おそらくバッテリー不足)の場合、SDカードに不良セクタが繰り返し発生します。同名ブランドのカードです。セクターは回復可能で、まだ同じカードを使用しています。また、このカードで一種の短い初期化失敗を経験しました。考える不良セクタとも関連がありましたが(初期化失敗を克服した後)、私が誤って覚えている可能性があります。

一連の障害/時々欠陥のあるSDカードがあります。

あなたの[オリジナル]質問で私が受けた印象は、これが小規模な作業であり、さまざまなカード、コントローラ、およびワークロードを使用して厳密なテストマトリックスを実行するのが過剰であるということです。

ワークロードの後に​​制御する最初の変数はカードです。

2018年に書いてみると、SDカードの「標準」と言える世界的に有名なブランドがあります。

結果を見る:https://www.amazon.com/s/field-keywords=sd+card

- そして考慮すべきいくつかの小売チャネルがあることを望みます。少なくとも比較できるほど信頼できるはずです。 (さまざまな人気オンライン小売業者が「マーケットプレイス」として機能し、独自の商品を販売していることに注意してください。)

公式のRaspbery PIハードウェアも使用できます。つまり、SDカードは公式に小型マザーボードコンピュータでLinuxを実行するために販売されており、うまく動作することがわかりました。 (メディアファイルよりも厳しいワークロード)

要約すると、必要なカードよりも速いカードを手に入れれば、耐久性の評価も高くなると主張したいと思います。 (耐久性よりも速度定格を得る方が簡単な傾向があることを考慮してください。)

これら2つの変数を制御/測定すると、残りの関連ハードウェアに判断を集中できます。


失敗(時々インストールされることがあります)

最も一般的なケースでは、デバイスに誤って記録されていると思われる場合は、このエラーを解決してみてください。

  1. 必要に応じてどのデータを回復できますか?
  2. その後、不良ブロックを読み取ろうとしないでください。完全な形式(パーティションテーブル+ファイルシステム)を再生成するだけです。
  3. しかし、わからないとデバイスがまだ機能していない可能性があると思われる場合は、テストしてみることもできます。

あなたのように良いデフォルトのMMCハードウェアがあれば、Linuxコマンドをblkdiscardより多くのコマンドとして使用できます効率的なデバイスを「再フォーマット」する前に、デバイスのすべてのブロックを消去するテスト方法です。ただし、ドライブ全体をゼロで覆うときのエラーのテストと比較して、効率は唯一の利点ですdd bs=1M if=/dev/zero of=/dev/mmcblk0。 (そしてどんなニーズも避けること書く理論的に消去されたブロックは、blkdiscard後で「新しいもの」のパフォーマンスをより多く提供し、デバイスにより多くの自由を与え、耐久性を向上させることができます。

(SATAドライブの場合は、論理ドライブの内容全体を削除する専用の「Secure Erase」コマンドがあります(参考資料を参照man hdparm)。ただし、それに対応するMMCコマンドがあるかどうかはわかりません。同等のシーケンスを使用して「新しい製品に」パフォーマンスを復元できない問題を解決するために、製品ブロックマップをリセットしますblkdiscardいいえフルドライブの消去をテストする必要があります。場合によっては、内部暗号化キーのみが削除されます。

あなたが私に私のエラーが何であるかを尋ねるので

最近、SanDisk micro-SDカードに問題が発生しました。以下の特定のエラーは、不安定な接続によって引き起こされたようです。フェティッシュを介してすべての金属パッドを吹き込んだ後、micro-SDを取り外し、micro-SDをSDアダプタに再挿入すると問題が解決します。

Dell Latitude E5450ノートブック(カーネルドライバ、Fedora Linuxカーネルバージョン約v4.17)のカードリーダーでsdhci-pciカードを初期化できません。私のSheevaPlugで(この問題)、カードを初期化できるようですが、IOエラーが表示されます。 Dell でエラー処理タイムアウトが正しく設定されていない可能性があります。

小さな谷:

[    2.436566] mmc0: Unknown controller version (3). You may experience problems.
[    2.449019] mmc0: SDHCI controller on PCI [0000:01:00.0] using ADMA
...
[509227.374012] mmc0: error -84 whilst initialising SD card
[509227.621510] mmc0: error -84 whilst initialising SD card
[509227.865472] mmc0: error -84 whilst initialising SD card
[509228.142120] mmc0: error -84 whilst initialising SD card

シェバプラグ:

[6076613.118617] mmcblk0: mmc0:aaaa SC16G 14.8 GiB 
[6076613.295811] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
[6076613.545740] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
[6076613.555301] mmcblk0: retrying using single block read
[6076613.728413] mmcblk0: error -110 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
[6076613.737965] blk_update_request: I/O error, dev mmcblk0, sector 0
[6076613.912043] mmcblk0: error -110 transferring data, sector 1, nr 7, cmd response 0x900, card status 0x0
[6076613.921599] blk_update_request: I/O error, dev mmcblk0, sector 1
...

おすすめ記事