パフォーマンス向上でナニに使える? OpenBlocks Aファミリによるサーバ実力診断

第3回 ディスクレスシステムで"壊れにくさ"を実現するOpenBlocksのしくみと,その活用のノウハウをご紹介!

この記事を読むのに必要な時間:およそ 4.5 分

はじめに

OpenBlocksシリーズには,発売以来の特徴として壊れにくさがあります。これには,たとえばファンレスであるとか電解コンデンサを使用しないなどのハードウェア設計上の理由がありますが,このほかにも使い方からのアプローチとして,SSDなどのストレージを使用せずにシステムを構築できる点も大きな理由となっています。

搭載するソフトウェアの容量が少なかったり,アプライアンスのようにあらかじめ用途が限定されている場合には,ストレージの故障に関する想定が不要になりますので,より堅牢なシステムを構築できます。今回はストレージを使用しないディスクレスシステムの構築方法や,そのメリット・デメリット,しくみなどを紹介します。

フラッシュROMで実現するディスクレスシステム

OpenBlocksシリーズのディスクレスシステムは,基板上にある128MBのフラッシュROM(NOR型)と1GBのメインメモリの組み合わせによって実現しています図1)⁠Linuxが起動すると,メインメモリの一部をRAMディスクとして確保し,あらかじめフラッシュROMに保存してある構築済みのシステム内容をそのRAMディスク上に書き戻すことで環境を復元しています。メインメモリとフラッシュROMの関係を表したものが図2です。図中の丸数字は,フラッシュROMからの展開が行われる順序です。

図1 メイン基板

図1 メイン基板

なお,SSDなどのストレージを併用する場合は,図2のRAMディスク(2)の部分がストレージに置き換わります。この場合,RAMディスクのように起動のたびに初期化・再設定されるわけではないため,フラッシュROMからのユーザエリアの書き戻し(図2の②と③)は行われません。

図2 メインメモリとフラッシュROM(OBSAX3/4/J7の場合)

図2 メインメモリとフラッシュROM(OBSAX3/4/J7の場合)

ディスクレスのメリット

ディスクレスシステムの大きなメリットは,ストレージを使用しないことで故障要因を排除できることです。信頼性が向上し,普及が進んだことで,価格面でも導入しやすくなったSSDが搭載可能ですが,SSDにはNAND型メモリを使用したストレージの特性上,書き換え寿命を無視するわけにはいきません。ディスクレスシステムはこの懸念を排除できるので,導入後の不具合発生の可能性が低減できることが期待できます。

また,RAMディスクは起動のたびに初期化・再設定されるため,突然の電源断にも強くなります。ストレージを使用している場合に電源断が発生してしまうと,ファイルシステムの破損が起こり,正常に起動しなくなることもあります)⁠

※)
電源断の保護機能が付いているSSDや,ジャーナリングファイルシステムを使用している場合は,この限りではありません。

ディスクレスのデメリット

一方,ディスクレスシステムではソフトウェアやデータなどの保存領域が限られることが懸念事項となります。ディスクレスの場合,圧縮した追加ソフトウェアやデータを図2のユーザエリア(2)に保存します。圧縮効率はデータによってまちまちですが,おおよそ領域の2~3倍程度の容量が保存可能です。つまり,100~150MB程度といったところになりますが,DNS/DHCPなどのインフラ系やWeb,Proxyなどのいずれかのサーバに加えてRuby/Perlといったインタプリタなど,実用的な構成が保存できます。用途を絞れば十分に利用可能です。

ただし,ログの蓄積には不向きなため,対策が必要です。フラッシュROMの領域に余裕があったとしても,フラッシュROMは書き込み速度が遅いため頻繁な書き換えには向きません。ログなどの蓄積が必要な場合には,別サーバへの転送を考える必要があるでしょう。

ディスクレスシステムの活用方法

ディスクレスシステムは特殊な運用が必要と思われるかもしれませんが,実際に使用する場合にはあまり気にすることはありません。フラッシュROMを操作するための専用のコマンドが用意されているので,それを適切なタイミングで実行すればよいだけです。システム構築は,通常のDebianの流儀のとおりに操作すれば問題ありません。専用コマンドについては,代表的な使い方を紹介したいと思います。

システム構築後の保存─⁠─その1

システムを構築し,環境ができあがってきたら,それをフラッシュROMに保存する必要があります。実行は図3のとおりです。このコマンドでは,/.rw全体を図2のユーザエリア(2)に保存したあと,/.rw/etcを図2のユーザエリア(1)に保存します。ユーザエリアの全領域に保存を行う場合,およそ6分30秒程度はかかります。書き込み速度が遅いデバイスなので,気長にお待ちください。

図3 フラッシュROMへの保存操作1

# flashcfg -S

FlashROM overwrites the current data.
Are you ok? [y|N] y
 
Archiving userland files... done (Approximately 0 MBytes)
Save files to FlashROM
*
done

Archiving /etc config files... done (Approximately 4 KBytes)
Save files to FlashROM
*
done

システム構築後の保存─⁠─その2

前項の保存操作のうち,/.rw/etcを図2のユーザエリア(1)に保存する操作のみを行う場合は図4のとおりに実行します。図3が大文字の「S」⁠図4が小文字の「s」であることに注意してください。

前述のとおり,フラッシュROMへの保存処理は非常に時間がかかります。フラッシュROMのしくみ上,変更差分だけを保存することはできません。毎回全領域を書き換えることになると,そのたびに6分30秒程度の時間がかかってしまいますので,これを避けるために,変更個所が/etc以下のみであるとわかっている場合は,小文字の「s」を利用することで比較的短時間に保存処理を完了させることができます。

図4 フラッシュROMへの保存操作2

# flashcfg -s

FlashROM overwrites the current data.
Are you ok? [y|N] y

Archiving /etc config files... done (Approximately 4 KBytes)
Save files to FlashROM
*
done

バックアップの方法

OpenBlocksシリーズは通常のサーバと異なり,OSのベース部分がフラッシュROM上のファームウェアに格納されたRAMディスクイメージで動作し,その後の変更差分が/.rw以下に集約されていくため,バックアップは非常に手軽です。ベースとなるファームウェアバージョンを記録し,その後は/.rw以下を定期的に保存しておけば,元の環境を簡単に復元できます。

実行方法は図5のとおりです。あらかじめボリュームラベルに「DEB_CONFIG」と設定し,ext4/ext3/vfatのいずれかでフォーマットしたUSBメモリなどのストレージを接続しておいてください。実行後はuserland.tgzという名前でファイルができあがります。

図5 バックアップ操作

# flashcfg -B
Archiving userland files... done

リストアの方法

前述のバックアップが済んでいれば,リストアは非常に手軽に実行できます。バックアップの保存先として利用したUSBメモリなどのストレージを接続し,電源をONにするだけです。起動処理の中でストレージを見つけ出し,/.rw以下に復元して起動してきます。このしくみを応用すれば,同じ設定のOpenBlocksを複数台構築することも容易です。

初期設定での起動

OpenBlocksは図2のとおり,/(ルート)領域はファームウェアに含まれるinitrdを展開して作成しています。initrdは,debootstrapコマンドで構築したDebianとしての必要最小限の環境が入っており,ユーザエリアをいくら書き換えようとも/(ルート)領域は不変のままです。つまり,通常はユーザエリアを展開することで環境を復元していますが,ユーザエリアの展開を行わなければ,いつでも初期設定で起動させることができます。

このようにユーザエリアの展開を抑制したい場合は,電源ONのタイミングで本体前面のINITスイッチを数秒間押し続けてください。また,このときにリストア機能を併用すれば,USBメモリを使って構築済みの環境を手軽に切り替えることもできます。

コメント

コメントの記入