組み込みシステムでは、連続稼働を基本として設計するものが多く、特にシャットダウン手順が決められていないことから、突然の電源断が発生することがあります。
その際に、eMMC/SDカード等のストレージにデータ書き込みが発生していると、次回起動時にファイルシステムが壊れてシステムが起動しなくなるといったことが発生します。
そのため、ここでは突然の電源断でシステムが壊れにくくするように構成する方法を紹介します。
対応策
1. ルートファイルシステムをRead Onlyでマウントして使用する
ルートファイルシステムをRead Onlyでマウントすることで、ストレージへの書き込みが発生せず、突然の電源断時にもデータが壊れることがありません。
Armadillo-400シリーズ、Armadillo-800シリーズ、Armadillo-IoT G2では標準でこの方式と同等の機能を実現しています[1]。またArmadillo-IoT G3/G3L、Armadillo-X1ではoverlayfsの機能を有効化することでこの方式と同様の機能を実現させることができます[2]。
ただしログ等のデータの書き込みが別途必要な場合は、突然の電源断時にファイルシステムが壊れる可能性があります。その場合は書きこむ領域をルートファイルシステムを別のストレージ(SDカード等)に用意し、ルートファイルシステムを壊さないようにする方法もあります。
2. バックアップ用のパーティションを作成しておく
ここでは具体的な方法は紹介できませんが、突然の電源断発生時にはリカバリー用のパーティションで起動するという方法もあります。
SPIフラッシュや、eMMCの空き領域等に状態を記録しておき、U-bootでその状態を確認して起動するパーティションを変更する等の方法になります。U-bootとLinuxカーネルが連携して動作する必要があるため、U-boot、Linuxカーネルと双方への変更が必要になります。
3. バッテリーバックアップを利用する
電源断時にシャットダウン動作を実行するための時間のみ、バッテリーで動作するようなシステム構成にしてしまう方法もあります。拡張基板側で大きなキャパシタを搭載することで60秒程度のシャットダウン時間を稼ぐ方法や、外部にUPS等を搭載し、RS232C等で電源断を検知してシャットダウンを行う方法があります。いずれにせよ拡張ボードや外部機器等のハードウェアでの対策になります。
注意点
ファイルシステムの選択
ファイルシステムによっても電源断発生時にデータが壊れる可能性を減らせることがあります。特にext3/ext4等のジャーナリングファイルシステムは、電源断時にもある程度修復することができる仕組みがあります。そのため、ストレージへのデータ保存が必須であり、特にファイルシステムの指定がない場合は、ext3/ext4等のジャーナリングファイルシステムを使用することをお勧めします。
ストレージの書き換え可能回数
eMMCやSDカードはNANDフラッシュですので、仕様として書き換え可能回数があります。書き換え可能回数を越えてしまうと、データを保存できない等の問題が発生するため、データを一時的にRAMにためておく等の書き換え回数を減らすための対応も検討が必要になります。
SDカードを使用する場合には、SDカード選定のポイントが参考になります。
[2] 意図的にeMMCの領域に書き込んだ場合はその限りではありません。