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

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

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

＃powertopについては以下の辺りを参考に．

「BluetoothでLinuxマシンとAndroidを繋いで話が出来るようにした話」「台風で停電になって省電力の設定をした話」「ネットワークの設定が引き継がれなくて困ったので調べた話」 from Kenichiro MATOHARA

これで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を動かすという感じでした．

nilfs2 を試してみる – matoken’s meme -hatena-

バックアップに一番いいファイルシステムを頼む

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

最近の身の回りの電力事情

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

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

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

九州電力株式会社　停電情報

NILFS – Continuous Snapshotting Filesystem for Linux

GitHub – axkibe/lsyncd: Lsyncd (Live Syncing Daemon) synchronizes local directories with remote targets

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

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本用)の通信販売【上海問屋】 | 上海問屋を主に使っています．

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