停電中のファイルサーバデータアクセスを考える

昨日も停電が4,5回ありました……. 最近はNotePCで作業している(いまデスクトップがない……)ので影響は少ないのですが作業中以外のデータは大体ファイルサーバに置いています.ファイルサーバはAC必須.UPS経由で給電していますがそう長くは持ちません. でも停電中にファイルサーバの中のデータを参照したいということがあってどうにかできないかなーとちょっと考えてみました.

ファイルサーバのデータは今こんな感じです.

ファイルサーバ(RAID1) –> バックアップディスク(RAID1) –> バックアップディスク2(NILFS2)

#以前はAmazon Glacierとかにも投げてたけど金欠で今はやってない.

このバックアップディスク2は3TBの3.5インチHDDを安いUSB箱経由で接続しています.これに停電時でもアクセスできたら良さそうです.

停電時のNotePCはUSB2.0.バックアップディスク2を2.5インチHDDにリプレースすればUSB差し替え&暗号化Diskの鍵だけで良さそうです.でも3Tだと何本か必要だったり高かったりしそう. でも価格.comを見てみると3.5インチに比べれば高いものの案外安いです.3TBで15k〜て感じ.

3.5インチのUSBバスパワーで動くものは流石にないよなとダメ元で検索してみるとこういうものを発見.

これならケースを交換するだけで行けそうです. でも残念ながら終息品で売っているところが見当たりませんでした. 安く上がりそうだったのに残念.

とりあえず3.5インチHDDのUSBバスパワー対応ケースを探しつつデータを整理しようかと思います.

停電でバックアップが不安なのでlsyncdとNILFS2でバックアップ

先日の台風16号で09/19 23:00頃から09/22 12:45頃まで停電していました……. とりあえずサーバはシャットダウンしてThinkPad X200はバッテリが4本,X220は2本,モバイルバッテリは10000mA x3という感じで停電開始. とりあえず普通に使っていてもX200だけでも3営業日以上は耐えられるはずです.

でも一応NotePCは必須デバイス以外は取り外して輝度を下げてpowertopで省電力モードに.

#powertopについては以下の辺りを参考に.

これで1台ずつ使っていくことに.しかし,不安点がデータのバックアップ. 何時もはワークディレクトリはownCloudで自動バックアップ&デイリーでファイルサーバへのバックアップがされています.しかし停電時はサーバが動いてない&電池の切れたPCから別のPCに作業内容が移行できない.ということでlsyncdを使ってデータをUSBメモリにコピー&ファイルシステムはNILFS2にしてスナップショットも取得できるようにしました.

まずはUSBメモリの用意.普通にNILFS2で作ります.
/dev/sdzのパーティション情報を削除して全領域1パーティションで作成し,NILFS2で初期化して/mntにマウントしてユーザ,グループを自分のものにしています.

$ sudo wipefs -a /dev/sdz
$ sudo fdisk /dev/sdz
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (51-7821311, default 51):
Last sector, +sectors or +size{K,M,G,T,P} (51-7821311, default 7821311):

Created a new partition 1 of type 'Linux' and of size 3.7 GiB.

Command (m for help): w
$ sudo mkfs.nilfs2 /dev/sdz1
$ sudo mount /dev/sdz1 /mnt
$ sudo chown `id -u`.`id -g` /mnt
$ sudo chmod 700 /mnt

続いてlsyncdを実行してデータを同期します.lsyncdはinotifyをトリガーに任意のコマンドを実行したり出来ます.一般的にはrsyncでファイルの同期に使います.今回はアドホックにコマンドとして動かしました.同期元同期先はrsyncと同じ書き方だと思うので前もってrsync -avn from toみたいな感じで動作確認しておくと安心です.

$ lsyncd -log all -nodaemon -rsync /home/mk/ownCloud /mnt/ownCloud

これでlsyncdのターゲット以下のファイル,ディレクトリは自動的にUSBメモリにコピーされ,USBメモリの中では自動的にチェックポイントが作成される状態です. 作業の区切りのタイミングで明示的にスナップショットを取るようにしておくと更に安心です.(チェックポイント,スナップショットには何時でもその状態に巻き戻せる.但しチェックポイントは古いものから順に自動的に削除される.スナップショットは自動削除されない)

マシンを切り替えるときにはlsyncdを止めて念の為rsyncをdry runして同期状況を確認しておいて,新しいマシンでUSBメモリからSSDにrsyncしてlsyncdを動かすという感じでした.

関東在住時の計画停電のときは計画的だし時間もずれないしで案外困りませんでした(仕事は大変だったけど).でも念の為NotePCの大容量バッテリは買い増しして持ち歩いていました.(今回のバッテリの一つもそれ)
↓はその頃の発表スライド

ちなみに停電から14,5時間で携帯基地局のバッテリも尽きたようで完全にオフラインになってしまいました.NILFS2は大抵標準では導入されていないし手元ではGit管理もしているのでNILFS2は使わなくても良かったかなと後で思いました.

復旧時の残容量はNotePC が1.5本/モバイルバッテリが50% x2という感じ未だ行けるなという感じでした.でもネットワークが繋がっていたらもっと利用していたでしょう.

しかしこの辺は雷やら強風やらでよく停電になります.大抵は携帯基地局が落ちるまでには復旧するのですが,台風だと今回のように長い停電に.でも復旧状況を停電情報サイトで確認していると深夜にもステータスが変わっていて24時間体制で復旧してるのかと驚きました.九州電力の関係者のみなんさんありがとうございます_o_
(でも昼頃復旧->本日中->本日未明復旧とステータスがずれ込んでいくとはちょっとつらかったです……)

ついでに今回役にたったものを

  • PETZLのワイヤ式ヘッドライト
    手元のは初代かその次くらいの古いもので暗いけど便利でした.

  • モバイルバッテリー
    Cheerox2に秋葉原で買った謎バッテリーの3本を使っていました.基地局が落ちるまではスマホに給電.基地局が落ちてからはiPad/Kobo/Raspberry Piに給電していました.

  • Raspberry Pi B+ とAdafruit3.5インチ液晶
    USB稼働の液晶モニタもあるのですがバッテリ消費量的にこいつのほうが食わない感じなのでちっこいですがこれで作業したりも.でもNotePCのバッテリが切れなかったのでテスト程度.

    Adafruit PiTFT – 320×240 2.8 TFT+Touchscreen for Raspberry Pi ID: 1601 – $34.95 : Adafruit Industries, Unique & fun DIY electronics and kits

  • エネループ
    自己放電の少ない充電式乾電池です.自己放電が少ないので充電しておいておけば何時でも使えるのが良いです.電気をあまり食わないものはこいつで. ちなみに充電器は単三・単四 ニッケル水素充電池対応 放電機能 USB充電ポート搭載 充電器 (16本用)の通信販売【上海問屋】 | 上海問屋を主に使っています.

  • ユニフレームガスバーナー
    一般的なイワタニとかのタイプのカセットコンロガスが使える(非推奨)なガスバーナーです.山向けのガスやアルコールに比べて大分ランニングコストが安く付きます.低地のみならこれで十分.(手持ちのはゴトクの小さい恐らく古いモデルのものもっと安かったし)