昨水曜(16日)は、前の週に仕掛けた自動portsツリー更新が行われる日である。
早朝から、ゆるゆると、処理は進んでいたのだが、この日は朝から暗い空で、午後には雷雨となった。
夕方、午後5時頃には、とうとう、停電した。
停電していた時間は、正確にはわからないが、感覚的には、10〜20分くらいである。
沖縄電力のホームページでは、この手の災害情報は出ていない。
たぶん、雷撃で地絡して遮断器が動作して、再閉路成功、というところなのだろうと思う。
家には、サーバ用にUPSがある。
有るには有るのだが、とうの昔にバッテリが老朽化して、もはやUPSの体を為していない。
古いバッテリの処分先が決まらなくて、新しいバッテリに交換できなくていたのである。
先月、さすがにこのまま放置できないと思い、購入元に連絡をとってみたら、メーカが古いバッテリを引き取ってくれることがわかった。
ただし、送料は自腹である。
送料を負担しても、有害危険物として処分しようとしたら、それどころでない煩わしさがあるので、仕方が無い。
懐具合を見ながら、バッテリを交換しようと考えた。
そうこうしている内の、昨日の停電である。
通電したと同時に、サーバは起動し、一見、何事も無い風に、動いていた。
しかし、portsツリーの更新に続けて、アプリケーションのアップデートをやっている最中に、いきなり電源が落ちたので、やはり、ファイルシステムに不整合が出ていた。
近頃のマシンでは、ディスクへの書き込みは、一時メモリにキャッシュし、適当にまとめてから本当に書き込みする、いわゆる「遅延書込」によって、処理スピードをあげている。
家のFreeBSDのサーバでも、重い処理が走っているときなどは、数秒に1回程度しか実際に書き込みはしない。
その分、処理速度はディスク書き込み速度に足を引っ張られないので、そこそこ速いのだが、突然の電源断では「お手上げ」である。
電源が突然落ちると、かなり高い確率で、書き込みを遅延させたデータが、flush前に、失われるのだ。
それが嫌なら、UPSを設置するか、ノートPCなどの自立電源を持つマシンにするしかない。
しかし、10分以上の時間、電源を維持できるUPSは、それなりに高価だ。
今回の様に、(停電復旧時間としては最短だったのだとは思うが)長い時間停電すると、UPSのバッテリも切れる。
そうすると、UPSからの割り込みで、自動的にサーバを shutdown するようにしないと、いずれ、同じ運命をたどる。
それはさておき、我が家のFreeBSDサーバでは、ファイルシステムは、UFS+遅延書き込み+soft-updates という構成である。
この仕組みだと、ファイルの書き込みは、中途半端に成功する、ということはない。
成功するか、失敗する(=書き込まれない)かの、どちらかになる。
半端な状態が無い、というのは、かなり安心できることである。
しかし、こんな保証があろうが無かろうが、爾後の処理は同じだ。
- # shutdown -r now で、再起動し、シングルモードに切り替える。
- > /sbin/fsck -y 修復したデバイス名とパスをメモる。
- > /sbin/shutdown -r now で、再起動する。
- メモしたパスのファイル・ディレクトリを見て、おかしなものは、必要に応じて別にバックアップし、削除する。
- OSソースを同期する。(# cvsup /usr/share/example/cvsup/stable-supfile)
- portsツリーを同期する。(# cvsup /usr/share/example/cvsup/ports-supfile)
- 「world」とカーネルを再構築する。
- portsから導入したアプリケーションを全て強制再構築する。(# portupgrade -af)
- データベース等を、必要に応じて、バックアップから戻す。
カーネル&「world」の再構築に約2時間(1.1GHz-Celeron 32-bit)かかる。
portsから入れたアプリケーションの全再構築だと、約30時間(520ports)かかる。
当然、今も作業中である。
完了するまでは、サーバの動作が重くてたまらない。
しばらくの辛抱である。






コメントする