WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

サーバー移行時のファイルのバックアップ・リストア

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 を合わせておけばいいじゃん、という声も聞こえてきますが、そこらへんは趣味の問題と言うことでご容赦ください。どうせなら小細工なしにまっさらでインストールしたかったんですよ (^^ヾ

そんなわけで、今日はこれにて。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles