【robocopy】使い方と例, オプション一覧 〜差分バックアップ/MIR, アクセス権移行等, ファイルサーバ移行のノウハウ〜 | SEの道標
robocopyノウハウ集約の館

【robocopy】使い方と例, オプション一覧 〜差分バックアップ/MIR, アクセス権移行等, ファイルサーバ移行のノウハウ〜


Warning: Undefined array key "url" in /home/nesuke2/milestone-of-se.nesuke.com/public_html/wp-content/plugins/code-snippets/php/snippet-ops.php(582) : eval()'d code on line 2

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

こういった移行作業におけるポイント・ノウハウ 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 のアクセス権が無いファイルであっても、このモードではアクセスし、バックアップ先にコピーすることができます。

なお、ネットワーク (SMB/CIFS) 経由のコピーの場合は、SMB/CIFS 接続時のリモートユーザ名を、ローカルログインユーザと同じ名前にし、かつ同じ『SeBackupPriviledge』権限を持つ必要があります。

一番単純なケースは、administratorアカウントで SMB/CIFS 接続、robocopy /B 実行です。

SeBackupPriviledge は BackupOperators というセキュリティグループにあらかじめ備わっています。詳細については以下をご参照下さい。

【robocopy /B】バックアップモードで使われるビルトイングループ "BackupOperators"とは?何ができるの?administrators権限との違いは?
ビルトイングループとは Windows のビルトイングループとは、Windows...

/MIR

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

差分判定はタイムスタンプが一致するか否かです。つまり、同一ファイル名については、タイムスタンプが同じであればスキップし、タイムスタンプが異なれば上書きします。もし新しいタイムスタンプのみを上書きし、古いものをスキップしたい場合は後述の /XO オプションを付けます。

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

/COPY:DATSOU

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

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

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

/DCOPY:DAT

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

※ フォルダの ":D" は「代替データストリーム」をコピーする。

※フォルダのアクセス権をコピーするかどうかについては、/DCOPY ではなく /COPY の ":S" に依存し、":S" が入っていればファイルと同じようにフォルダのアクセス権もコピーする。

/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 のログの見方 コピー済み コピーが成功したファイル/フォルダの...

また、rsync については以下ページをご参照下さい。

【rsync】差分同期の仕組みとオプション, ログの見方(フォーマット)
rsync のアルゴリズム ~単純コピーのcp/scpコマンドとはどのように違う...

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

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

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

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

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

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

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

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

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

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

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

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

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

robocopy の速度向上については以下ページもご参照下さい。

(2) ログの確認

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

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

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

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

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

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

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

メールサーバであれば、普通はそのメールサーバへ配送するリレーサーバがいる場合は、メールサーバの postfix サービスを停止することで、インターネットから新しく受信したメールはそのメールリレーサーバのキューに溜まりますので、その状態で最後のコピーを完了させ、切り替え後に新しいメールサーバへリレーを開始すれば OK です。

⑤事後のデータの突合せ

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

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

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

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

コメント

タイトルとURLをコピーしました