Robocopy /MIR や rsync で差分コピーを!サーバ間データ移行のノウハウ

サーバの老朽化に伴い、サーバを更改する、というケースで、ファイルサーバやメールサーバは大量のデータのコピーが必要になります。

こういった移行作業におけるポイント・ノウハウ5つをご紹介します。

スポンサーリンク
スポンサーリンク

①コピーツール=robocopy(Windows)/rsync(Linux)

Windowsであれば robocopyLinuxであれば rsync がよいでしょう。どちらもOS標準装備(rsyncはもと標準装備)です。

Windowsの場合、他にもfastcopyという選択肢もありますが、速度は速いものの、特定の条件下ではアクセス権を正しくコピーできないまま完了させる等の問題があるため、避けたほうが無難です。

肝になるのは『(1)アクセス権の移行』、『(2)差分コピーによる停止時間短縮』です。(2)は、差分コピーは短時間で済むという利点を活かし、サービス停止時間を最小化する技に使えます。

具体的には④で記載しますが、よく使われるオプションを以下に示します。

robocopyの場合

robocopy [SrcPath] [DstPath] /B /MIR /COPY:DATSOU /DCOPY:DAT /XO /R:1 /W:1 /LOG+:C:\robocopylog\copy-result.log /NP /NFL /NDL

/B

robocopyをバックアップモードで動作させます。

Windowsの特殊権限『SeBackupPriviledge』が付与されたアカウントがこのオプションを付けて実行した場合、例えadministratorへの読み取り権限が無いファイルであっても、このモードではアクセスし、バックアップ先にコピーすることができます。

関連: BackupOperators権限でできること

スポンサーリンク

/MIR

SrcPathのデータ情報(空フォルダ含む)をDstPathに同期します。SrcPath側に無いファイルがDstPathに有る場合、DstPathからは削除されます。なので増減両方の差分を反映できます。

/eオプション(そのフォルダ内のファイルだけでなく、そのフォルダ配下にある全てのフォルダおよびファイルをコピーする。フォルダは空フォルダであってもコピーする。)と/purgeオプション(SrcPath側に無いファイルがDstPathに有る場合、DstPathからは削除する)を同時指定したのと同義です。

/COPY:DATSOU

ファイルのどの情報をコピーするかを指定するオプション。コロンの後はそれぞれ以下の意味。

D=データ本体
A=アーカイブ情報
T=タイムスタンプ
S=セキュリティ(NTFSアクセス権)情報
O=ファイルオーナー(所有者)情報
U=監査設定情報

上記すべてが含まれる場合は/COPYALLと同義。

/DCOPY:DAT

フォルダのどの情報をコピーするかを指定するオプション。コロン以降の意味は/COPYと同じ。

/XO

コピー元のタイムスタンプがコピー先の同名ファイルのタイムスタンプより古い場合、コピーしない。(eXclude Older)

/R:1

コピー失敗時に何回再試行(Retry)するか。1の場合は、失敗した後にもう一度だけ再試行する。

デフォルトでは100万回再試行になっているので必ず変えるべき。

/W:1

コピー失敗と判断するまでの待ち時間(Wait time)。

/LOG+:C:\robocopylog\copy-result.log

ログ出力に関するオプション。

/LOG直後の+は、ファイルの最下部にログを追記していく、という意味。

その直後のコロン以降は、ログを出力するファイルパス。

/NP

進捗非表示(No Progress)。進捗率がログに残るとログが非常に見づらくなるため、このオプション付与が推奨。

/NFL

コピー成功時にはファイル名のログ出力しない(No File List)。ただし、コピー失敗時はちゃんとエラーログが出力される。

/NDL

コピー成功時にはフォルダ名のログを出力しない(No Directory List)。ただし、コピー失敗時はちゃんとエラーログが出力される。

/L

テストモード(ドライラン)。コピーをシミュレーションします。/LOGでログを確認することもできます。/MIRや/PURGEを使うときはコマンドを間違えると意図せぬファイルが削除される可能性がありますので、まずは/Lを付けてログを確認し、問題なければ/Lを削除し、実行するようにしましょう。

なお、ログの見方やエラーコードの意味については以下ページも併せてご参照下さい。

Robocopy のログの見方、エラーコード一覧〜不一致、EXTRAS〜
Robocopy のログの見方、エラーコード一覧〜不一致、EXTRAS〜
Robocopy のログの見方 コピー済み コピーが成功したファイル/フォル...

スポンサーリンク

続いてrsyncです。

rsyncの場合

rsync -auv –delete -e ssh /home/ root@192.168.1.1:/home

-a (–archive)

-r, -l, -p, -t, -o, -g, –devices, –specialsの8つのオプションを同時に指定したのと同義。

-u (–update)

アップデートしたものだけを転送する。(コピー先のタイムスタンプが同じ、もしくは新しい場合は上書きしない)

-v (–verbose)

コピーしたファイル名やバイト数などの転送詳細情報を表示する。

-r (–recursive)

指定パスのファイルだけでなく、その配下にあるディレクトリおよびファイルを全てコピーする。

-l (–links)

シンボリックリンクをシンボリックリンクのままコピーする。

-p (–perms)

パーミッションをコピーする。ただし、SELINUXのコンテキスト情報は含まれないので注意

-t (–times)

タイムスタンプ情報をコピーする。

-o (–owner)

ファイル所有者情報をコピーする。

-g (–group)

ファイルグループ情報をコピーする。

–devices

ブロックデバイスは、(ファイル単位ではなく)ブロックデータのままコピーする。

–specials

名前付きパイプ等の特殊ファイルをコピーする。

②移行先サーバのアンチウィルス機能をOFFにする

移行先サーバは設定は全て済ませてからデータを移行するのが一般的です。なので当然アンチウィルスソフトもインストールしているはずです。

ですがアンチウィルスソフト機能をOFFにしないと、ファイルの書き込み(移行元サーバから移行先サーバへのファイルデータコピー)があるたびにアンチウィルスのリアルタイムスキャンが走り、その影響でCPU・メモリ負荷高騰、ひいてはコピー速度が極端に遅くなる、という状態になります。

ウィルスが混入していない前提で、移行先サーバではアンチウィルス機能はOFFにしましょう

スポンサーリンク

③事前に速度測定、リハーサルを実施

データ移行にはどれくらい時間がかかるかは予測が難しいです。

移行元サーバのDiskの読み込み速度、移行先サーバのDiskの書き込み速度、NW速度などが影響を及ぼしますし、Diskの読み書きにしてもDisk本体の性能だけではなく、RAID構成によってもさらに変わってきます。

また、コピーツールを何個同時に走らせるかによっても変わってきます。

リハーサル(本番と同じ手順を事前に試してみる)を行うことで、以下のことが明らかになります。

(1) コピーツール(robocopy等)を何個同時に走らせれば一番効率的かが分かる

もしrobocopyの差分コピーだけが遅い場合は、原因はネットワーク以外にある可能性が高いです。

アプリケーションは基本的にはサーバのリソースを全て使い切るような挙動はしません。また同様に、ストレージ側も製品によっては1ユーザにリソースをたくさん使わせないように、TCPコネクションあたりの速度を制限しているものもあります。

なのでコピーツールは1つだけ起動するよりも、複数起動したほうが全体としては速くなりますただし、あまり多すぎてもマルチタスク(CPUのContext Switch)の負荷により遅くなってきますので、本気を出すときは事前に最適な起動数を見つけなければなりません。リハーサルでこれを探るのが良いでしょう。

スポンサーリンク

(2) ログの確認

事前にある程度走らせることで、ログがどのように出るかが分かります。想定しないログの出力がされていた場合はオプションを見直しましょう。

また、ログからどのようなファイルが散見されるかを見ておけば、本番時もある程度の対処は事前に決めておけます。

また、一番重要なのは、本番時に「移行が正しくなされた」とどのように判断するかを、リハーサル時のログを見て予め決めておくことです。

④本番移行前に全コピーを走らせ、差分コピーを繰り返す

共有ファイルサービスやメールサービスを起動したままデータをコピーし、後日同様に差分コピーをし、差分を徐々に小さくしていきます。

そして最後にサービスを止めて、最後の差分コピーを走らせ、新しいサーバでサービスを再開させます。

ファイルサーバであれば、サービス停止をしなくても、ファイル共有のアクセス権をRead Onlyにしてしまうのでも良いでしょう。

メールサーバであれば、普通はメールスプールの前にメール配送のみを担当するメールリレーサーバがあるかと思いますので、メールスプールのpostfixサービスを停止します。これにより、新しく受信したメールは、そのメールリレーサーバのキューに溜まりますので、その状態で最後のコピーを完了させ、切り替え後に新しいメールサーバへリレーを開始すればOKです。

⑤事後のデータの突合せ

データがきちんと移行できたかどうかは、コピーツールのログを確認するのが一番良いですが、それ以外にも全体として「ファイル数が同じか?」「フォルダ全体のサイズが同じか?」といったところも確認できると良いでしょう。具体的にはフォルダを右クリックし、プロパティで内部のフォルダ/ファイル総数や総サイズを確認します。

ただし、フォルダ全体のサイズについては、一緒にならないことも多いです。なぜなら、移動元サーバと移動先サーバで、ファイルシステムのブロックサイズが異なると、1ファイルあたりに使われる容量が違って見えるからです。

その他、ストレージの機能で重複除外などがある場合はその分も減ったりします。また、Windowsでは、ログインユーザに対してアクセス権が無いフォルダは全く見えませんので、これはファイル数およびフォルダ全体のサイズ両方に影響を与えます。

上記は例であり、異なる要素は他にもいろいろあり得ますので、参考程度にしたほうがよいでしょう。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク