Raspberry Piでより強靭な File システム
文書の範囲
このドキュメントは、次の Raspberry Pi 製品に適用されます。
パイ0 | パイ1 | パイ2 | パイ3 | パイ4 | パイ400 | CM1 | CM3 | CM4 | CM 5 | ピコ | ||||
0 | W | H | A | B | A | B | B | 全て | 全て | 全て | 全て | 全て | 全て | 全て |
* | * | * | * | * | * | * | * | * | * | * | * | * | * |
|
導入
Raspberry Pi Ltdデバイスは、データストレージやモニタリングデバイスとして頻繁に使用され、突然の電源断が発生する可能性のある場所で使用されることがよくあります。他のコンピューティングデバイスと同様に、電源断はストレージの破損を引き起こす可能性があります。このホワイトペーパーでは、適切な電源を選択することで、このような状況やその他の状況におけるデータ破損を防ぐ方法についていくつかの選択肢を紹介します。 file データの整合性を確保するためのシステムと設定。このホワイトペーパーでは、Raspberry Pi が Raspberry Pi (Linux) オペレーティングシステム (OS) を実行し、最新のファームウェアとカーネルに完全にアップデートされていることを前提としています。
データ破損とは何ですか? また、なぜ発生するのですか?
データ破損とは、書き込み、読み取り、保存、転送、または処理中にコンピュータデータに発生する意図しない変更を指します。この文書では、転送や処理ではなく、保存についてのみ言及しています。破損は、書き込みプロセスが完了する前に中断され、書き込みが完了できない状態になった場合に発生する可能性があります。例えば、amp電源が失われた場合、書き込みは自動的に再開されます。ここで、Linux OS(そしてRaspberry Pi OSも)がストレージにデータを書き込む方法について簡単に説明しておく価値があります。Linuxは通常、書き込みキャッシュを使用してストレージに書き込むデータを保存しています。これらのキャッシュは、事前に定義された制限に達するまでデータをランダムアクセスメモリ(RAM)に一時的に保存します。制限に達した時点で、ストレージメディアへの未処理の書き込みはすべて1つのトランザクションで実行されます。これらの定義済みの制限は、時間やサイズに関連する場合があります。例えば、amp例えば、データはキャッシュされ、5秒ごとにストレージに書き込まれるか、一定量のデータが蓄積された場合にのみ書き込まれる場合があります。これらの方式はパフォーマンスを向上させるために使用されます。つまり、一度に大きなデータチャンクを書き込む方が、小さなデータチャンクを多数書き込むよりも高速です。
しかし、キャッシュにデータが格納されてから書き出されるまでの間に電源が失われると、そのデータは失われます。また、書き込みプロセスのさらに後、ストレージメディアへのデータの物理的な書き込み時にも、他の問題が発生する可能性があります。ハードウェア(例えばampSDカード(例えば、Secure Digital(SD)カードインターフェース)にデータを書き込むよう指示されても、そのデータが物理的に保存されるまでには一定の時間がかかります。繰り返しますが、この非常に短い時間内に停電が発生すると、書き込み中のデータが破損する可能性があります。Raspberry Piを含むコンピュータシステムをシャットダウンする際は、シャットダウンオプションを使用するのがベストプラクティスです。これにより、キャッシュされたデータがすべて書き出され、ハードウェアが実際にデータをストレージメディアに書き込む時間を確保できます。Raspberry Piシリーズのほとんどのデバイスで使用されているSDカードは、安価なハードドライブの代替として優れていますが、使用方法によっては経年劣化で故障する可能性があります。SDカードに使用されているフラッシュメモリの書き込みサイクル寿命には限りがあり、その限界に近づくとカードの信頼性が低下する可能性があります。ほとんどのSDカードは、ウェアレベリングと呼ばれる手法を用いて可能な限り長持ちさせていますが、最終的には故障する可能性があります。故障の期間は、カードに書き込まれたデータ量、または(より重要なのは)消去されたデータ量に応じて、数か月から数年にわたります。この寿命はカードによって大きく異なります。SDカードの故障は通常、ランダムな file SD カードの一部が破損し、使用できなくなります。
データが破損する原因は他にもあります。ストレージメディアの欠陥、ストレージ書き込みソフトウェア(ドライバ)のバグ、アプリケーション自体のバグなど、これらに限定されるものではありません。本ホワイトペーパーでは、データ損失が発生する可能性のあるあらゆるプロセスを破損イベントと定義します。
書き込み操作の原因は何でしょうか?
ほとんどのアプリケーションは、ストレージに何らかの書き込みを行います。例えば、ampファイル構成情報、データベースの更新など。これらの中には file一時的なもの、つまりプログラムの実行中のみ使用され、電源を入れ直しても維持される必要がないものもあります。しかし、それでもストレージメディアへの書き込みは発生します。アプリケーションが実際にデータを書き込まなくても、バックグラウンドではLinuxがストレージへの書き込みを継続的に行っており、そのほとんどはログ情報の書き込みです。
ハードウェアソリューション
このホワイトペーパーの趣旨からは完全に逸脱しているわけではありませんが、予期せぬ電源断を防ぐことは、データ損失に対する一般的な軽減策であり、広く理解されていることは言うまでもありません。無停電電源装置(UPS)などのデバイスは、安定した電源供給を確保します。UPSへの電源供給が途絶えた場合でも、バッテリー駆動中にコンピュータシステムに電源断が差し迫っていることを通知し、バックアップ電源が切れる前にシャットダウン処理を正常に実行できるようにします。SDカードの寿命には限りがあるため、寿命が尽きる前にSDカードを交換するための交換計画を立てておくことが有効です。
屈強 file システム
Raspberry Piデバイスを破損イベントから保護する方法はいくつかあります。これらの方法によって破損防止能力は異なり、それぞれの対策によって破損の発生確率を低減できます。
- 書き込みの削減
アプリケーションとLinux OSの書き込み量を減らすだけでも、効果があります。ログを大量に記録している場合、破損イベント発生時に書き込みが発生する可能性が高くなります。アプリケーションでのログ記録量を減らすのはエンドユーザーの責任ですが、Linuxでのログ記録量も減らすことができます。特に、書き込みライフサイクルが限られているフラッシュベースのストレージ(eMMC、SDカードなど)を使用している場合は、特に重要です。 - コミット時間の変更
コミット時間は file システムは、すべてのデータをストレージにコピーする前にデータをキャッシュする時間の長さです。この時間を長くすると、多数の書き込みを一括処理することでパフォーマンスが向上しますが、データの書き込み前に破損が発生した場合、データ損失につながる可能性があります。コミット時間を短くすると、データ損失につながる破損イベントの発生確率は低くなりますが、完全に防ぐことはできません。
メインEXT4のコミット時間を変更するには file Raspberry Pi OSのシステムでは、\etc\fstabを編集する必要があります。 file どのように定義するか file システムは起動時にマウントされます。 - $sudo ナノ /etc/fstab
ルートのEXT4エントリに以下を追加します file システム:
- コミット=
例えば、fstab は以下のようになります。コミットタイムは3秒に設定されています。特に指定がない場合は、コミットタイムはデフォルトで5秒になります。
一時的 file システム
アプリケーションに一時的な file ストレージ、つまりアプリケーションの実行中にのみ使用され、シャットダウン時に保存する必要がないデータの場合、ストレージへの物理的な書き込みを防ぐ良い方法は、一時的な file システム、tmpfs。これらは file システムは RAM ベース (実際には仮想メモリ) であり、tmpfs に書き込まれたデータは物理ストレージに書き込まれることはなく、そのためフラッシュの寿命に影響を与えず、破損イベントによって損傷することはありません。
1つ以上のtmpfsの場所を作成するには、/etc/fstabを編集する必要があります。 file、すべての file Raspberry Pi OSのシステム。以下の例ampleはストレージベースの場所/tmpと/var/logを一時的なものに置き換えます file システムの場所。2番目の例amp標準のログフォルダを置き換えるleは、 file システムを16MBにします。
- tmpfs /tmp tmpfs デフォルト、noatime 0 0
- tmpfs /var/log tmpfs デフォルト、noatime、サイズ=16m 0 0
RAMへのログ出力を設定するためのサードパーティ製スクリプトもGitHubで公開されています。このスクリプトには、RAMベースのログを事前に定義された間隔でディスクにダンプする追加機能があります。
読み取り専用ルート file システム
根 file システム(rootfs)は file ルートディレクトリが配置されているディスクパーティション上のシステムであり、 file 他のすべての file システムは起動時にマウントされます。Raspberry Piでは/であり、デフォルトではSDカード上に完全に読み書き可能なEXT4パーティションとして配置されています。また、ブートフォルダもあり、これは/bootとしてマウントされ、読み書き可能なFATパーティションです。rootfsを読み取り専用にすることで、あらゆる書き込みアクセスが防止され、破損に対する堅牢性が大幅に向上します。ただし、他の対策を講じない限り、rootfsへの書き込みは不可能になります。 file システム自体が無効になっているため、アプリケーションからルートファイルシステムへのあらゆる種類のデータの保存は無効になっています。アプリケーションからのデータを保存する必要があるものの、読み取り専用のルートファイルシステムが必要な場合は、ユーザーデータ保存専用のUSBメモリなどを追加するのが一般的な方法です。
注記
スワップを使用している場合 file 読み取り専用を使用する場合 file システムでは、スワップを移動する必要があります file 読み取り/書き込みパーティションに。
かぶせる file システム
オーバーレイ file システム(overlayfs)は2つの file システム、上部 file システムとより低い file システム。名前が両方のシステムに存在する場合 file システム、上部のオブジェクト file システムは、下のオブジェクトが見える状態で表示されます file システムは隠蔽されるか、ディレクトリの場合は上位オブジェクトと統合されます。Raspberry Piはraspi-configでoverlayfsを有効にするオプションを提供しています。これにより、rootfs(下位)は読み取り専用になり、RAMベースの上位ファイルシステムが作成されます。 file システム。これは読み取り専用と非常によく似た結果になります file システムを再起動すると、ユーザーによる変更はすべて失われます。overlayfs を有効にするには、コマンドラインの raspi-config を使用するか、デスクトップの Raspberry Pi 設定アプリケーションの「Preferences」メニューを使用します。
上位から下位への必要な変更を同期できるオーバーレイfsの他の実装もあります。 file 所定のスケジュールでシステムを実行する。例えばampたとえば、ユーザーのホームフォルダーの内容を 2 時間ごとに上位から下位にコピーするとします。これにより、書き込みプロセスが非常に短時間に制限されるため、破損の可能性が大幅に低くなりますが、同期前に電源が失われると、最後の同期以降に生成されたデータがすべて失われることを意味します。 コンピューティングモジュールの pSLC Raspberry Pi コンピューティングモジュールデバイスで使用される eMMC メモリは MLC (マルチレベルセル) で、各メモリセルが 1 ビットを表します。pSLC (疑似シングルレベルセル) は、互換性のある MLC ストレージデバイスで有効にできる NAND フラッシュメモリテクノロジの一種で、各セルが 3,000 ビットのみを表します。これは、SLC フラッシュのパフォーマンスと耐久性と、MLC フラッシュのコスト効率と大容量のバランスをとるように設計されています。pSLC は、セルへのデータ書き込み頻度が低いほど摩耗が減るため、MLC よりも書き込み耐久性が高くなっています。 MLCの書き込みサイクルは10,000~XNUMX回程度ですが、pSLCはそれよりもはるかに高い数値を実現し、SLCの耐久性レベルに迫ります。この耐久性の向上により、pSLCテクノロジーを採用したデバイスは、標準的なMLCを採用したデバイスよりも長寿命になります。
MLCはSLCメモリよりもコスト効率に優れていますが、pSLCは純粋なMLCよりも優れたパフォーマンスと耐久性を提供する一方で、容量を犠牲にしています。pSLC用に構成されたMLCデバイスは、各セルが2ビット以上ではなく1ビットしか保存できないため、標準的なMLCデバイスの半分(またはそれ以下)の容量になります。
実装の詳細
pSLCは、eMMCに拡張ユーザーエリア(拡張ストレージとも呼ばれます)として実装されています。拡張ユーザーエリアの実際の実装はMMC規格では定義されていませんが、通常はpSLCです。
- 拡張ユーザー エリアは概念ですが、pSLC は実装です。
- pSLC は、拡張ユーザー領域を実装する 1 つの方法です。
- 執筆時点では、Raspberry Pi コンピューティング モジュールで使用されている eMMC は、pSLC を使用して拡張ユーザー領域を実装しています。
- eMMC ユーザー領域全体を拡張ユーザー領域として構成する必要はありません。
- メモリ領域を拡張ユーザー領域としてプログラミングするのは1回限りの操作です。つまり、元に戻すことはできません。
電源を入れる
Linuxは、eMMCパーティションを操作するためのコマンドセットをmmc-utilsパッケージで提供しています。CMデバイスに標準のLinux OSをインストールし、以下の手順でツールをインストールしてください。
- sudo apt install mmc-utils
eMMC に関する情報を取得するには (表示する情報がかなり多いため、このコマンドは less にパイプします)。
- sudo mmc extcsd 読み取り /dev/mmcblk0 | less
警告
以下の操作は1回限りです。一度実行すると元に戻すことはできません。また、すべてのデータが消去されるため、コンピュートモジュールを使用する前に実行してください。eMMCの容量は以前の半分に減少します。
pSLCを有効にするコマンドはmmc enh_area_setです。このコマンドには、pSLCを有効にするメモリ領域を指定するためのパラメータがいくつか必要です。以下の例をご覧ください。ampleは領域全体を使用します。eMMCのサブセットの使用方法の詳細については、mmcコマンドのヘルプ(man mmc)を参照してください。
デバイスを再起動した後、pSLC を有効にすると eMMC の内容が消去されるため、オペレーティング システムを再インストールする必要があります。
Raspberry Pi CM Provisionerソフトウェアには、プロビジョニングプロセス中にpSLCを設定するオプションがあります。これはGitHubで入手できます。 https://github.com/raspberrypi/cmprovision.
- デバイス外 file システム / ネットワークブート
Raspberry Piはネットワーク接続を介して起動することができます。例えばampネットワークを使用する File システム(NFS)です。つまり、デバイスが最初のsを完了すると、tagカーネルとルートをロードする代わりに、eブート file SDカードからシステムを起動すると、ネットワークサーバーからロードされます。起動すると、 file 操作はサーバー上で実行され、ローカル SD カードでは実行されません。ローカル SD カードは処理においてそれ以上の役割を果たしません。 - クラウドソリューション
今日では、多くのオフィス タスクがブラウザーで実行され、すべてのデータがオンラインのクラウドに保存されています。SD カードにデータを保存しないことで信頼性が向上することは明らかですが、インターネットへの常時接続が必要になるほか、クラウド プロバイダーから料金が発生する可能性もあります。ユーザーは、Raspberry Pi に最適化されたブラウザーを備えた本格的な Raspberry Pi OS インストールを使用して、Google、Microsoft、Amazon などのプロバイダーのクラウド サービスにアクセスできます。別の方法としては、Raspberry Pi OS を、SD カードではなく中央サーバーに保存されたリソースから実行される OS/アプリケーションに置き換えるシン クライアント プロバイダーがあります。シン クライアントは、ほとんどのアプリケーション、機密データ、およびメモリが保存されているサーバーベースのコンピューティング環境にリモートで接続することで機能します。
結論
正しいシャットダウン手順に従えば、Raspberry PiのSDカードストレージは非常に信頼性が高くなります。これは、シャットダウンを制御できる家庭やオフィス環境では有効ですが、産業用途や電源の不安定な場所でRaspberry Piデバイスを使用する場合は、追加の予防措置を講じることで信頼性を向上させることができます。
つまり、信頼性を向上させるためのオプションは次のようになります。
- よく知られた信頼性の高い SD カードを使用してください。
- コミット時間を長くしたり、一時的なものを使用したりして書き込みを減らす file overlayfs などを使用するシステム。
- ネットワーク ブートやクラウド ストレージなどのデバイス外ストレージを使用します。
- SD カードが寿命を迎える前に交換する体制を導入します。
- UPS を使用してください。
Raspberry PiはRaspberry Pi Ltdの商標です。
ラズベリーパイ株式会社
奥付
© 2020-2023 Raspberry Pi Ltd (旧Raspberry Pi (Trading) Ltd.)
このドキュメントは、Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND) ライセンスの下でライセンスされています。
- ビルド日: 2024-06-25
- ビルドバージョン: githash: 3e4dad9-clean
法的免責事項
RASPBERRY PI 製品 (データシートを含む) の技術データおよび信頼性データ (「リソース」) は、随時変更され、RASPBERRY PI LTD (「RPL」) によって「現状のまま」提供され、明示または黙示を問わず、商品性および特定目的への適合性に関する黙示の保証を含むがこれに限定されない、一切の保証を放棄します。適用法によって許可される最大限の範囲において、いかなる場合も RPL は、契約、厳格責任、不法行為 (過失またはその他を含む) を問わず、リソースの使用によって何らかの形で生じた直接的、間接的、偶発的、特別、懲罰的、または結果的な損害 (代替品またはサービスの調達、使用、データ、または利益の喪失、または事業中断を含むがこれらに限定されない) について、たとえそのような損害の可能性について通知されていたとしても、いかなる責任理論においても、責任を負わないものとします。
RPL は、リソースまたはリソース内に記載されている製品に対し、いつでも予告なく機能強化、改良、修正、その他の変更を行う権利を留保します。リソースは、適切なレベルの設計知識を持つ熟練したユーザーを対象としています。リソースの選択と使用、およびリソース内に記載されている製品の適用については、ユーザーが単独で責任を負います。ユーザーは、リソースの使用に起因するすべての責任、費用、損害、その他の損失について、RPL を補償し、免責することに同意します。RPL は、ユーザーが Raspberry Pi 製品と組み合わせてのみリソースを使用することを許可します。リソースのその他の使用はすべて禁止されています。RPL またはその他の第三者の知的財産権のライセンスは付与されません。
高リスク活動。Raspberry Pi 製品は、原子力施設、航空機の航行または通信システム、航空管制、兵器システム、または安全性が極めて重要なアプリケーション (生命維持システムおよびその他の医療機器を含む) の運用など、製品の故障が直接、死亡、人身傷害、または重大な物理的損害もしくは環境的損害につながる可能性がある (「高リスク活動」)、フェイルセーフ性能を必要とする危険な環境での使用を目的として設計、製造、または意図されていません。RPL は、高リスク活動への適合性について明示的または黙示的な保証を明確に否認し、Raspberry Pi 製品を高リスク活動に使用または組み込むことについて一切の責任を負いません。Raspberry Pi 製品は、RPL の標準規約に従って提供されます。RPL によるリソースの提供は、RPL の標準規約 (そこに記載されている免責事項および保証を含みますが、これらに限定されません) を拡張または変更するものではありません。
よくある質問
- Q: このドキュメントではどの Raspberry Pi 製品がサポートされていますか?
A: このドキュメントは、Pi 0 W、Pi 1 A/B、Pi 2 A/B、Pi 3、Pi 4、Pi 400、CM1、CM3、CM4、CM5、Pico などのさまざまな Raspberry Pi 製品に適用されます。 - Q: Raspberry Pi デバイスでデータが破損する可能性を減らすにはどうすればよいですか?
A: 書き込み操作、特にログ記録を最小限に抑え、コミット時間を調整することで、データの破損を減らすことができます。 file このドキュメントで説明されているシステム。
ドキュメント / リソース
![]() |
Raspberry Piでより強靭な File システム [pdf] ユーザーガイド Pi 0、Pi 1、より回復力のあるものにする File より回復力のあるシステム File システム、回復力 File システム、 File システム |