停電時の自動シャットダウン のバックアップソース(No.1)

更新

[[公開メモ]]

#contents

* 目的 [#n3da932b]

** USP の必要性 [#u25aa8bd]

WindowsXP で動いているファイルサーバーマシンがあり、
その筐体内にRAIDを組んだHDDが複数台積まれています。

RAIDはHDDの物理的な故障からデータを守るために組んでいる
物で、ある一台が急に動かなくなると言うような故障が生じても
データが失われる事はないのですが、一方で論理的な故障には
めっぽう弱いという特徴があります。

例えば停電やブレーカーが落ちるなどの原因で、データの書き込み
途中にPCの電源が落ちると、その他の部分も含めて、HDD内の
データがまるごと失われてしまうような危険性があります。

そこで、無停電電源装置(UPS)を購入してデータを守る事に
しました。

** 安全な電源断 [#p586a81a]

UPSは中にバッテリーを持っています。

通電時にこのバッテリーを充電しておき、停電時にはバッテリーから
PCへ電力を供給することで、いきなりPCの電源が落ちるという
不幸を避けることができます。

このUPSのバッテリーが空になるまでの時間を使って
PCを安全にシャットダウンしたいというのが今回の目的です。


* 状況 [#o265b7be]

- ユタカ電機製作所のUPS:[[UPSmini500>http://www.yutakadenki.jp/products/103_upsmini.html]] YEUP-051MA
-- 最大電力 300W で 5 分間の動作が可能
-- 90W なら1時間くらいまでOK
-- RS-232c ポートを利用して停電/通電および低バッテリーを通知する機能を持つ
- Linux マシンとWindowsXP マシンが一台ずつ繋がっている
-- 基本的にどちらもサーバー用途で常時通電
-- Linux マシン:Atom を使った省電力サーバー 〜 60W (シリアルポートを持つ)
-- WindowsXP マシン:ファイルサーバー 〜 110W (シリアルポートを持たない)
- LAN用のハブもUPSに繋がっている 〜 10W ?

 +--------+
 |  UPS   | - - +
 +--------+     :  似非 RS-232c ケーブル
   | 電 |       :
   | 源 |       :
   | ケ |     +---------+
   | ー +-----|  Linux  |
   | ブ       +---------+
   | ル         : LAN
   |            :
   +----------[hub]
   |            :
   |          +---------+
   +----------|  WinXP  |
              +---------+

* 期待する動作 [#ydaf5f86]

Linux マシンでUPS状態を常時監視

停電したらすぐに
- WinXP マシンをシャットダウン

さらに、バッテリー残量が10%を切ったら
- Linux マシンもシャットダウン

電源が復帰したら
- WinXP・Linux とも電源ON

* Linux マシンでUPS状態を常時監視する [#r2042756]

[[ユタカ電機でソフトウェアを配布している>http://www.yutakadenki.jp/support/downloadfile/linux/f_linux.htm]] ので、これを使う。

ちなみに、Linux のディストリビューションは Debian (lenny)

Language:shell
 # mkdir yec
 # cd yec
 # wget http://www.yutakadenki.jp/support/downloadfile/linux/yec.tgz
 # tar fxz yec.tgz
 # ls
 usvd-2.0.1  yec.tgz
 # cd usvd-2.0.1/
 # which g++
 /usr/bin/g++
 # make
 gcc -Wall   -c -o usvd.o usvd.c
 gcc   usvd.o   -o usvd
 gcc -Wall   -c -o usv_off.o usv_off.c
 gcc   usv_off.o   -o usv_off
 # ls
 COPYING   README  etc         usv_off    usv_off.o  usvd.c    usvd.o
 Makefile  doc     readme.ecn  usv_off.c  usvd       usvd.lsm
 # cp usvd usv_off /usr/local/sbin/
 # cd /etc

Counter: 19201 (from 2010/06/03), today: 1, yesterday: 0