Raspberry PiにおけるSDカード/microSDカードの健全性のすべて

SDカードは、電源と並んでRaspberry Piの重要な追加コンポーネントです。SDカードの状態を監視することは、Raspberry PiのOSをスムーズに動作させ、ユーザーエクスペリエンスを向上させるために非常に重要です。この記事では、microSDカードの状態を確認・監視する方法をいくつかご紹介します。

まず、メモリーカードの仕組みを詳しく説明し、SDカードの健康状態を確認することの可能性と限界を理解していただきます。 次に、Raspberry Piユーザーが経験する一般的な問題を減らすことで、microSDカードを保護する方法を説明します。また、おすすめのRaspberry Pi用microSDカードブランドについても紹介します。 必要であれば、さらにスキップして、現在のmicroSDカードの状態を確認するためのLinuxコマンドだけを入手することもできます。

基礎編microSDカードの内部

microSDカードのインナー
画像を見るSDカードの内部のイラスト。microSDカードも同様の構造をしている。画像の出典はこちら。 CC-BY-SA Korpsvartウィキメディア・コモンズ

microSDカードには、フラッシュメモリーチップ(写真左)と、マイクロコントローラー(写真右、通常はARMベース)が搭載されています。

フラッシュ

フラッシュメモリは、情報を 電子を「トラップ」するの中に不導体を通して高電圧で「注入」されます。 フローティングゲート(**).このように、電子は、フローティングゲートの電荷に応じて、接続された電流を流すことも、流さないこともできるトランジスタの一部である。理論的には、流れてしまうことはない。 フローティングゲートが電気的に絶縁されているため.これは、電流供給が停止しても情報が保持されることを意味しています。

情報は常にソース(S)とドレイン(D)の間で読み取られる。フローティングゲートに導入された電子は、例えば、トランジスタのしきい値電圧を上昇させ、そこから電流が流れ始めます。その後、トランジスタは通常の読み取り電圧でブロックします(導通しません)。

フローティングゲートのプログラミングには、通常の読み出し動作時(例えば3.3V)よりもかなり高い電圧(例えば10V)が使用されます。このために、コントロールゲート(V1/V2/V3)が追加で使用されます。

消去する場合は、コントロールゲートから高い負の電圧をかけて、電子をフローティングゲートから再び追い出します。

microSDカードに使用されているNANDフラッシュは、個々のメモリトランジスタをページに分け、そのページのいくつかをブロックに分けています。1ページは512〜8192バイトで、1ブロックには最大256ページ(8kBのページサイズで合計2048kB)を格納できる。

書き込み(論理的に "1 "の場合)は、ビット単位、または少なくともバイト/ワード単位で行うことができます。消去(論理的に "0 "の場合)は、ブロックごとにしかできません。変更されていない情報は、再度プログラムする必要があります。

フラッシュメモリは、プログラミングと消去により寿命が限られており、消去サイクルで与えられる

寿命が短い理由は、高電圧による電荷のリークからフローティングゲートを保護する絶縁酸化膜の損傷である。この層が導電性になると、メモリセルに情報を保持できなくなってしまうのだ。

脇役。マルチレベルセル・メモリーセル

当初は、2つの電荷状態(1ビットの情報)を使用している。現在では、1つのトランジスタに複数のフローティングゲートがあるため、多値セルのメモリセルには異なる電荷状態が記憶され、1つのメモリトランジスタに数ビットが記憶されます。トランジスタは、印加された電流を異なる方法で流し、それを読み出し時に評価する。

これにより、メモリセルの密度を大幅に高めることができるが、一方で、読み出しが遅くなり、ビットエラーや電荷損失に対するメモリセルの反応が敏感になってしまう。単値セルでは10万〜100万回、TLC(1セル3ビットの3値セル)では約1000回の書き込み消去が可能である。

産業用SDカードのメモリ密度が低いのはこのためで、データの保全性を高めるためにSLC(シングル・レベル・セル)を採用している。.

コントローラー

コントローラーの仕事は、フラッシュを管理することであり、特に以下のことを行います。 ウェアレベリングとリードエラー補正.microSDカードの性能と寿命は、コントローラーに使用されているアルゴリズムに決定的に依存しています。

フラッシュメモリは、前述のフローティングゲートの絶縁酸化膜の損傷により、必要な頻度での書き換えができません。特に使用頻度の高い個々の領域の損傷を避けるために。 コントローラは、ファイルシステムが論理的にアドレス可能なブロックへの物理的割り当てを変化させます(=ウェアレベリング)。

このような物理的な割り当ての変化は、SDカードの書き込みテスト(不良ブロックツールを使った書き込みや読み込みなど)を行っても、実際には本当の不良ブロックを特定できず、OSやファイルシステムのレベルで回避することができない理由でもあります。microSDカード内のフラッシュメモリコントローラのみが、どのブロックに書き込まれ、どのブロックから読み出されているかを常に把握しており、前述のようにこれは時間の経過とともに変化します。

新品のフラッシュメモリには、すでに不良ブロック(バッドブロック)が存在しています。この不良ブロックは、フラッシュメモリの特別な領域にマーキングされています。

また、個々のブロックのエラー訂正情報も管理され、読み取りエラーをチェックサムで訂正できるようになっています。コントローラは、クラスタ化されたリードエラーのあるブロックを不良ブロックのリストに追加し、論理ブロックの実際の物理的割り当てをシフトします。

microSDカードには、メーカーにもよりますが、通常、約10%の予備容量があり、不良ブロックを良品の「リザーブブロック」と交換することができます。

ダーティ・リトル・シークレットフラッシュメモリの問題

削除はブロックワイズのみ

データはブロック単位でしか消去できない。消去すると、メモリセルにストレスがかかり、寿命が短くなり、新たな不良ブロックが発生します。

工場出荷時の不良ブロック

フラッシュメモリには、すでに不良ブロックが出荷されています。運用の過程で、さらに欠陥のあるブロック(不良ブロック)が追加されます。そのため、コントローラはウェアレベリングにより、できるだけ均等にブロックを書き込んだり消去したりするようにしています。

MLCとTLCは特に感度が高い

MLC(Multi Level Cell Memory Cell)は、消去回数を減らすことで長期信頼性を向上させることができます。

Read Disturb

私がまだ言及していないが、特に好ましくない現象は Read Disturb.カードを読み出すだけでも、同じブロック内の隣接するメモリセルのプログラムが変更されてしまうことがあります。その確率は、数10万回の読み出しの後に急激に高まります。

Read Disturbを避けるために、コントローラはブロックへのアクセス数を記録し、閾値を超えたときにブロックを新しい場所に一括コピーし、元のブロックを削除します。その後、そのブロックは再び使用することができます。

これらはすべて、外見は「完璧なメモリーカード」であるかのように装うために、コントローラーが補正しなければならないもので、中身は完璧ではないのです。

最後に、X線で書き込まれたビットは、意図せずに消去されてしまう可能性があります。このような場合には、X線に対して安全な設計のカードでなければ、データを確実に消去することはできません。

良いカードの製造と選択

写真のパナソニック製SDカードは、フラッシュがサムスン製で、コントローラーは日本製ですが、マイクロコントローラーとフラッシュデバイス、そして完成したmicroSDカードは、それぞれ異なるメーカーのものです。

NAND型フラッシュデバイスは、4つのメーカーによって製造されています。

  • サムスン <- マーケットリーダー
  • 東芝
  • IMフラッシュテクノロジーズ(マイクロンテクノロジーとインテルのジョイントベンチャー)
  • Hynix社とNumonyx社との提携

東芝とサムスンは、全チップの大半を生産しています。

サンディスク

TL;DR推奨

サンディスクと東芝はフラッシュ製造の合弁会社を持っている。しかし、2009年にサンディスクはファブの権利を東芝に譲渡して ファブレスのフラッシュメモリーメーカー.メモリの開発は今でも一緒に行われています。1999年に登場したSD規格は、サンディスクと東芝、そして松下電器産業が発起人となっている。microSD規格もサンディスクが作ったものだ。

私たちは長い間、サンディスクブランドを頼りにしており、これまで非常に良い経験をしてきました。

サムスン

TL;DR推奨

サムスンのメモリーカードもよく勧められます。NANDフラッシュ分野のマーケットリーダーであるサムスンは、SDカードを構成するすべての部品を完璧にマッチさせることができ、確かな製品を作るために必要な情報をすべて持っています。

キングストン

TL;DR NOT 推奨

ある重要なプロジェクトにおいて、Kingston社製128GBカードの信頼性に問題が発生しました。Kingston社は自社工場を持たず、余剰容量を他のフラッシュメーカーから購入しています。そのため、安定した性能は保証できません。

以下の 記事:Bunny Huang は、この文脈でも興味深い。

東芝

東芝は、世界のDRAM市場における#2として、自社のメモリーカード製品も販売している。サンディスクと東芝は、松下電器と一緒に1999年に登場したSD規格の創始者である。東芝のカードについては今のところ経験がありません。

トランセンド/シリコンパワー

私たちは、特に低価格帯のトランセンドやシリコンパワーのカードも使用してきました。これらのカードは基本的には良いものですが、サンディスクよりもトランセンドの方が返品や不具合が多く見られました。したがって、重要なプロジェクトでは、むしろサンディスク/サムスンをお勧めします。

良いメモリーカードを選ぶために

良いメモリーカードを選ぶためには、まずメーカーを選ぶことが大切です。おすすめは サムスンまたはサンディスク候補としては、ソニーのほかに東芝も挙げられる。

次に検討すべきは、メモリクラスです。このクラスは、ブロック単位で最速の書き込み速度を示す。実際のアプリケーションでより意味のある、散在するランダムアクセスライトの書き込み速度ではない。

上のクラスは価格が高くなりますが、性能が大幅に向上するのでお勧めです。当社では通常、クラス10のカードを出荷しています。

eLinux.orgのこの概要 適当なメモリーカードを用意して、Raspberry Piとの互換性を確認します。重要:Raspberry Piのファームウェアは、メモリーカードとの互換性を高め、データの破損を防ぐために何度も修正されています。

信頼のおけるソースから注文するべきです - 例えば サンディスクのmicroSDカードを手に入れよう Raspberry Pi Tradingやドイツの大手流通業者から直接購入することができます。Amazonでは、マーケットプレイスの小売店ではなく、必ずAmazonに直接注文してください。

特定の情報 (cid, csd, 日付, manfid, oemid, シリアル)をLinuxで読み取ることで、正しいメーカーのものを入手したかどうかを確認することができます。Transcend社製のカードを使用した例。

cd /sys/class/mmc_host/mmc?/mmc?:*
echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
 man:0x000074 oem:0x4a60 name:USD hwrev:0x1 fwrev:0x0
echo "serial:$(cat serial) mdt:$(cat date)"
serial:0x401e39f2 mdt:03/2017

メーカーID (マンフィド)が割り当てられています。 SD-3C LLCまた、OEM/アプリケーションID(oemid).のようになります。 oemid は、カードのOEMおよび/またはカードのコンテンツを識別します。

製品名(名前)は5文字(ASCII)です。 hwrev はハードウェアリビジョン、そして fwrev ファームウェアリビジョン。これらを合わせて、製品リビジョン(hwrev.fwrev).

のです。 シリアル は、microSDカードのシリアル番号で、32ビットのフィールドで、符号なしの整数として読み取る必要があります。

のです。 mdt (Manufacturing Date)は、カードがいつ製造されたか(年と月)を示します。

この値をウェブサイト上の値と比較することで、偽物のmicroSDカードによる不正を検出することができます。を読むことをお勧めします。 うさぎさんのブログ記事(1件) そして この記事(2).

安定した 男性/女性 の組み合わせは、よく管理された一貫性のあるサプライチェーンを示しています。例えば、サンディスクの場合、以下のような組み合わせがあります。 eLinux.org Wikiのすべてのエントリに対して: man:0x000003 oem:0x5344.トランセンドのような他のブランドは、サプライヤーを変えているため、安定した品質を保証できなくなっています。

操作中のデータ破損を防ぐ

microSDカードは、Raspberry Piの「ハードドライブ」です。通常のLinuxの設定では、ハードドライブと全く同じように扱われ、読み込みと書き込みの両方のアクセスが発生します。Linuxでは、多くのログファイルに情報を記録し、ファイルのアクセス時間などを更新しています。そのため、データは頻繁に変更されたり、上書きされたりします。これは、microSDカードがそもそも想定していないことです。

ヒント #1: Raspberry Piを適切にシャットダウンし、良い電源を使用する

Windowsパソコンでもコンセントを抜くことはないでしょう。Linuxコンピュータ、特にmicroSDカードに対応したRaspberry Piでは、時間の問題です。 停電でデータが壊れる前に.

Linuxでは、ファイル操作を高速化するために、読み書き両用のキャッシュを持っています。Piから電源を抜いただけでは、まだmicroSDに書き込まれていない書き込みキャッシュの情報が失われてしまうことがあります。

先に述べたように、microSDコントローラは、ウェアレベリングのためにランタイムでデータを積極的にシフトし、リードディスターブを回避しています。これは、Linuxシステムの知らないところで行われます(「トランスペアレント」)。また、メーカーによっては、多かれ少なかれ保守的に行われます。また、ここで - 特に書き込み操作の際に!- データの損傷や損失が発生する可能性があります。

そのため、Piをシャットダウンした後に、Raspberry PiのACT-LEDの点滅が止まったことを確認してから、電源を引きます。

また、電源が悪いと以下のような問題が発生します。 ブラウンアウト (不足電圧)が発生することがあります。疑わしい場合は、Raspberry Pi Tradingが推奨/提供する電源を使用してください。

Tip #2 オーバーレイ付きリードオンリーシステム

読み取り専用のシステムでは、SDカードが読み取り妨害から保護されないため、必要な消去サイクルによる老化が起こります。しかし、これは積極的に書き込んでいるときよりもはるかにゆっくりと起こります。

また、読み取り専用のファイルシステムには、起動時のファイルシステムチェックが少なくて済むなどのメリットもあります。

特に組み込みシステム、つまり特定の目的のために開発され、アプリケーションにインストールされるシステム(例:デジタルサイネージ)には、常に新しいソフトウェアをインストールし、正確なログを現場に残す可能性は必ずしも必要ではありません。ログをネットワーク経由で中央のサーバーに送信したり(必要に応じて遅延させる)、システムの更新時にはシステムをメンテナンスモードにして更新を適用することができます。

RaspbianのベースとなっているDebianプロジェクトからの情報をご紹介します。 https://wiki.debian.org/ReadonlyRoot.

RAM ディスクのオーバーレイ(tmpfs)を使用することで、ログファイルの書き込みやファイルの変更を行うことができます。RAM ディスクのオーバーレイは、SD カードの特別なパーティションと定期的に同期させることができます。RAM ディスクがオーバーフローしないように注意する必要があります(ログファイルのため)。

私たちはこの技術を使って 当社製品「Anonymebox」でそのため、ユーザーがコンセントを抜くことを前提としなければなりません。

あなたの組み込みRaspberry Piプロジェクトのための強固なリードオンリーソリューションを実現するパートナーをお探しですか? 私たちは(pi3g e.k.として)コンサルティング&開発サービスを提供しています。ハード、ソフトともに

ヒント #3 書き込み操作の削減

特に古いカーネルでは、LinuxはPOSIX規格に基づいて、ファイルにアクセスするたびにアクセスタイムを更新しています。 つまり、読み取り操作のたびに、自動的に書き込み操作が行われることになります。.を明示的に設定できる可能性があります。 ノータイム /etc/fstab が設定されていなければ、これを設定します(Raspbianでは自動的に設定されるようです)。

の詳細については、こちらをご覧ください。 リレータイム そして ノータイム

マスクを使ったシステムログを無効にする。

systemctl mask systemd-journald.service
/etc/systemd/system/systemd-journald.service から /dev/null へのシンボリックリンクを作成しました。
sudo systemctl mask rsyslog.service
/etc/systemd/system/rsyslog.serviceから/dev/nullへシンボリックリンクを作成しました。

他のアプリケーションで作成されたその他のログや、これらのサービスを無効にした場合の影響(例えば、特定のサービスが起動しなくなるなど)についても、もちろん詳細に調べる必要があります。

スワップファイルです。

RAMが十分でない場合、Linuxは個々のRAM領域をSWAPファイルに移動させます。(十分なRAMを持つRaspberry Pi 4を使用することを考慮して、例えば Pi 4 / 4GB または The Pi 4 / 8 GB を使用することができます)。以下のコマンドで、SWAPファイルの状態を確認することができます。

sudo systemctl status dphys-swapfile
dphys-swapfile.service - LSB: スワップファイルの自動生成と使用
Loaded: ロード済み(/etc/init.d/dphys-swapfile)
Active: Sat 2017-07-01 19:11:57 UTC; 8min ago からアクティブ(終了)になっています。
プロセスです。498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

以下のコマンドは、SWAPを無効にするために使用できます。

sudo systemctl disable dphys-swapfile

結論

microSDカードを連続して使用すると、Raspberry Piベースのシステムの長期的な信頼性が厳しく試されます。

適切な電源の使用、オーバーレイによる読み取り専用システム、書き込み操作の継続的な削減、有名ブランドの良質なSDカードの選択などにより、長期的に安定性を高めることができます。

Raspberry Piを使ったプロジェクトや製品について、専門的なサポートが必要な場合は、無料の初回相談をお受けします。.

備考

(*)注Raspberry Pi 3, 3B+, 4は、microSDカードがなくても、USBメディアやネットワーク(Ethernet)からの起動が可能です。

特にネットワーク経由での起動の場合、起動コードのタイムアウトのバグにより安定した起動ができないため、やはり特別なファームウェアを搭載したmicroSDカードを装着することをお勧めします(Raspberry Pi 3B)。

フラッシュメモリーの構造については、USBメモリーにもフラッシュメモリーが搭載されているため、上記の説明が当てはまります。

(**) 注フローティングゲートの代わりに使われるようになったチャージトラッピングフラッシュメモリも、その機能原理は同じです。チャージトラッピングフラッシュセルは、メモリの高密度化を可能にします。

3コメント

  1. Pete on 10月 13, 2021 at 8:27 pm となります。

    こんにちは。
    SDカード内のコントローラーに、不良ブロックがいくつあるかを確認する方法はありますか?
    これを定期的にチェックすることで、トレンドチャートを作っていきたいと思います。
    お疲れ様でした。
    Regards,
    ピーター

    • unintell on 11月 9, 2022 at 3:55 pm となります。

      というのは、通常のコンシューマーグレードのSDカードでは、使用する特定のコントローラのMPツールがない限り不可能です(絶対に入手できない)。
      カードが工業用で、SMART情報が利用可能(それぞれのデータシートに明記)であれば、SMARTデータを読み出すコードを書けば可能でしょう。
      しかし、これは厄介なことの始まりに過ぎません。SDカードのヘルスモニタリングには業界標準がないため、メーカーごとにプロトコルの実装が異なり、それが常に公開されているわけではありません。
      メーカーのSMARTレポートには、カードの残り寿命のパーセンテージ数しか表示されないものもあれば、予約ブロック、初期不良ブロック、後期不良ブロック、最大/最小/最大消去回数、P/E寿命など、より詳細な情報を表示するものもあります。
      現在、Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit などのカードの健康状態を読み取ることができます。
      私のモチベーションは、Foreseeが製造した激安の中古産業用カードからSMART情報を解読することです。今のところ、MPS/M9M/M9H/D7D/X52/X53シリーズのカードを解読することができましたが、まだいくつかの機種に取り組んでいるところです。

      早くSDカードのスマートインフォメーションの工業規格ができるといいですね。また、いくつかのSDカードは多くのSSDよりも高いTBW寿命を持つことが面白いです。

      • unintell on 11月 9, 2022 at 4:03 pm となります。

        あ、言い忘れましたが、多くのカードはCMD56コマンドに32bitのint型引数を与えることでSMART情報を得ますので、データシートとそれぞれのデータフォーマットからマジックナンバーを見つけてデータを読み込む必要があります。データシートがあれば、基本的に完了です。サンプルコードはgithubのsdmon toolを参照してください。
        データシートがなかったり、マジックナンバーが公開されていない場合は、intの31bit(最下位bitは常に1)空間を全て繰り返し、力技で解読することになり、運次第では12時間から半月かかるかもしれません。0xF_______でマジックナンバーを始めるような邪悪なメーカーがないことを祈ります。今のところ、私がクラック/収集できたマジックナンバーはすべて0x1_______で始まっている。

        カードによっては、ApacerのようにSMART情報を読み出すのにもっと複雑なルーチンを必要とするものもありますが、データシートで必要な情報を提供してくれるのは良いことです。Apacerは他のブランドのOEMカードも作っているので、同じルーチンが適用されます。

コメントを残す