質問: Linuxで組み込み開発をしており、日々蓄積していくデータをcMMCに保存したいのですが、書き換え回数で心配があります。 製品寿命までの累計保存容量=フラッシュの容量で、数分おきに数百バイトのデータを保存するようなとき、一般的にどのような方法が使用されるのでしょうか? ファイルに保存で考えても、ファイルフォーマットのセクタサイズやeMMCのランダム書き込み処理でうまく予想がつかなくて困っています。 追記 例えば、以下のような条件だとした場合... ・一つのファイルで1分ごとに300バイト増加 ・1分おきに上書き保存 ・セクタサイズ512バイト 2回目の書き込み時、1回目に書き込んだセクタ(セクタAとする)の容量が212バイト余っていますので、セクタAを詰めなおして、512バイト分全てが上書きされると思っています。この場合セクタAは2回書き込まれることになります。 これだけなら良いのですが、eMMC側には寿命を延ばすためにランダム位置に書き込む処理があるため、運が悪いと同じ場所に何回も書いてしまう可能性があり、心配しています。通常は無視できるレベルですが、毎分1セクタの上書きとなると... また、1Mバイトのファイルに300バイト追記した場合、eMMCへの記録は追加部分だけになるのでしょうか?
回答: 結論から言うと心配しなくて良いです。OSから見えるのは論理アドレスで物理アドレスではありません。 コントローラーがウェアレベリングやエラー訂正、bad blockの管理をしており、それはハードウェア(さらにSoCではなくeMMC側)で行われているのでOS側から把握は出来ません。またSocにすらコントローラーがない場合(eMMCではありえませんが)はYAFFS2(今はubifsとか?)などのファイルシステムで行わせるという方法もあります。そのためアプリケーションから意識することはほとんどありません。 豆知識ですが最近のeMMCはtrimコマンドにも対応しているのでSSDとかわりが無いようです。