LoginSignup
12
8

More than 5 years have passed since last update.

CentOS5からCentOS6へ移行

Last updated at Posted at 2017-01-24

楽しい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ファイルの体系がガラッと変わったりして

だいぶ泥沼化してきました。

生還したらまとめます。本当の戦いはこれからだ!

12
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8