雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2014-08-13 [長年日記]

APC Smart-UPS+apcupsdで復電後にサーバが再起動しない問題について

`flat`
;2014/09/12
:UPSのModbus有効化手順に抜けがあったので追記

最近購入した、前面が液晶画面になっているSmart-UPS 750/500で、停電してシャットダウンした後に復電してもサーバが起動しない問題に遭遇。UPSのファームウェアとapcupsdを最新のものにする事で解決しました。

まず、問題のあった時点でのapcupsdとファームウェアのバージョンは以下の通りです。

% apcaccess
  :
VERSION  : 3.14.10 (13 September 2011) freebsd
  :
FIRMWARE : UPS 08.8 / ID=18

この組み合わせでは、

  • apcupsdによる監視はでき、停電時のシャットダウンまでは問題ない
  • シャットダウン後、通常ならUPSの電源が切れて給電が止まるはずが、そのまま稼働し続ける
  • 結果、復電してもサーバが再起動しない

という状況でした。

ただ、apctestコマンドから"Test kill UPS power"を試すとちゃんとUPSの電源は落ちます。UPSにkill信号を送る前にapcupsdが強制終了しているのではないかなどと考え、rcスクリプトをいじったりしてみましたが、状況は変わらず。

さて困ったなと思って、apcupsdの公式サイトを見ると、3.14.11のリリースノートに、"MODBUS protocol support"という記述があり、UPS側のファームウェア更新が必要だが、シリアルケーブルでの監視にも対応したとあったので、これを試す事に。

まず、 http://www.schneider-electric.us/support/index?page=content&country=ITB&lang=EN&id=FA164737 にアクセスして、ページ下方のAttachment(s):にある、"Firmware Upgrade Wizard Manual.pdf "と"FirmwareUpgradeWizard4_0.exe"をダウンロードします。"FirmwareUpdateImages.zip "は、Smart-UPSに関してはexeファイルの方に同じ物が同梱されていて必要ないようでした。あとはPDFファイルの説明に従ってファームウェアのアップデートを行うだけです。簡単に説明すると、

  1. UPSの電源を落とす
  2. WindowsマシンにUPSを接続(手元の環境ではOSの再起動が必要でした)
  3. FirmwareUpgradeWizard4_0.exeを実行すると、展開後ファームウェアの更新作業が始まる
  4. Smart-UPS 750の場合は、ファームウェアのバージョンが09.1になっていれば成功

といった感じでした。

次に、UPSの画面を操作してModbusを有効にします。

`clear`

`clear`

  1. エンターをおしてメインメニューを表示し、上下キーで「セッテイ」に合わせてエンター
  2. 上下キーで「メニュータイプ」に合わせてエンター
  3. 下キーで「アドバンス」に合わせてエンター
  4. 上下キーで「Modbus」に合わせてエンター
  5. 下キーで「ユウコウ」に合わせてエンター
  6. 元の画面に戻るまでEscキーを連打

サーバ側のapcupsdも最新の3.4.12にバージョンアップします。FreeBSDならportsがすでに最新版になっているので、

# portsnap fetch update
# portmaster apcupsd

するだけです。更新後、apcupsdの設定ファイルを書き換えて、Modbusプロトコルを使うようにします。

UPSCABLE smart
UPSTYPE modbus
DEVICE /dev/ttyu0

サーバとUPSを付属のシリアルケーブル(940-0625A)で接続してapcupsdを起動します。無事に起動し、apcaccessの表示が以下のようになれば作業完了です。

% apcaccess
VERSION  : 3.14.12 (29 March 2014) freebsd
  :
CABLE    : Custom Cable Smart
DRIVER   : MODBUS UPS Driver
UPSMODE  : Stand Alone
  :
FIRMWARE : UPS 09.1 / 00.4

これでUPS側のコンセントを抜き差しして試したところ、無事復電時に自動で再起動するようになりました。ちなみに、この組み合わせであればUSBケーブルでの接続でも復電後の自動再起動まで問題なくできるようでした。

参考: http://www.apcmedia.com/salestools/MPAO-98KJ7F/MPAO-98KJ7F_R0_EN.pdf