共有ディレクトリとホームディレクトリ以外の移行は下手すると起動できなくなったりするので,ミスらないようにめがっさ慎重に作業する。
最終的には /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
あとは旧サーバを停止し,祈りながら新サーバを再起動。
・・・うごいたー。
最後に物理的な再配置。
旧サーバを引きずり出して,設置場所を掃除して,新サーバを設置。
ひととおり動作を確認したら,ルータの設定を元に戻して,サービスの外部公開を再開。
とまあこんなところ。
何日か運用してみて特に問題なさそうなら,作業用に作ったディレクトリの削除と,旧サーバの処分でも。