Raspberry PiのSDカードの健康について

SDカードの健康状態

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.3 Vなど)よりもかなり高い電気電圧(10 Vなど)が必要です。そのためには、さらにコントロール・ゲート(V1/V2/V3)が重要な役割を果たします。

すべてを消去するために、コントロール・ゲートは高い負電圧を印加することでフローティング・ゲートから電子を追い出す。

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

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

フラッシュ・メモリは、プログラミングと消去のために寿命が限られており、消去サイクルで計算する。

寿命が限られる理由は、高電圧によってフローティング・ゲートを電荷リークから保護する絶縁酸化物層が損傷するためである。この層が導電性になると、メモリセルはそれ以上の情報を保持できなくなる。

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

当初は、2つの電荷状態(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線に対して安全な設計のカードでなければ、データを確実に消去することはできません。

良いカードの製造と選択

マイクロコントローラーとフラッシュ・デバイス、そして完成したmicroSDカードは、どちらも異なるメーカーのものであることがある。例の写真のパナソニック製SDカードは、サムスン製フラッシュを搭載している。コントローラーは日本製。

NANDフラッシュ・デバイスを製造しているメーカーは4社ある:

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

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

サンディスク(推奨)

サンディスクと東芝はフラッシュ製造の合弁会社を持っている。しかし、2009年にサンディスクはファブの権利を東芝に譲渡して ファブレスのフラッシュメモリーメーカー.両社は現在もメモリ開発に関して協力している。サンディスクと東芝は、松下とともに1999年に発表されたSD規格の創始者である。サンディスクはmicroSD規格も策定した。

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

サムスン(推奨)

サムスンのメモリーカードもおすすめです。NANDフラッシュ分野のマーケットリーダーとして、サムスンはSDカードのすべてのコンポーネントを互いに完璧にマッチさせることができ、確かな製品に必要な情報をすべて持っています。

キングストン(推奨しない)

ある重要なプロジェクトで、キングストンの128GBカードの信頼性でひどい目にあった。キングストンは自社工場を持たず、余剰容量を他のフラッシュ・メーカーから購入している。そのため、安定した性能は保証されていない。

以下の 記事: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カードは、ラズベリーパイの「ハードドライブ」だ。通常の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メモリーにも当てはまる。

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

Raspberry Piを使ったSDカードについてもっと知りたい方は、以下をご覧ください。 このトピックを扱った多くの記事はこちら.

5コメント

  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カードも作っているので、同じルーチンが適用されます。

  2. [...】SDカードの健康(SDカードのお手入れのベストプラクティスを含む!) 【...】SDカードの健康(SDカードのお手入れのベストプラクティスを含む!) 【...]

  3. [...] Raspberry PiのSDカード/microSDカードの健康についてのすべて [...]

コメントを残す