2013年1月29日火曜日

OpenBlocksの動作モードについて

こんにちは。OpenBlocksファミリの開発・技術担当の木村です。

私は開発・技術担当ではありますが、お客様との直接お会いして製品の紹介をする機会も多くあり、よく説明を求められる内容として、RAMディスクモードとストレージ併用モードというOpenBlocks独自の仕組みがあります。今回はこの内容について、解説を行わせていただきたいと思います。

OpenBlocksでは、Debian GNU/Linuxを標準搭載するOpenBlocks 600D(販売終了済み)、A6、AX3において、RAMディスクモードとストレージ併用モードの二つの動作モードを用意しており、用途や要件に応じて使い分けが可能です。補足説明が必要と思われる用語については、本稿末尾に用意した用語解説や、以下サイトにて公開しているユーザーズガイドも併せてご参照下さい。

http://openblocks.plathome.co.jp/support/guide/


◆ RAMディスクモード

実行プログラムや設定が少量で済むインフラ系のサービスや静的なHTTPサービスを稼働させる場合に最適です。もとより高堅牢なハードウェアとなっているOpenBlocksですが、SSDのようなストレージを使用しないことでさらに故障要因を減らすことが出来ます。なお後述するとおりRAMディスクモードでで構築済みの環境を保存するには、容量の制限を考慮する必要がありますので、大容量の領域を必要とする用途にはストレージ併用モードがお勧めです。

RAMディスクモードでは、名称の通り起動後のユーザーランドをRAMディスクに構築して動作します。電源ONしFlashROMからロードしたファームウェアが実行されると、ファームウェアに含まれるinitrdのイメージのために128MB、稼働中の追加ソフトウェアやデータの置き場として384MBのtmpfs領域(/.rw)を確保してDebian GNU/Linuxの動作が始まります。





RAMディスクは高速なアクセスが可能であるため、書き換えが頻繁なテンポラリ領域として利用される事が多くありますが、不揮発性のメインメモリを利用しているという都合により、一度電源OFFしてしまうとデータが全て消えてしまうという特性があります。

通常ここに各種ソフトウェアを追加して、サービス提供するシステムを構築しようと考える方はあまりいらっしゃらないのでは無いかと思いますが、壊れにくさの追求を掲げているOpenBlocksでは、このRAMディスクを利用してシステムを構築可能にすることで、SSD等のストレージデバイスを利用しない、より高堅牢なシステムを実現できると考え、標準の機能として盛り込んでいます。

RAMディスクモードでは、initrd、tmpfsとこれらをunionfsで統合した3つのファイルシステムが大きな役割を果たしています。以下図を見ると一見複雑に見えると思いますが、unionfsによって複雑さは隠されており、利用する上では特に気になることは無いかと思います。



initrdには動作に必要な最小限のプログラムやライブラリなどの一式(debootstrapで構築した内容+α程度)が納められており、起動の度に同じ内容が展開されます。この環境には、たとえばless等の一般的なツールであっても、起動に不要なものはファームウェアサイズ削減のために含まれておりません。initrdの内容だけではサーバとして利用するためのソフトウェアが不足しておりますので、用途に合わせたソフトウェアの追加が必要となります。このための領域としてtmpfsが確保されており、利用者にはunionfsによって統合された姿が見えています。

利用者がDebian GNU/Linuxの一般的な操作で、ソフトウェアの追加や設定変更を行っていくと、tmpfsの領域にinitrdが提供するファイルシステムに対する変更差分(追加、変更、削除)が蓄積されていきます。

環境の保存

unionfsの存在によって、内部の仕組みは意識すること無く利用する事が出来ますが、変更差分が蓄積されたまま何も対処をせずに電源OFFすれば、せっかくセットアップした内容も次回起動時には消えてしまいます。

次回起動時にも変更差分を残しておくために、tmpfsの内容をFlashROMに保存するためのコマンド(/usr/sbin/flashcfg)を用意してあります。これを実行することで、tmpfsの内容(/.rw以下)を tar + gz で圧縮保存したデータをFlashROMの専用のエリアに保存します。OpenBlocks AX3は、約48MBの領域がありますが、圧縮の効果を考慮するとおよそ2~3倍程度のデータ量を保存することが出来ます。(AX3での構築例: lighttpd + php5によるWEBサーバやDNS/DHCP等の各種インフラ系サーバ)

なお構築した環境がFlashROMに収まるかどうかは、実際にtar+gzで圧縮保存してみないと分かりません。保存に失敗した場合は、保存対象のデータが削減出来ないかを精査して、再度保存を実行してみて下さい。

保存の内容を独自に調整したい場合は、/usr/sbin/flashcfg コマンドをカスタマイズして自分専用の保存コマンドを作成することも出来ます。bashスクリプトになっておりますので、カスタマイズは比較的手軽かと思います。(カスタマイズする場合でも、フォーマットはtar+gzにしておく必要があります)

環境の復元

flashcfgコマンドで保存したデータは、起動の度に自動的にtmpfs領域に展開されるため、利用する上で特に気にかける必要はありません。実際の処理は/etc/init.d/openblocks-setupが行っておりますので、興味がある方は一度ご覧下さい。

/.rwに変更差分が集約されることのメリット

バックアップと環境の復元が容易に行えます。ファームウェアによって、ベースとなるユーザランド(initrd)が提供され、それに対する変更差分は/.rwに集約されていますので、ファームウェアバージョンをそろえ、/.rwの内容をバックアップ・リストアすることで手軽に構築済み環境のコピーを作ることができます。

前述のflashcfgコマンドには、FlashROMへの保存の他にバックアップを実行する機能を備えており、USBメモリなどのストレージを用意して次のようなコマンドを実行するだけでバックアップが可能です。
    # mkfs -t ext3 -L DEB_CONFIG /dev/sdb1
    # flashcfg -B
ここで重要なのは、ボリュームラベルに「DEB_CONFIG」と設定することです。これによってバックアップ用のメディアを探し出して、変更差分を保存します。

RAMディスクモードでのリストアを想定している場合、次のように実行します。
    # mkfs -t ext3 -L DEB_CONFIG /dev/sdb1
    # flashcfg -B
    # mount LABEL=DEB_CONFIG /mnt
    # touch /mnt/FORCE
    # umount /mnt
リストア先として用意したOpenBlocksに、バックアップメディアを接続し、電源ONすればOKです。「touch /mnt/FORCE」の操作によって、FlashROMからの展開処理はスキップされ、バックアップメディアに保存されている変更差分を展開し環境を復元します。起動後はflashcfgコマンドによって、バックアップメディアから展開された変更差分をFlashROMに保存することで、構築済み環境をコピーしたことになります。バックアップの展開の他、init.shやpost-init.shというshスクリプトを用意すると、展開の前後で実行されますので、ファームウェアの書き換えなどの処理を追加することも出来ます。

RAMディスク領域を増やしたい

OpenBlocksファミリの中でもAX3の4ポート版はSO-DIMMソケットがあるため、大容量のメインメモリを活かすために、tmpfsの領域を増やしたいと問い合わせを時々受けます。あまりスマートな方法ではありませんが、次のよな操作で設定することが出来ます。
    # vi /etc/rc.local
    ~ コメント部 省略 ~
   
    mount -oremount,size=512m /.rw
   
    exit 0
   
    # sh /etc/rc.local
    (動作確認のため)
ただtmpfs領域が増えても、FlashROMのサイズは固定ですので、flashcfgで保存できる容量が増えるわけではありません。テンポラリ領域を増やすことが目的であれば/tmpだけをtmpfsにする方法も有用ですので、その場合は/etc/fstabにあるサンプル設定を基にお試し下さい。RAMディスク上で動作させたいプログラムを増やしたい場合には、FlashROMで収まらないものをSSDやその他ストレージから起動時に一度だけ読み出して展開する等のカスタマイズも考えられます。


 
◆ ストレージ併用モード

基本的な仕組みはRAMディスクモードと全く同じですが、tmpfsの代わりにラベルにDEBIANを設定したext4/ext3のストレージを利用して動作します。この条件のストレージを搭載して電源ONすることで、自動的にストレージ併用モードとして動き始めます。

RAMディスクモードとは違って、専用のコマンド(flashcfg)による保存操作が不要ですので、旧来のサーバになれている方にとっては、こちらの動作モードで触り始めていただくと戸惑いも無く触っていただけるかと思います。この動作モードでは、特別な操作をしなくてもデータは再起動後も残っていますので、ログの蓄積やDBサーバのように多量のデータをため込むような用途が向いています。

RAMディスクモードとの違いを以下にまとめます。

  • ソフトウェア追加の際に容量を気にする必要がありません
    特に小容量のSSDを搭載した場合を除き、通常の利用であれば容量を気にする必要は殆ど無くなるかと思います
     
  • メモリの空き領域を全てアプリケーション実行に利用する事が出来ます
    ただしinitrdが提供する128MBのRAMディスク領域は、ストレージ併用モードでも利用済みです
     
     
  • flashcfgコマンドによるFlashROMへの保存が不要です
    RAMディスクモードで唯一必要だった特別な操作が無くなり、IAサーバと変わらぬ操作で利用する事が出来ます 保存操作が不要になりますので、起動時に復元をすることも無くなります。RAMディスクモードでは、データベースのようにデータを蓄積するタイプの用途は不向きでしたが、ストレージ併用モードではこういった用途でも問題なく対応出来ます。


◆ まとめ

今回はRAMディスクモードを中心に、動作の仕組みを解説させていただきました。本記事が皆様のご理解の助けになれば幸いと思っています。今後もOBDNマガジンやマニュアルへの加筆等で情報公開を実施していきたいと思っておりますので、ご不明な点やさらに解説を希望される内容等、ご希望がございましたら是非OBDNマガジンへのコメント等でご連絡いただければ幸いです。




◆ 用語解説

  • ファームウェア
    Linuxカーネルとinitrdを結合したものです。出荷時からFlashROMに格納されており、更新バージョンがリリースされた場合は、apt-get upgradeによってファームウェアを含むDebianパッケージがダウンロードされ、FlashROMへの反映が行われます。
  • initrd
    Initial Ramdiskの略称です。従来は各種Linuxディスリビューションのインストーラで利用されており、カーネルを書き込んだFDとinitrdを書き込んだFDとして利用されたり、起動時にSCSI等のストレージデバイスのモジュールをロードする仕組みなどで利用されたいました。現在はinitramfsという別の手法が利用されており、initrdはあまり使われていないようです。
  • tmpfs
    Linuxで利用可能なファイルシステムの一種です。initrdはブロックデバイスとして扱われるため使うまでに初期化(mkfs)して使いたいファイルシステムの作成が必要ですが、tmpfsはオプションでメモリサイズを指定するだけで即座にファイルシステムとしてマウントできます。また指定したメモリサイズは、即座に割り当てがかかるわけではなく、実際に消費された分した割り当てされないため無駄なく利用出来ます。
  • unionfs
    複数のファイルシステムを透過的に重ねて、統合した結果を1つのファイルシステムとして見せることが出来ます。NFSにルートファイルシステムを構築して、ホームディレクトリのみをローカルストレージに保存する場合や、Live DVD等でユーザーデータをUSBメモリに保存する場合など、テンプレート化されリードオンリーで提供される共通のユーザーランドを、リードオンリーであることを意識させずに利用させるといった用途で利用されています。

2013年1月7日月曜日

[.tested] BGAN EXPLORER500 インマルサット衛星電話 [AX3][A6]

[.tested] BGAN EXPLORER500 インマルサット衛星電話 [AX3][A6]

インマルサットBGANサービス(Inmarsat BGAN : Broadband Global Area Network)は、BGAN衛星電話端末から、宇宙にある人工衛星へ 向けて、無線電波を発信することで、音声通話サービス、FAX通信、データ通信サービスを利用できる通信回線サービスです。
今回テストに使用したEXPLORER500は、最大492kbpsのパケットデータ通信と音声電話サービスをサポートする通信衛星モデムユニットであり、パケットデータ通信により、IP通信サービスによる衛星モデムベースのルータユニットとしても機能します。



仕様については、以下のページを参照してください。

BGANインマルサット衛星電話 ビーギャンエクスプローラー500


1. 外観/接続端子
本モデルは、完全な防水仕様ではないため、屋外に放置して使用することは出来ません。
(災害時には、ビニールの袋等で防水処理をして使用されているようです)

本体横には、PC等を接続するLANポート、およびUSBポート、ACアダプタ端子があります。
バッテリ駆動可能なモデルです。


上部にはLCD操作パネルおよび、方位計があり、本体のみで設置の設定が行えます。



2. 設置/設定
衛星モデムは、通信衛星の向きにユニットを固定する必要があります。
本体にはコンパスが内蔵されていますので、これにより方位を設定し、併せて仰角を設定します。
微調整は、発信音によりナビゲートされ、一連の設置操作は早ければ1~2分で終了します。
基本的に、南側が開けた場所へ設置しますが、窓ガラス内の場合、コーティングなどでGPSの電波の受信が出来ず通信が行えない場合があります。



このユニットは、設置設定が終わったあとは、一般的なWANルータと同じく、LAN内に接続したPCからIP網へのアクセスが可能になります。
ただし、衛星通信であることから、一般的には従量課金を選択していますので、PCからソフトウェア本体やデータのアップデートを行ってしまうと大量のデータパケットが流れてしまい、すぐに契約上限を超えてしまいます。
そのため、PCを接続する場合は、ソフトウェアのデータ更新や、メールのトラフィック等に注意し、安易なWebアクセスなどを行わないように十分に注意する必要があります。

USB端子にAX3およびA6を接続した場合は、USBシリアルデバイスとして認識されます。

usb 1-1: new full-speed USB device number 2 using ehci_marvell usb 1-1: New USB device found, idVendor=10fe, idProduct=0004 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1: Product: EXPLORER 500 usb 1-1: Manufacturer: Thrane & Thrane usb 1-1: SerialNumber: none cdc_acm 1-1:1.0: ttyACM0: USB ACM device cdc_acm 1-1:1.2: ttyACM1: USB ACM device usbcore: registered new interface driver cdc_acm cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

モデムデバイス名は以下の通りです。
crw-rw---- 1 root dialout 166,  0 Dec 21 16:03 ttyACM0 crw-rw---- 1 root dialout 166,  1 Dec 21 16:03 ttyACM1

minicomで atコマンドで コントロールすることが可能です。
(今回、相手先のプロバイダ情報がないため、pppdでの通信テストなどは行っていません)

root@obsax3:~# cat .minirc.dfl # Machine-generated file - use setup menu in minicom to change parameters. pu port /dev/ttyACM0 AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0 OK
3. IP通信について

今回、試験的にレンタルした端末の契約は、

100KB/80円

上り下りの帯域 128kbpsの 遅延 1400msの 回線を使用し、併せて、通信料の上限を設定しました。

IPアドレスはUK内のプロバイダからのものです。
衛星経由の遅延に関しては、1050 ms の遅延が発生していると考えられます。

MTUサイズは 1470 byets
スピードテストでは 上り下り共に約 128Kbps
となります。

社内からのtraceroute

# traceroute 161.30.22.220 traceroute to 161.30.22.220 (161.30.22.220), 64 hops max, 40 byte packets 1 192.168.10.1 (192.168.10.1) 2.106 ms 1.370 ms 0.852 ms 2 118.23.8.84 (118.23.8.84) 34.581 ms 25.215 ms 14.009 ms 3 118.23.7.161 (118.23.7.161) 14.532 ms 15.100 ms 12.847 ms 4 118.23.96.121 (118.23.96.121) 18.085 ms 18.293 ms 16.144 ms 5 60.37.55.85 (60.37.55.85) 13.862 ms 10.896 ms 9.821 ms 6 60.37.27.91 (60.37.27.91) 10.031 ms 60.37.27.155 (60.37.27.155) 14.856 ms 118.23.168.27 (118.23.168.27) 10.331 ms 7 ae-11.r21.tokyjp01.jp.bb.gin.ntt.net (129.250.12.201) 10.826 ms 16.582 ms 12.414 ms 8 ae-1.r25.tokyjp01.jp.bb.gin.ntt.net (129.250.2.73) 10.590 ms 15.223 ms 18.754 ms 9 as-2.r22.amstnl02.nl.bb.gin.ntt.net (129.250.3.78) 280.397 ms 278.798 ms 271.423 ms 10 peer76-01.ams2.ip.telecity.net (195.69.144.113) 279.727 ms * 277.857 ms 11 border76-01-ams2-te34.telecity.com (80.252.81.154) 278.301 ms 276.132 ms 278.984 ms 12 82.199.70.202 (82.199.70.202) 266.864 ms 275.349 ms 272.905 ms 13 * * * 14 161.30.16.34 (161.30.16.34) 337.590 ms 340.956 ms 345.253 ms
テスト機からの traceroute

# pathping 202.32.197.41 Tracing route to www.plathome.co.jp [202.32.197.41] over a maximum of 30 hops: 0 WindowsXP [192.168.0.4] 1 172.27.9.2 2 172.27.9.17 3 161.30.16.33 4 65.219.15.157 5 500.Serial2-10.GW1.HNL2.ALTER.NET [157.130.205.73] 6 0.so-7-0-0.XL1.HNL2.ALTER.NET [152.63.50.254] 7 0.so-5-0-2.XL3.SJC7.ALTER.NET [152.63.48.6] 8 POS6-0.GW2.SJC7.ALTER.NET [152.63.51.45] 9 iij-america-sjc-gw.customer.alter.net [152.179.48.2] 10 sjc002bf02.IIJ.Net [206.132.169.249] 11 tky001bf01.IIJ.Net [206.132.169.161] 12 tky009bb10.IIJ.Net [58.138.80.174] 13 tky009ipgw11.IIJ.Net [58.138.112.150] 14 tky009ip72.IIJ.Net [58.138.112.122] 15 202.232.12.102 16 dmzgw-global.plathome.co.jp [202.32.197.3] 17 www.plathome.co.jp [202.32.197.41] Computing statistics for 425 seconds... Source to Here This Node/Link Hop RTT Lost/Sent = Pct Lost/Sent = Pct Address 0 WindowsXP [192.168.0.4] 0/ 100 = 0% | 1 1300ms 0/ 100 = 0% 0/ 100 = 0% 172.27.9.2 0/ 100 = 0% | 2 1305ms 0/ 100 = 0% 0/ 100 = 0% 172.27.9.17 0/ 100 = 0% | 3 1306ms 0/ 100 = 0% 0/ 100 = 0% 161.30.16.33 0/ 100 = 0% | 4 1333ms 0/ 100 = 0% 0/ 100 = 0% 65.219.15.157 0/ 100 = 0% | 5 1299ms 0/ 100 = 0% 0/ 100 = 0% 500.Serial2-10.GW1.HNL2.ALTER.NET [157.130.205.73] 0/ 100 = 0% | 6 1333ms 0/ 100 = 0% 0/ 100 = 0% 0.so-7-0-0.XL1.HNL2.ALTER.NET [152.63.50.254] 0/ 100 = 0% | 7 1425ms 0/ 100 = 0% 0/ 100 = 0% 0.so-5-0-2.XL3.SJC7.ALTER.NET [152.63.48.6] 0/ 100 = 0% | 8 1361ms 0/ 100 = 0% 0/ 100 = 0% POS6-0.GW2.SJC7.ALTER.NET [152.63.51.45] 0/ 100 = 0% | 9 1405ms 0/ 100 = 0% 0/ 100 = 0% iij-america-sjc-gw.customer.alter.net [152.179.48.2] 0/ 100 = 0% | 10 1380ms 0/ 100 = 0% 0/ 100 = 0% sjc002bf02.IIJ.Net [206.132.169.249] 0/ 100 = 0% | 11 1479ms 0/ 100 = 0% 0/ 100 = 0% tky001bf01.IIJ.Net [206.132.169.161] 0/ 100 = 0% | 12 1504ms 0/ 100 = 0% 0/ 100 = 0% tky009bb10.IIJ.Net [58.138.80.174] 0/ 100 = 0% | 13 1472ms 0/ 100 = 0% 0/ 100 = 0% tky009ipgw11.IIJ.Net [58.138.112.150] 0/ 100 = 0% | 14 1455ms 0/ 100 = 0% 0/ 100 = 0% tky009ip72.IIJ.Net [58.138.112.122] 0/ 100 = 0% | 15 1469ms 0/ 100 = 0% 0/ 100 = 0% 202.232.12.102 0/ 100 = 0% | 16 --- 100/ 100 =100% 100/ 100 =100% dmzgw-global.plathome.co.jp [202.32.197.3] 0/ 100 = 0% | 17 1443ms 0/ 100 = 0% 0/ 100 = 0% www.plathome.co.jp [202.32.197.41] Trace complete.

MTUサイズ  1470bytesと 確認

# ping -f -l 1472 -n 1 202.32.197.41 Pinging 202.32.197.41 with 1472 bytes of data: Request timed out. Ping statistics for 202.32.197.41: Packets: Sent = 1, Received = 0, Lost = 1 (100% loss), # ping -f -l 1470 -n 1 202.32.197.41 Pinging 202.32.197.41 with 1470 bytes of data: Reply from 202.32.197.41: bytes=1470 time=2642ms TTL=48 Ping statistics for 202.32.197.41: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 2642ms, Maximum = 2642ms, Average = 2642ms

スピードテストは、
通信速度測定システム

 Radish Network Speed Testing 東京

を使用しました。結果は以下の通りです。

下り回線      速度  131.8kbps (16.47kByte/sec)      測定品質  77.5 
上り回線      速度  154.1kbps (19.26kByte/sec)      測定品質  74.4 

4. まとめ
今回は、BGAN EXPLORER500によるデータ通信について、その取り回しや遅延などについての検証を行いました。
衛星通信に限らず、3G/2G回線においてもM2Mに於いては通信量の把握は重要な事項であり、OpenBlocksの様なgatewayサーバによりデータの処理やコントロールを行いたいという問い合わせも増えています。