きょうの予定
- 「2009 年新春スペシャルドラマ あんみつ姫 2」 (drama)
- 鏡開き
Linux 新サーバ到着! (中編)
クリーンインストーる気はさらさらなくて,gacky (現行サーバ) の Debian GNU/Linux 4.0 (etch) を引き続きほぼ丸ごとコピーで移行することにする。 今回も RAID1 を組むが,故障時などに HDD を取り外して単体で読み出す可能性を考慮して,搭載されてるハードウェア RAID 機能は使わないことにした。
さっそく tiger (新サーバ) に HDD (WD10EADS) を 2 台取り付ける。 赤いケーブルがもともと付いてた HDD と DVD-ROM ドライブの分で,青いケーブルが追加した HDD の分。 メンテナンスしやすいつくりになっててスバラ。
etch のインストーラ ISO イメージを書き込んだ CD-RW で起動してみると,ネットワークコントローラ NC105i が認識されなくて,ネットワークにつながらない。 さすがにカーネル 2.6.18 ではキビシかったか。 「オフィシャルのインストーラではハードウェアを認識してくれない」を参考に etch-custom-0622.iso (カーネル 2.6.25) で起動すると認識された。 ここに gacky のファイルを上書きすると古いカーネルに戻ってしまうので,gacky のほうに「Debian Backports」の中の linux-image-2.6-686 (現時点でカーネル 2.6.26) をインストールしておく。
コアシステムと ssh-server のインストールを済ませ,必要最小限の機能が使えるようになったら,ファイルの移行開始。 まずユーザ ID などの不一致を防ぐために /etc 配下の passwd shadow group gshadow を scp でコピーした後,盛大に時間が掛かる共有ディレクトリ (365G バイト使用) のコピーを始める。 例によって tar & ssh でギガビットネットワーク越しにコピー。 ssh の cipher は今のところ最速の arcfour を指定するのを忘れずに。 あと,コピー開始後は共有ディレクトリに書き込まないよう注意。 最新ファイルがどこにあるのか分からなくなっちゃうからね。
共有ディレクトリのコピーが終わったら,同様にして /home をコピーする。 両方合わせると数時間の作業。 今回はここでおしまい。 後編へ続く。
UPS バッテリー寿命
深夜にけたたましい警告音が鳴り出して目がさめた。 メイン PC,サブ PC,ルータあたりが接続されてる UPS の赤ランプの点滅に合わせてブザーが鳴ってた。 スクリーンショットの通り,ブザーを鳴らさない設定にしてあると思ってたのに,鳴りまくりじゃねえか w
ついに UPS のバッテリーが寿命を迎えたようだ。 バッテリーの使用開始日 (= UPS の使用開始日) が 2001/08/25 だから,約 7.4 年間も無事に使えたということかー! すげえな,BX50XF のシール鉛バッテリーってやつ。 期待寿命 5 年間をはるかに超えた。 おそらく中身はパナ。
このバッテリー,UPS の電源を落とすことなくホットスワップで交換できるらしい。 交換してもいいんだが,付属のソフトが Windows Vista に対応してなくて,上記スクリーンショットもサブ PC の Windows XP のもの。 メイン PC に接続するには世代が違うんだよねえ。 現行機種の BX35F / BX50F であれば Windows Vista に対応してるほか,旧世代でも最新ソフトのライセンスを購入することで Windows Vista 対応になるものの,ソフトとバッテリーの両方を買うくらいなら現行機種を買ったほうが安い。
Linux から監視する方法が分かったら,バッテリーを交換して自宅サーバに接続してもいいかもしれない。 ・・・「[debian-users:33193] Re: Omron BX50XF」とか「UPS(genpower)」とかの方法でうまくいく予感。
Linux 新サーバ到着! (後編)
共有ディレクトリとホームディレクトリ以外の移行は下手すると起動できなくなったりするので,ミスらないようにめがっさ慎重に作業する。 最終的には /boot と /etc は手作業でマージし,それ以外は上書きで差し替える方向で。
外部公開サービスを可能な限り停止。 ルータでもポートをふさいだりして,接続できない状態にしておくと安心。
gacky# service apache2 stop gacky# service ircd-irc2 stop
家庭内のみ公開のサービス (samba とか) や cron なども一応停止。
旧サーバの残りのファイルを新サーバの GACKY ディレクトリ配下にコピー。 プロセスが動いてる限り /var の中身はちょくちょく変わるはずなので,一部コピーしきれない可能性あり。 そこらへんは割り切る。
gacky# cd / gacky# tar c bin boot etc initrd* lib opt root sbin srv usr var vmlinuz* | ssh tiger 'mkdir /GACKY && tar xvpC /GACKY'
続いて /etc のマージ開始。 直接書き換えずに,まずは /etc_merge で作業。 新サーバの動作に必要なファイル (ディスクの mount に関するものなど) は必ず新サーバのファイルを使う必要がある。
tiger:~# cp -a /GACKY/etc /etc_merge tiger:~# ls -tlr /etc
更新日時などを頼りに対象ファイルを見つけて diff を確認し,適宜 /etc から /etc_merge へコピーしたりマージしたり,旧サーバ名を grep して書き換えたり。 ちょっぴり神経を使う。 今回は以下のファイルをいじった。
fstab, hostname, hosts, mdadm. lvmtab, lvm. default/mdadm. mtab, network/interfaces, udev/rules.d/z25_persistent-net.rules
/boot は直接書き換えた。
さていよいよ終盤戦。 新サーバをリブートし,インストーラの CD を rescue mode で起動。
Press F1 for help, or ENTER to boot: rescue
「ルートファイルシステムとして使うデバイス」で正しいパーティションを選び,「インストーラ環境内でシェルを実行」。 ルートファイルシステムが /target にマウントされてるので,ひたすらリネーム作業を行う。
~ # cd /target /target # mkdir TIGER /target # mv bin TIGER/ && mv GACKY/bin . /target # mv initrd* TIGER/ && mv GACKY/initrd* . /target # mv lib TIGER/ && mv GACKY/lib . /target # mv opt TIGER/ && mv GACKY/opt . /target # mv root TIGER/ && mv GACKY/root . /target # mv sbin TIGER/ && mv GACKY/sbin . /target # mv srv TIGER/ && mv GACKY/srv . /target # mv usr TIGER/ && mv GACKY/usr . /target # mv var TIGER/ && mv GACKY/var . /target # mv vmlinuz* TIGER/ && mv GACKY/vmlinuz* .
/etc は別の場所にあるんだった。
/target # mv etc TIGER/ && mv etc_merge etc
あとは旧サーバを停止し,祈りながら新サーバを再起動。 ・・・うごいたー。
最後に物理的な再配置。 旧サーバを引きずり出して,設置場所を掃除して,新サーバを設置。 ひととおり動作を確認したら,ルータの設定を元に戻して,サービスの外部公開を再開。
とまあこんなところ。 何日か運用してみて特に問題なさそうなら,作業用に作ったディレクトリの削除と,旧サーバの処分でも。