サーバー移行時のファイルのバックアップ・リストア
Web サーバーの構築が一段落したので、昔使っていたサーバーのバックアップをリストアしています。今日は、そのようなサーバー移行時のファイルの移動方法について書こうかなと思います。ただ、私はサーバー管理の専門家ではないので、これがベストな方法だという自信はありません。もしもっと良い方法をご存知でしたら、ご教授くださいませ m(_ _)m
基本的には tar コマンドを使ってファイルをバックアップしておき、以降先のサーバーで展開してやることになります。しかし、うまくやらないとファイルの所有者やパーミッションが変更されてしまいますので、そこらへんの対応も含めて、今回のサーバー移行で私がやった方法をご紹介します。
旧サーバーのファイルをバックアップ
旧サーバーでのファイルのバックアップは、普通に tar コマンドで Tarball 化するだけでよいと思います。私の場合、ルートディレクトリで以下のように実行しました。もちろん、以降の作業は全て root ユーザーで行ってください。
tar -jcf backup.tar.bz2 etc home www share
"www", "share" は私が作ったディレクトリなので、おそらく皆さんのサーバーには存在しないでしょう。いずれにせよ、こんな感じでバックアップするディレクトリを並べれば OK です。
新サーバーでの準備
ファイルの所有ユーザーや所有グループを復元するためには、移行先のサーバーで同じユーザー・グループが存在する必要があります。まあ、当然ですね。ですので、あらかじめバックアップしたファイルを復元するために必要なユーザー・グループを作成しておきましょう。これらは名前が一致していればよく、必ずしも ID が同じである必要はありません。
まず最初に必要なグループを作ってしまいましょう。ご存知かと思いますが、グループを作成するには以下のように groupadd コマンドを使用します。
groupadd <グループ名>
次に、必要なユーザーを作成します。useradd コマンドを使用します。
useradd -g <グループ名> <ユーザー名>
必要に応じて -d(ホームディレクトリのパス指定), -s(デフォルトシェルの指定) オプションなどを指定してください。バックアップデータにホームディレクトリが含まれるなら、-m オプションは付けないほうがよいでしょう。なお、この時点では -G オプションによる補助グループの指定はなくてもかまいません。後から gpasswd コマンドで追加してください。
Tarball を展開する
旧サーバーでバックアップした Tarball を何らかの手段で新サーバー上にコピーし、それを展開します。念のため作業用のディレクトリを作成し、そこに展開したほうがよいでしょう。
mkdir /backup cd /backup tar --same-owner -xjpf <Tarballのファイル名>
--same-owner と -p オプションがポイントです。--same-owner は圧縮時と同じユーザー・グループ名でファイルを展開するオプション、-p は圧縮時と同じパーミッションで展開するオプションです。
不正なユーザー・グループがないか確認する
同名のユーザーやグループが存在すれば、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 ユーザーの所有になってしまうので、注意してください。
以上です。知っている人には当たり前すぎる内容ですし、そもそもユーザー・グループ ID を合わせておけばいいじゃん、という声も聞こえてきますが、そこらへんは趣味の問題と言うことでご容赦ください。どうせなら小細工なしにまっさらでインストールしたかったんですよ (^^ヾ
そんなわけで、今日はこれにて。
詳しくはこちらの記事をどうぞ!
この記事にコメントする