サーバー移行の方法

今日はサーバー移行について学んでみましたが、その中で幾つか他のやり方でもできる方法を見つけましたので、投稿します。ここではtarというコマンドでサーバーを移行する手順が紹介されていました。基本的に既存サーバーのデータをバックアップすることは同じです。

旧サーバーのファイルをバックアップ

旧サーバーでのファイルのバックアップは、普通に tar コマンドで Tarball 化するだけでよいと思います。ルートディレクトリで以下のように実行しました。もちろん、以降の作業は全て root ユーザーで行ってください。

tar -jcf backup.tar.bz2 etc home www ユーザー名

新サーバーでの準備

ファイルの所有ユーザーや所有グループを復元するためには、移行先のサーバーで同じユーザー・グループが存在する必要があります。ですので、あらかじめバックアップしたファイルを復元するために必要なユーザー・グループを作成しておきましょう。これらは名前が一致していればよく、必ずしも ID が同じである必要はありません。

まず最初に必要なグループを作ってしまいましょう。ご存知かと思いますが、グループを作成するには以下のように groupadd コマンドを使用します。

groupadd <グループ名>

次に、必要なユーザーを作成します。useradd コマンドを使用します。

useradd -g <グループ名> <ユーザー名>

必要に応じて -d(ホームディレクトリのパス指定), -s(デフォルトシェルの指定) オプションなどを指定してください。バックアップデータにホームディレクトリが含まれるなら、-m オプションは付けないほうがよいでしょう。なお、この時点では -G オプションによる補助グループの指定はなくてもかまいません。後から gpasswd コマンドで追加してください。

Tarball を展開する

旧サーバーでバックアップした Tarball を何らかの手段で新サーバー上にコピーし、それを展開します。念のため作業用のディレクトリを作成し、そこに展開したほうがよいでしょう。

mkdir /backup
cd /backup
tar --same-owner -xjpf <Tarballのファイル名>

不正なユーザー・グループがないか確認する

同名のユーザーやグループが存在すれば、tar コマンドが自動的にマッピングしてくれます。しかし、対応するものが存在しない場合、旧サーバーの ID がそのまま使用されてしまいます。以下のように find コマンドを使用すると、存在しないユーザー・グループに所有されているファイルをリストアップできます。

find /backup -nouser -o -nogroup

そのようなファイルが見つかった場合は、まず対応するユーザー・グループを作成し、同じく find コマンドを使って所有者を変更しましょう。例えばユーザー ID 500 に所有されているファイルをユーザー “foo” 所有に変えるには、以下のようにします。

find /backup -uid 500 -exec chown foo \{\} \;

グループ ID 500 をグループ “bar” に変えるのはこれです。

find /backup -gid 500 -exec chgrp bar \{\} \;

ただし、この方法でもたまたま旧サーバーでのユーザー・グループ ID と同じ ID で別のユーザー・グループが存在する場合は検出できません。できるだけ最初に必要なユーザー・グループを作成しておくようにしましょう。

本来の場所にファイルをコピー

適切なユーザー・グループが設定されていることを確認したら、ファイルを本来の場所にコピーしましょう。それには、-a オプションを付けて cp コマンドを使用すれば OK です。

cp -a <コピー元ファイル名> <コピー先ファイル名>

-a オプションを付け忘れるとすべて root ユーザーの所有になってしまうので、注意してください。

これ以外にも色々なやり方がありましたので、参考にしていただければと思います、