カスタマイズ前の注意と補足
OpenBlocksシリーズはOSとしてDebian GNU/Linuxを採用した汎用サーバー製品です。
ハードウェア特性を活かす為のカスタマイズを行っていますが、本カスタマイズ以外は、Debianやその他Linuxの一般的な操作方法で利用できます。
しかしながら、パソコンの様に書き込み耐久のあるストレージ上でシステムを組むわけではないので、以下の様な注意点への考慮が必要です。
その他、カスタマイズにおける補足などを解説します。
SSDベースシステム開発における注意
近年、フラッシュメモリーのコストダウンによってスマートフォンを始めノートPCや様々な機器では、従来のハードディスクに代わってSSDが採用されています。
また、本製品に使用されているeMMCはSSDの一種です。
SSDはランダムアクセス性能が高速であり、かつ、ソリッドステートである利点からメカニカルな障害耐性や環境性能が非常に良くなりますが、その反面、ハードディスクに比べてデータの書き換え制限が大幅に少なくなります。
SSDには大きく分けるとSLCとMLCにわかれ、書き換え性能が数万回のSLCタイプが数ギガの容量帯では主流でしたが、マルチビットセルで書き換え回数千回程度の低コストのTLCが大容量化を実現し、スマートフォンやPCに多く使われるようになっています。
現在ではSLCやMLCのSSDは徐々に姿を消し始めています。
当社マイクロサーバー製品のオプションでもSLC製品は一部だけ小容量帯で残すのみです。
ゆえにMLCのSSD搭載でのマイクロサーバー運用が大変多くなります。
TLCでは概ね数百から1000回程度の書き換え性能があり、1000回を超えた辺りからビットエラーが発生し始めますがECCエラー回復します。
しかし、そのECC回復可能な条件を超えるとリードエラーを発生します。
ゆえにこの状況に追い込まないようなシステム作りが必要になります。
セルあたりの書き換え数とフラッシュメモリーのブロックサイズ
セルあたり1000回と言っても、SSDに対する書き込みが1バイトでも1回は1回となります。
最近のフラッシュメモリーは少ないアドレス線で大容量をサポートするため512KB(仮)くらいの大きなブロックで読み書きされます。
つまり、書き込みにおいて1バイト書いても512KB書いても書き換えは1回なのです。
ゆえにSSDへの書き込みは、小さなデータサイズで細かくよりも、なるべくバッファに多くデータを貯めこんで大きなデータサイズで一気に書く方がSSDに対する書き込み回数を最小限にすることが出来ます。
ウェアレベリング機能
SSDは書き換え制限が少ないため、同じブロックアドレスを何回も書き換える動作に対して、同一の実ブロックアドレスへの書き換えを集中させないように平均化しています。
これはブロックアドレスを仮想化して実現しています。
OSはSSDに対して使っているブロックと使われていないブロックを通知しておりSSDは次に書き込みがあった場合、一番書き換え数の少ないブロックをその書き込みのために準備しています。
これによって結果的に書き換え数が平均化されます。
スタティックウェアレベリング
従来のウェアレベリングの場合、使われている領域でかつほとんど書き換えのないデータが例えば50%あった場合、OSのインストール時から1回だけ書かれたブロックが50%を占めます。
その部分がほぼ新品のまま、再利用されている残りの50%の領域がどんどん書き換えられてしまい、全体で平均化した場合よりも2倍早くSSDの寿命が来てしまいます。
この対策に考えられたのがスタティックウェアレベリングで、ほとんど書き換えられていないブロックのデータを再利用の多いブロックに移動し、ほぼ新品のままだったブロックを再利用領域にあてがいます。
これにより、50%ほぼ書き換えのないブロックがあっても、ほぼSSDの寿命をまっとうできます。
SSDの全体の書き換え回数を想定する
例えば4GBのSSDで512KBブロックタイプであった場合、セルあたり1000回の書き換えできるとして512KB以下のデータを書いた場合、SSDの総書き換え回数を想定すると以下の様になります。
4294967296B ÷ 524288 = 8192 (4GB ÷ 512KB)
物理ブロック数は8192個あることになります。
それぞれが1000回書き換えられるとしたら
8192 × 1000 = 8192000 回
つまり1回ずつ1バイトのデータを書くとたったの8.192MB書くと寿命がつきてしまいます。
(実際にはこういった書き込みはSSD側で効率化してます)
なるべく大きなSSDを使用する
例えば前記の4GBのSSDでは8192個のブロックが存在しますが、8GBならその2倍の16384個のブロックが存在するので書き換え回数が単純に2倍になります。
SSDが同じブロックサイズならサイズに応じて単純に比例して書き換え回数がアップするわけです。
ゆえに可能な限りサイズの大きいSSDを利用すれば書き換え回数によるトラブルへの耐性が上がっていくわけです。
tmpfsの利用でSSD書き込みを軽減する
Linuxシステムの場合、何の考慮もしないでシステム開発すると、ストレージは無限に使えるデバイスとしての前提で利用されてしまいます。
データ保存の必要もなくともストレージ領域をワーキングのためのバッファとして普通に使われてしまいます。
こういった事でSSDの寿命を縮める事の無いように、ワーキング処理に必要なストレージはなるべくtmpfsに配置する様、考慮してシステムを設計して行きます。
また、オープンソースのソフトウェアでも、自分用に確保したストレージ領域をテンポラリーとして利用するケースも多く、この場合は、そのファイルをtmpfsの領域にリンクを張って対処します。
ログ
Linuxシステムでは何事においてもストレージにログを残す事が一般的ですが非常に細かくログを残すプロセスがある場合が、一度tmpfsに書かせてから定期的にまとめてログをSSDに移すなどの工夫が必要です。
こういった対策では、突然の電源断には対応出来ませんが、この点はトレードオフしてあきらめるか、例えばUPS対策されたシスログサーバーにログを送信するかそう言った考慮を検討する必要があります。
モバイル回線用SIMについて
OpenBlocksシリーズにて、搭載可能なSIM形状は一部の型番の物を除きmini-SIM(2FF)です。
mini-SIM対応モデルにてmicro-SIM及びnano-SIMを使用する場合には、脱落防止フィルム有及び接着テープ有でSIMを固定できるアダプタを使用して下さい。なお、SIMアダプタを使用した場合でのSIMスロットの破損は有償修理対象となります為、ご注意下さい。
eMMCストレージパーティション情報
本装置に使用されているeMMCのパーティション情報は以下となります。
OpenBlocks IoT VX2の場合
番号 | format | サイズ | OBS用途 | デバイス名 |
---|---|---|---|---|
1 | fat16 | 1.5GB | Boot | mmcblk2p1 |
2 | ext4 | 30.5GB | Primary | mmcblk2p2 |
info
- 通常ではeMMCを/dev/mmcblk2として認識しますが、稀に/dev/mmcblk1等の別番号として認識する場合があります。
/dev/mmcblk1の場合、"/dev/mmcblk2p1"及び"/dev/mmcblk2p2"を"/dev/mmcblk1p1"及び"/dev/mmcblk1p2"へと読み替えてください。
(番号は kernel の mmcドライバ が認識した順番により自動で割り振りされるものですので、障害ではありません。)
OpenBlocks IX9(eMMCブート)の場合
番号 | format | サイズ | OBS用途 | デバイス名 |
---|---|---|---|---|
1 | fat16 | 1.5GB | Boot | mmcblk1p1 |
2 | ext4 | 6.2GB | Primary | mmcblk1p2 |
info
- 通常ではeMMCを/dev/mmcblk1として認識しますが、稀に/dev/mmcblk0等の別番号として認識する場合があります。
/dev/mmcblk0として認識した場合、"/dev/mmcblk1p1"及び"/dev/mmcblk1p2"を"/dev/mmcblk0p1"及び"/dev/mmcblk0p2"へと読み替えてください。
(番号は kernel の mmcドライバ が認識した順番により自動で割り振りされるものですので、障害ではありません。)
OpenBlocks IX9(SSDブート)の場合
番号 | format | サイズ | OBS用途 | デバイス名 |
---|---|---|---|---|
1 | fat16 | 1.5GB | Boot | sda1 |
2 | ext4 | 120GB | Primary | sda2 |
info
sda2のサイズについては搭載ストレージ量に依存しており、搭載品によって異なることがあります。
OpenBlocks IoT BX及びEXシリーズの場合
番号 | format | サイズ | OBS用途 | デバイス名 |
---|---|---|---|---|
1 | 1MB | 通常起動用u-boot | mmcblk0p1 | |
2 | 2MB | 通常起動用u-boot環境変数 | mmcblk0p2 | |
3 | 1MB | 非常時起動用u-boot | mmcblk0p3 | |
4 | 2MB | 非常時起動用u-boot環境変数 | mmcblk0p4 | |
5 | ext2 | 1MB | シリアル番号、MACアドレス等 | mmcblk0p5 |
6 | 1MB | カーネルパニックメッセージ保存用 | mmcblk0p6 | |
7 | fat16 | 210MB | 通常起動用FW用 | mmcblk0p7 |
8 | ext4 | 105MB | バックアップ領域 | mmcblk0p8 |
9 | fat16 | 210MB | リカバリー起動用FW用 | mmcblk0p9 |
10 | ext4 | 3351MB | Primary | mmcblk0p10 |
OpenBlocks IoT FX1の場合
番号 | format | サイズ | OBS用途 | デバイス名 |
---|---|---|---|---|
0 | 384KiB | u-boot,u-boot環境変数用 | ||
1 | fat32 | 512MiB | Boot | mmcblk2p1 |
2 | ext4 | 30.5GB | Primary | mmcblk2p2 |
OpenBlocks IoT FX1/E及びOpenBlocks IoT DX1の場合
番号 | format | サイズ | OBS用途 | デバイス名 |
---|---|---|---|---|
0 | 384KiB | u-boot,u-boot環境変数用 | ||
1 | fat32 | 512MiB | Boot | mmcblk2p1 |
2 | ext4 | 7.5GB | Primary | mmcblk2p2 |
ストレージモード
基本的なユーザーランドデータをeMMCまたはSSDから参照し動作を行います。
不意な電源断が起こった場合、物理ストレージ上のファイルが破損する恐れがありますが、Docker等のアプリケーション側ではunionfsでストレージ上のデータ参照を行いますのでトラブルなく稼働が行えます。
突然の電源断によるファイル破損は、主に書き込み中のファイルが対象となります。
そのため、基本システムへの影響は発生しにくいよう書き込むファイルはログファイル程度に抑えるかファイルクローズをマメに行う事を推奨いたします。
caution
ファイルを開けっ放しでのアプリケーション動作は、電源断障害が起こるとファイルオープン前の状態にロールバックします。
最悪のケースではファイル消失します。
mountコマンドの実行結果
パソコンとOpenBlocksの接続
OpenBlocksとPCを付属のUSBケーブルを用いて接続します。
Windows PCの場合、USBポートに接続されると自動的にUSBシリアルドライバがインストールされます。
※WindowsPCがインターネット環境にあることが前提です。
ドライバのインストールが完了したら、TeraTermやPuTTYなどのターミナルソフトでシリアルポート接続が可能となります。
なお、OpenBlocksのシリアルポートのデフォルト通信パラメータは以下の通りです。
通信が確立後、起動が完了するとログインプロンプトが表示されます。デフォルトのroot権限でログイン操作を開始して下さい。
WEB-UIとの連携
本システムには基本的なシステム設定が行えるようにWEB-UIを搭載しています。
ネットワーク設定やモバイル回線の制御等は、WEB-UIから実施して下さい。
また、WEB-UIから各種機能の追加等が行えますので、基本的な使用方法等についてはスタートアップガイドを参照して下さい。追加した機能については各種機能のマニュアルを参照して下さい。
スクリプト処理における遅延処理
Linuxシステムではファイルの書き込みと実ストレージへの反映は非同期となっています。
スクリプト等においての書き込み処理を行った場合、書き込み完了前に次のコマンド処理へと実施される場合があります。
そのため、明示的にsleep及びsyncコマンド等を実施して下さい。
使用ポート一覧
WEB-UI込みでのOpenBlocksシリーズでは以下のポートを使用及び使用する可能性があります。
サービス種類 | ポート番号 | 補足 |
---|---|---|
FTP | 21 | FTPインストール時 |
SSH | 22 | ポート番号変更可能 |
DNS | 53 | |
DHCP | 67 | |
NTP | 123 | |
NetBIOS | 137 | Sambaインストール時(UDP) |
NetBIOS | 138 | Sambaインストール時(UDP) |
NetBIOS | 139 | Sambaインストール時 |
Samba | 445 | Sambaインストール時 |
Modbus | 502 | IoTデータ制御インストール時 |
WEB-UI(HTTPアクセス) | 880 | |
ECHONET | 3610 | IoTデータ制御/HVSMC使用時 |
Node-RED | 1880 | Node-REDインストール時 (ポート番号変更可能) |
WEB SSH | 4200 | |
WEB-UI(HTTPSアクセス) | 4430 | |
SSH | 50022 | LTE/3Gモジュール(ソフトバンク) / WAN側のみ |
WEB-UI(HTTPアクセス) | 50880 | LTE/3Gモジュール(ソフトバンク) / WAN側のみ |
WEB-UI(HTTPSアクセス) | 54430 | LTE/3Gモジュール(ソフトバンク) / WAN側のみ |
WEB-UI独自サービス | 63003 |
IX9シリーズのMiniDisplayPortについて
OpenBlocks IX9にはX Window Systemはインストールされていません。
そのため、MiniDisplayPortからの出力内容はコンソール画面のみとなります。
MiniDisplayPortにてデスクトップ環境を使用したい場合には、taskselコマンドにてデスクトップ環境のインストールを行って下さい。
なお、デスクトップ環境のインストールにて約1GB程度のストレージを消費します。
そのため、ストレージに空き容量が十分に存在することを確認して下さい。
モデムデッドロック時
WEB-UIはモバイル回線のモデムを制御しています。
モデムデッドロック時にリセットも受け付けずに他に復旧方法が無い場合、最終の手段としてOSの再起動を行う場合があります。
LTE/3Gモジュール(ソフトバンク)運用時のアクセス
LTE/3Gモジュール(ソフトバンク)を運用している場合において、LTE回線側にグローバルIPアドレスが付与される場合には、グローバルIPアドレスと以下のポート番号の関係から各種サービスが使用できます。
※フィルター許可で開放している必要がありますので解放時にはご注意下さい。
この場合、再起動後もフィルター解放が適用されている必要があります。
※グローバルIPアドレスが固定出でい場合はDDNSサービスを用いることができます。
サービス種類 | ポート番号 | 補足 |
---|---|---|
SSH | 50022 | |
WEB-UI(HTTPアクセス) | 50880 | ブラウザでのアクセスとなります。 |
WEB-UI(HTTPSアクセス) | 54430 | ブラウザでのアクセスとなります。 |
GRUBメニュー表示方法について
OpenBlocks IX9及びOpenBlocks IoT VX2では、起動時にシリアルポートにGRUBメニューが表示されます。
そのため、GRUBメニューの確認等を行いたい場合は、下図のようにシリアルコンソール接続にて作業を行って下さい。
Windows PCの場合、USBポートに接続されると自動的にUSBシリアルドライバがインストールされます。
※WindowsPCがインターネット環境にある場合です。
ドライバのインストールが完了したら、TeraTermやPuTTYなどのターミナルソフトでシリアルポート接続が可能となります。
OpenBlocksのシリアルポートのデフォルト通信パラメータは以下の通りです。
項目 | 値 |
---|---|
通信速度 | 115200bps |
データ長 | 8bit |
パリティ | 無し |
ストップ | 1bit |
自動外部ストレージマウント機能
WEB-UIにおいて特定のボリュームラベルの付いたデバイスが見つかった場合、自動でマウントされます。
WEB-UIの機能等で保存先管理等を行う場合にご使用下さい。
ボリュームラベル | マウント先 | 備考 |
---|---|---|
WEBUI_STORAGE | /var/tmp/storage | ファイルシステムはNTFSのみをご利用いただけます。 |
SMS送信(コマンドライン)
WEB-UIを用いておりモデムモジュール(LTEモジュール(KDDI)を除く)が搭載されSMS送信可能なSIMが挿入されている場合、コマンドライン上からSMSを送信することが出来ます。
以下のコマンドにより、SMSデータの雛形を作成します。
雛形データを作成後、自動で送信されます。
LTEモジュール(NTTドコモ)のモデルの場合 / 実行方法
LTEモジュール(NTTドコモ)のモデルの場合 / 実行サンプル
LTEモジュール(NTTドコモ)以外のモデル / 実行方法
LTEモジュール(NTTドコモ)以外のモデル / 実行サンプル
LTEモジュール(KDDI)運用切り替え
LTEモジュール(KDDI)はモジュール自体がSIMになる機能を持っています。以下のコマンドにより、モジュール自体がSIMの機能となる内部SIMモード及び挿入されているSIMを参照する外部SIMモードの切り替えが可能です。
内部SIMモードへの切替コマンド
外部SIMモードへの切替コマンド
ブートモード切替
OpenBlocks IoT VXシリーズ及びOpenBlocks IX9ではメンテナンス⇒ブートモード切替タブから次回起動時のブートモードを設定することができます。
通常出荷状態では選択可能なブートモードは1つのみとなっています。
/dev/mmcblk0p1パーティション内の/EFI/boot/bootx64.confファイル部の一部を書き換えることによって、この部分に表示することができますが、選択可能なブートモードでは工場出荷状態へ戻す等の実運用では危険な内容が含まれています。
そのため、内容を判断の上表示追加等を行って下さい。
info
OpenBlocks IX9のSSDブート時は/dev/sda1パーティション内の/EFI/boot/bootx64.confとなります。
DHCPにおけるDGW、DNSについて
OpenBlocksシリーズのWEB-UI機能にて、使用するネットワークインターフェースのIPアドレス取得設定にてDHCPを設定している場合、DGW(デフォルトゲートウェイ)及びDNS(DNSサーバー)情報はDHCPで設定された情報が反映されます。
そのため、通常ではDHCPサーバー側にてデフォルトゲートウェイ及びDNSサーバー情報が設定されている為問題ありません。
しかしセキュリティの関係上、デフォルトゲートウェイまたはDNSサーバー情報を配布しないDHCPサーバーのネットワークを運用しているケースがあります。
この場合、以下のファイルを対象フォーマットで用意することでDHCP環境において強制的にデフォルトゲートウェイ及びDNSサーバーを設定することができます。
なお、上記における強制的に付与するデフォルトゲートウェイはDHCPにおけるIP付与時に設定されます。
また、DNSサーバー設定に関してはローカルネットワークのインターフェースのUp時(DHCP)に適用されます。