ダウンタイムをできるだけ短くして、サーバのHDDを丸ごとコピーする方法

question:1177294812より

ddでデータを丸ごと新しいHDDにコピーしたいのですが、以下のような場合、どういうことに留意すればよいでしょうか?

・現在のHDDはWeb/Mailサーバとして稼働中
・なるべくダウンタイムは少なくしたい
・新HDDにコピーしている最中に、現在のHDDに追加されたデータについてもなるべく拾いたい
・新HDDはUSB外付けで接続したい(なるべくサーバを停止したくない)

このような場合は、dd よりも rsync を使ったほうが良いと思います。ご希望の条件を満たすには dd は不向きです。

rsync を使うと変更があったファイルだけコピーすることができます。dd はファイル単位での処理ができないため、作業中に変更があったファイルだけ処理するというような芸当はできません。


rsyncを使う場合は、以下の手順を取るとご希望の条件がすべて満たせます。この手順はサーバのHDDを交換する際に使うよく取られる手順です。

1) usb 経由でHDDをマウントする。

たとえば /mnt/usb 以下にマウントします。

2) メールなどのサービスは稼動させたまま、rsync でファイルをusbのHDDにコピーする

# rsync -a --exclude=/mnt/usb   /   /mnt/usb

このコマンドで "/" 以下のすべてのファイルを "/mnt/usb" 以下にコピーします。ただし /mnt/usb 以下のファイルは 除外(exclude)します。

データが多いと結構時間が掛かりますが、サーバをとめる必要はありません。


rsync がインストールされていない場合は

# apt-get install rsync

してください。

3) サービスを一旦とめる

サーバのLANケーブルを外すのが一番簡単で確実です。特にサーバ自体を再起動する必要はありません。

4) 再度 rsync でファイルをコピーする

# rsync -a --exclude=/mnt/usb --delete /   /mnt/usb

上記の2)から3)の作業中に 本体側のHDDに追加・削除・変更されたファイルはまだ /mnt/usb 以下に反映されていません。そこで上記コマンドを実行して、これらの変更を /mnt/usb 以下に反映させます。

ここで、"--delete" オプションを付けることが重要です。たとえばユーザーがメールを受信すると、そのメールに相当するファイルは本体側のHDDから消去されます。"--delete"を付けると、このようなHDD側で削除されたファイルを /mnt/usb 側で消すことができます。

5) 作業終了

LANのケーブルを再度繋ぎます。不安な点があれば、サーバを再起動したほうが確実です。サービスの動作確認も忘れずに。


参考URL

rsyncのマニュアル
http://www.infoscience.co.jp/technical/rsync/rsync.html