2016年4月6日水曜日

Raspberry Piで思い出す🤔ネットワークは接続が保障されない技術

Raspberry Pi 2 Model Bが我が家にやってきてから、何かとLinux色が強くなってる今日このごろ。
そんな環境を使っていて忘れていた肝心な事を思い出しました。
今回はそんな話を書きたいと思います。
事の発端はWebDAV
Raspberry Piで使えるOSの1つであるRaspbianは、WebDAVがマウント出来るようになるdavfs2パッケージのインストールが可能です。
私は、これを使ってインターネット上のストレージサービスBOXをマウント。
これによってRaspberry PiをSDカード 64GBBOX 50GBという環境で使っています。
(現在BOXの個人向け無料プランは現在10GBとなっています。)

再起動をかける事がシバシバあるRaspberry Pi。
davfs2でWebDAVを手動マウントするとその度に解除されてしまうため、fstabの設定を使い起動時にマウントするようにしました。

しかし、それが誤ちだった事に気が付きました。
ブレーカーが落ちる事故
我が家のRaspberry Piの置き場所はダイニングキッチン。
生活をしていく上で必要とされる衣食住の食をツカサどる大切な生活空間です。
ここに置かれている理由は、この場所の温度湿度気圧を測定しているのが1つ。
もう1つは、電話回線を引き込むジャックがココにあるためネットワーク主要機器があり、安定した通信が得られる有線でかつ、コレが基本であるRaspberry Pi 2に都合が良かったからです。

現代のキッチン用品はとにかく電化製品が多いです。
  • 冷蔵庫
  • 電子レンジ
  • 食器洗い乾燥機
  • 電気ケトル
  • オーブントースター
  • コーヒーメーカー
  • エスプレッソマシン
これだけのモノが我が家のキッチンにはあります。
さらに、我が家のブレーカー事情は厄介で、脱衣所とキッチンの分岐ブレーカー(大元の主管ブレーカーとは別に付けられた小さいブレーカー)がセットで1つなのです。
この分岐ブレーカー、20Aという容量なため電化製品を幾つか動かすとすぐに落ちてしまいます。
ブレーカーが落ちてRaspberry Piがシャットダウンする事なく電源が切れます。
コレによって何度かOS Raspbianがカーネルパニックが起き、起動不能に陥った事がありました。
幸いな事にこのブログを書くキッカケとなった電源切れの時はカーネルパニックは起きなかったものの、忘れかけていた事を思い出させてくれました。
バックアップ失敗
システムチェックのため定期的に行っているバックアップを臨時で行いました。すると失敗。
原因は起動時にマウントされてるはずのWebDAVでした。
ブレーカーが落ちて停電後、ブレーカーを戻して電気が流れると再起動します。
本来ならfstabの設定でこの時にマウントされるはずなのですが、今回に限ってマウントされていません。

なぜ?
早すぎたRaspberry Pi
ダイニングキッチンのブレーカーが落ちるとRaspberry Piだけでなくネットワーク主要機器も落ちます。
ブレーカーを復帰させる事でこれらすべてが再起動するのですが、この時に真っ先に起動したのがRaspberry Pi。
その後にネットワーク主要機器が再起動しました。

インターネットに接続できない状態でRaspberry Piが起動してしまうと、マウントされるはずのBOXがマウント出来ません。
その結果、バックアップに失敗しました。
接続保障ないモノは起動時自動マウントしてはいけない
Linuxには様々なモノをストレージ化してマウントする事が出来ます。
今回紹介したWebDAV以外にも、WindowsでおなじみのSMBやFTPなども可能です。
ただ、今回のように起動時にネットワークが必ず接続出来るとは限りません。
インターネットと接続する機器の問題だけではなく、そこから先の経路で障害が起きていたり、大元のサーバーで障害が起きていたり。
そういう事態を考えると、起動時に自動マウントする設定は行わないほうが良いでしょう。
理想のマウント方法と使い方
3つの手順が必ず必要です。
  1. 使用したいストレージが既にマウントされていないか確認
  2. マウントされていない場合はマウントする
  3. マウント出来なかった場合を想定する
今回はネットワークを経由したストレージを題材に書きましたが、場合によってはUSBのようなホットプラグ対応デバイスも対象となります。
Raspberry Piの特殊事情
Raspberry Piは、ストレージが接続出来るI/Fが標準でSDカードスロットとUSBのみ。どちらもホットプラグ対応デバイスです。
SDカードスロットは、SoCの作りの関係で起動ドライブとして決め打ちされているためどうしようもありません。
また、USBも手軽に増設可能なI/Fがコレしかないため、ストレージメーカーもこれを前提としたRaspberry Pi向け製品をリリースしています。
Linuxは、これらストレージにUUIDを割り当てて機器を特定し、マウント時に固定化できる仕組みがあります。
これを使い今回のWebDAVのように起動時に自動マウントして固定ストレージとして使う事があります。
しかし、起動時にUSB接続機器のUUIDの認識が遅れてマウント出来ない不具合が出るケースがあり、やはりそういう使用を想定していないようです。
ネットワークは接続保障されない技術
ネットワークは接続保障がありません。
マウントしてOS標準実装された操作で使う事は、汎用性・利便性の面でとても有利です。
しかし、経路障害やサーバー故障、システムのアップデートや定期メンテ等、様々な事情で止まります。
接続性の高い機器同様に解説される事が多いですが、接続保障のないネットワークだという事を念頭にシステム開発したいものです。