Eyes, JAPAN Blog > 電源スイッチの裏に隠れる苦労

電源スイッチの裏に隠れる苦労

beko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

電源スイッチの裏に隠れる苦労
使いやすく安価な VPN ルータを目指して小型 Linux 箱作成に挑戦していたことがあった。CF ブートを行うことで、機械的な弱点無くし、高耐久性を計った。しかし、「プチ切り」はなかなかの難題だった。

「プチ切り」とは、一般の電気機器のように前処理なしで突然電源を落とすこと。この行為は、ファイルシステムに障害をもたらすため、一般の構成の Linux 等では行うことはできなかった。そのため、当時制作した Linux 箱では、ファイルを書き込みたい時だけ Read/Write でファイルシステムをマウントし、書き終わったらすぐに ReadOnly で再マウントする方法をとっていた。単に障害が発生する確率を下げるだけの工夫だった。

時は流れ、今は atmark techno 社の Armadillo シリーズを使い、機器開発を行っている。FLASH メモリは 4MB と少なく、単純にファイルシステムを構築するだけでは動作に必要なファイル群が収まらないため、起動時に RAM ディスクに圧縮したファイルシステムの内容を展開するなどの手法で、狭いメモリに多くの機能を納めている。これは、メインメモリが64MBと大容量なために行える芸当だが、最近のブロードバンドルータ等もこのような方法で動作しているようだ。

さて、RAM ディスクで FLASH メモリの容量を稼いだのはいいが、肝心の設定内容が RAM ディスクに保存していたのでは、電源を落としてしまうとその内容が消えてしまう。そこで、そのような動作時に内容を変更する必要があるファイルは FLASH メモリに保存する必要があるが、そこでまた問題になってくるのが「プチ切り」。しかし、このような用途に使われる機会の多い Linux カーネルには、ファイルシステム操作中の突然の停止にも耐えうる JFFS (Journaling Flash File System) があり、この機構を介すことで FLASH メモリ上のファイルシステム操作を確実に行うことができる。

この JFFS は、単に「プチ切り」機能を提供しているだけではなく、FLASH メモリでは避けられない記憶素子の劣化によるデータ化けをなるべく少なくする機能を、メモリへの書き込みを管理し、同じ領域への書き込みをなるべく減らし分散させることで実現している。また、小容量の FLASH メモリのため、動的に書き込みデータを圧縮する機能も有している。現在、私が作成している環境では JFFS 領域が 64KB だが、この圧縮機能のおかげで、大幅な圧縮を行うことができるため容量不足をそれほど気にすることも無く、使用できている。

ここ最近、Linux へ浮気したくなってきました。組み込み分野だけだけど。。

担当: 衣川 (解答用紙回収直前に解答を修正したくなったが、失敗すれば0点な気分担当)

Comments are closed.