楽しいRancherやDockerばかりではなく、こういうやりたくない地味な仕事もやりますよ。
旬な話題でしょうから人柱になります。
要件
現在会社で使用しているメールサーバがCentOS5なので、移行する必要がある。
移行後もユーザ(社員が)現行と変わりなく使えるように移行する必要がある。
移行先はCentOS7がいいんだろうけど、5⇒7はググってもあんまり出てこないから怖い。
6⇒7はupgradeツールがあるのでそれ使うとして、順番に5⇒6と移行して、移行先で6⇒7にupgradeしよう。
メールサーバなのでDNSの設定とかもあるけど、まずはOSのデータをちゃんと移そう。
今回はデータ移行まで。
環境
今回はどちらもさくらのVPSです。移行先は新規に構築した、まっさらなCentOS6です。
格安PLANで頑張ってます
移行元/先 | OS | kernel | CPU | MEMORY | Storage |
---|---|---|---|---|---|
移行元 | CentOS 5.6 | 2.6.18-238.12.1.el5 | 1core | 1GB | 15GB |
移行先 | CentOS 6.8 | 2.6.32-642.13.1.el6.x86_64 | 1core | 1GB | 20GB |
移行対象
この辺はサーバの使い方によるので要確認。
カテゴリ | 対象ファイル | 対象ディレクトリ |
---|---|---|
OS関連 | /etc/passwd, /etc/group, /etc/shadow,/etc/gshadow | /home |
postfix関連 | /etc/postfix |
データ移行
いよいよデータ移行。移行先はまっさら状態なので、いざとなれば再作成すれば大丈夫。
テストユーザを作る
確認用にテストユーザを移行元で作成
useradd mig_test
passwd mig_test
移行作業
OS関連の移行
まず、CentOS(RedHat)ではUIDとGIDは0から65534まであって、
500未満の数はrootやシステムユーザで予約されていています。参考
この辺を気にしないで迷わずファイルを移すと、rootやシステムユーザまで上書されてしまって良くないです。
実際やってみたらOSが起動しなくなりました。orz
UID(GID)が500以上のユーザやグループを移行したい。というわけでawk駆使します。
まず環境変数にユーザが使えるUID(GID)の下限値入れます。
export UGIDLIMIT=500
それぞれのファイルからUID(GID)が、さっき設定したUGIDLIMIT(500)以上65534以下のユーザ(グループ)の情報を.migファイルに出力します。
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) >> ($3!=65534)' /etc/passwd > /tmp/migrate/passwd.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) >> ($3!=65534)' /etc/group > /tmp/migrate/group.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) >> ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /tmp/migrate/shadow.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) >> ($3!=65534) {print $1}' /etc/group | tee - |egrep -f - /etc/shadow > /tmp/migrate/gshadow.mig
次に転送先サーバで、各ファイルのバックアップを取得
mkdir /root/bk
cat /etc/passwd > /root/bk/passwd.bk
cat /etc/group > /root/bk/group.bk
cat /etc/shadow > /root/bk/shadow.bk
cat /etc/gshadow > /root/bk/gshadow.bk
rsyncで移します。他の方法でもよかですよ。
/homeもついでに同期
rsync -avz -e "ssh -i /root/.ssh/id_rsa " /tmp/ root@<移行先のIP or ホスト名>:/tmp/
rsync -avz -e "ssh -i /root/.ssh/id_rsa " /home/ root@<移行先のIP or ホスト名>:/home/
移行先サーバでファイルを展開
cat /tmp/migrate/passwd.mig >> /etc/passwd
cat /tmp/migrate/group.mig >> /etc/group
cat /tmp/migrate/shadow.mig >> /etc/shadow
cat /tmp/migrate/gshadow.mig >> /etc/gshadow
postfix関連の移行
これもrsyncでやりました。
rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa " /home/ root@<移行先のIP or ホスト名>:/home/
確認
ここまでやったら再起動して、
- 移行用に作ったテストユーザでログイン
- postfixの起動
上記2つができればとりあえずデータ移行は終わり。
あとは実際に送受信したり、DNS切り替えたり。。。面倒くさいなー
やれやれだぜ
追記
実際にやりながら書いたのですが、このあとsaslauthの設定を移し忘れてたり、
dovecotのバージョンが1⇒2と上がったことで、configファイルの体系がガラッと変わったりして
だいぶ泥沼化してきました。
生還したらまとめます。本当の戦いはこれからだ!