サーバー移行で大容量フォルダーをRobocopyでコピーすると、毎日増える差分の取り込みや最終切り替えの短縮が課題になります。本記事では「新規・更新ファイルを最速で運ぶ」ための考え方、3フォルダーを同時実行する是非、/MT(マルチスレッド)の決め方、実戦用コマンドと検証手順までまとめます。
Robocopyでサーバー間の大容量フォルダーを速くコピーする全体像
Robocopyは、同じコマンドを繰り返し実行するだけで差分コピー(新規・更新だけをコピー)に近い運用ができます。移行を速く終わらせるコツは、1回の実行で完璧を狙うよりも、工程を分けて「差分を小さく保つ」ことです。
| フェーズ | 目的 | 推奨のやり方 | ポイント |
|---|---|---|---|
| 初回(シード) | 大部分を先に移す | /E または /MIR(慎重に)で一気にコピー | ここが最も時間がかかる。業務時間外も含めて早めに開始 |
| 差分(追いかけ) | 日々の新規・更新を追従 | 同じコマンドを短い間隔で繰り返す | 差分が小さいほど、最終切替が短くなる |
| 切替直前(最終同期) | 差分をゼロに近づける | 更新を止めてから最終実行(必要なら /MIR) | 「停止→最終同期→切替」を短時間で終える |
おすすめの運用例:移行当日まで「差分を薄くする」
「毎日何千ファイルも更新される」環境では、最終同期の時間が読みづらくなります。そこで、移行当日までに差分を極限まで薄くする運用例を示します。実際の業務ルール(夜間バッチ、締め処理など)に合わせて調整してください。
| タイミング | 実施内容 | 狙い | 補足 |
|---|---|---|---|
| 移行の数日前〜 | 初回コピー(シード)を開始 | 大部分を先に終わらせる | 時間がかかるので早めに着手 |
| 移行前日〜当日 | 差分コピーを数時間おきに実行 | 差分を溜めない | タスクスケジューラで定期実行にすると楽 |
| 切替直前 | 更新停止(アプリ停止・共有を読み取り専用化等) | 差分が増えない状態を作る | 止められない場合は最終同期が長引く |
| 停止後 | 最終同期(必要なら /MIR) | 新旧を一致させる | /MIRは誤削除に注意、/Lで事前確認 |
| 切替後 | 簡易検証(件数・権限・アプリ動作) | 事故を早期発見 | ログとサンプル比較で確認 |
まず確認したい:速度を決めるボトルネックはどこか
Robocopyの高速化は、/MT(マルチスレッド)だけで決まりません。実効速度は主に送信元ディスク、受信先ディスク、ネットワークのいずれかで頭打ちになります。最適化は「詰まっている場所」を見つけて、そこに効く手を打つのが近道です。
| 症状 | 疑うべきボトルネック | 観察ポイント(例) | 効きやすい対策 |
|---|---|---|---|
| CPUが常に高い(80〜100%) | CPU/暗号化/ウイルス対策 | タスクマネージャーのCPU、AVのプロセス | /MTを下げる、AV除外、SMB暗号化の影響を確認 |
| ディスク使用率が張り付く | 送信元・受信先のI/O | リソースモニターのディスク、待ち時間 | /MTを下げる、同時ジョブ数を減らす、SSD/NVMeやRAIDを検討 |
| ネットワークが上限に張り付く | 帯域(1GbE/10GbE等) | NICの送受信、スイッチ側の帯域 | /MTを上げすぎない、並列を調整、業務時間外に集中 |
| 小さいファイルが多くて遅い | レイテンシ/メタデータ処理 | ファイル数が膨大、スループットが低い | /MTで並列度を確保、不要なログ出力を減らす、分割並列を検討 |
「3フォルダーを同時実行」vs「順番に実行」:どちらが速い?
結論から言うと、多くの環境ではフォルダー単位で並列実行が総時間を短縮しやすい一方、ストレージ構成によっては順番実行+/MTの方が安定して速いケースもあります。ポイントは「並列化で得をする資源」と「取り合いで損をする資源」を見極めることです。
| 環境・状況 | おすすめ | 理由 | 設定の目安 |
|---|---|---|---|
| 3フォルダーが別ボリューム/別物理ディスク | 同時実行(3プロセス) | ディスクI/Oが分散し、並列効果が出やすい | 各ジョブ /MT:4〜16(合計が過大にならない範囲) |
| 3フォルダーが同一ボリューム(特にHDD) | 順番実行+/MT | 同時に動かすとシークが増え、I/O待ちで失速しやすい | 単一ジョブで /MT:4〜8 から開始 |
| 送信元は速いが受信先が遅い(またはその逆) | ボトルネック側に合わせて調整 | 遅い側が詰まると並列度を上げても伸びない | /MTや同時ジョブ数を下げて安定化 |
| 10GbE以上+SSD/NVMeで余力がある | 同時実行(3プロセス) | ネットワークとディスクが耐えれば並列で最短化しやすい | 各ジョブ /MT:8〜32 を段階的に検証 |
また「同時実行が速い」と言っても、各Robocopyに大きな/MTを付けると総スレッド数が膨らみ、逆に遅くなることがあります。たとえば3ジョブを同時に動かすなら、1ジョブあたりの/MTは控えめにして、全体でバランスを取るのが現実的です。
/MT(マルチスレッド)の役割と最適な決め方
/MTは「1つのRobocopyプロセスが同時に何本のコピー処理を走らせるか」を指定します。多くのWindows環境では1〜128の範囲で指定でき、数値を上げるほど並列にコピーしやすくなります。ただし、伸びるのはコピー中のI/Oが待ちになっている場合で、すでにディスクやネットワークが飽和していると効果は頭打ちです。
/MTの決め方で重要なのは、CPUコア数だけで決めないことです。RobocopyのコピーはCPUよりもI/O要因が支配的になりやすく、特に「小さいファイルが大量」のケースでは、I/O待ちを隠すためにある程度の並列度が効く一方、上げすぎるとメタデータ処理やAVスキャンが増えて失速することがあります。
| 目安の考え方 | おすすめの開始点 | 上げる判断 | 下げる判断 |
|---|---|---|---|
| 単一ジョブで最大速度を狙う | 論理コア数の1/2〜同数 | CPUに余力があり、ディスク待ちが目立つ | CPU飽和、ディスクが常時100%、エラー増加 |
| 複数ジョブを並列に動かす | (論理コア数 ÷ 同時ジョブ数)を上限に控えめ | 各ジョブが待ちになり、帯域に余力がある | 全体が詰まり、1ジョブあたりの速度が大幅に落ちる |
| HDD主体(ランダムI/Oに弱い) | /MT:2〜8 | 大きめファイル中心で連続I/Oになっている | 小ファイル大量でキューが伸びる、遅延が増える |
| SSD/NVMe主体(並列I/Oに強い) | /MT:8〜16 | ネットワークに余力があり、ディスクも余裕 | ネットワーク張り付き、CPUが上がりすぎる |
実務では、まず小さめのテストで「/MT:4 → 8 → 16 → 32」のように段階的に上げ、伸びが鈍る点を探すのが一番確実です。/MTは上げ続ければ速くなるわけではなく、「ある点から横ばい→悪化」に切り替わります。その境目を見つけて、少し手前の値を採用すると安定しやすいです。
コピー前に効く:高速化と安全性を両立する事前チェック
- コピー先フォルダーはできるだけ空にする:既存ファイルが大量にあると比較コストが増え、判定処理で時間が伸びやすくなります。
- Robocopyを走らせる場所は「片側をローカルパス」にする:送信元と受信先の両方をUNC(\\Server\\Share)にすると、実行マシンを経由する形になり、ネットワーク負荷が増えて不利です。可能なら送信元か受信先サーバー上で実行します。
- ウイルス対策(リアルタイムスキャン)の影響を把握する:大量ファイルのコピーでは、AVが1ファイルごとにスキャンして速度が大きく落ちることがあります。社内ルールの範囲で、移行中だけコピー対象パスの除外を検討すると効果が出やすいです。
- 時刻同期(NTP)を確認する:時刻差が大きいと、更新判定がぶれる原因になります。サーバーの時刻が揃っているかを先に確認します。
Robocopyのおすすめオプション:速度・信頼性・運用性のバランス
オプションは「盛りすぎるほど遅くなる」傾向があります。目的に合うものだけを選び、迷ったらまずはシンプルに始めるのが失敗しにくいです。
| オプション | 役割 | 速度への影響 | 使いどころ |
|---|---|---|---|
| /E | サブディレクトリを含めてコピー(空フォルダーも含む) | 標準 | 移行の基本。削除同期が不要ならまずこれ |
| /MIR | ミラー(/E + /PURGE)で削除も同期 | 比較・削除で増える場合あり | 最終同期で「同一状態」にしたいとき(誤削除に注意) |
| /MT:n | マルチスレッドで並列コピー | 条件次第で大きく改善 | 小ファイル大量・高速回線で効果が出やすい |
| /R:n /W:n | リトライ回数/待ち時間 | 失敗時の停滞を防ぐ | 既定値は非常に長いので、移行では短め推奨 |
| /COPY:DAT(既定) | データ・属性・タイムスタンプをコピー | 軽め | 権限を移行しない場合や速度優先のとき |
| /COPY:DATS(または/SEC) | 上記+ACL(アクセス権)もコピー | やや重くなる | サーバー移行で権限維持が必要なとき |
| /DCOPY:T | ディレクトリのタイムスタンプもコピー | 軽微 | フォルダー日時を揃えたい移行で便利 |
| /XJ | ジャンクションを除外 | トラブル回避で結果的に短縮 | ユーザープロファイル等、再帰ループ回避に有効 |
| /NP /NFL /NDL | 進捗%やファイル一覧・ディレクトリ一覧の出力を抑制 | わずかに改善することがある | ログが肥大化して遅くなるのを避けたいとき |
ログの取り方と終了コードの読み方(自動化・運用で必須)
移行では「速く終わる」だけでなく、「失敗を見逃さない」ことも重要です。Robocopyは終了コードがビットマスクになっており、一般的には0〜7は成功扱い、8以上は失敗ありとして運用すると分かりやすいです(環境により定義は調整してください)。
| 終了コード(代表) | 意味(要約) | 運用上の扱い例 |
|---|---|---|
| 0 | コピー対象なし(変更なし) | 正常 |
| 1 | いくつかのファイルがコピーされた | 正常(差分があっただけ) |
| 2 | 宛先に「余分な」ファイル/フォルダーが存在 | /MIR運用でないなら警告扱いにすることも |
| 3 | 1 と 2 の組み合わせ | 条件次第で正常 |
| 8 | コピーできなかったファイルがある | 要調査(権限・使用中・パス長など) |
| 16 | 重大なエラー | 異常(環境・パス・アクセス経路を確認) |
ログは/LOGでファイルに出せますが、差分を頻繁に回すとログが巨大になりがちです。実務では、日付でログファイル名を分ける、または/NFL /NDLで詳細一覧を抑えるなどで、運用負荷と速度低下を防ぎます。
実戦用:用途別コマンド例(そのまま流用しやすい形)
ここでは「速さ」と「差分追従」を両立しやすい形を例にします。環境によっては、権限コピー(/COPY:DATS)やミラー(/MIR)などを調整してください。
基本テンプレ(まずはこれで計測)
robocopy "D:\Folder1" "\\NewServer\Share\Folder1" /E /MT:8 /R:1 /W:1 /DCOPY:T /XJ /NP
上記は「速さ優先」の最小構成です。最初のテストは、オプションを増やす前にこのレベルのシンプルさで、/MTと並列数の効き方を把握するのがおすすめです。
権限も含めて移行したい場合(一般的なサーバー移行向け)
robocopy "D:\Folder1" "\\NewServer\Share\Folder1" /E /COPY:DATS /DCOPY:T /MT:8 /R:1 /W:1 /XJ /NP /LOG:"C:\Logs\Folder1.log"
アクセス権(ACL)を保持したい場合は/COPY:DATS(または/SEC)を追加します。ログは運用に必要ですが、巨大になりすぎるとI/Oが増えるので、状況に応じて/NPや/NFL /NDLも検討してください。
最終同期で完全一致を狙う場合(/MIRは慎重に)
robocopy "D:\Folder1" "\\NewServer\Share\Folder1" /MIR /COPY:DATS /DCOPY:T /MT:8 /R:1 /W:1 /XJ /NP /LOG:"C:\Logs\Folder1_final.log"
/MIRは削除も同期するため、「新サーバー側で誤って消える」リスクがあります。必ず/L(一覧のみ)で事前確認し、除外(/XD /XF)も含めて運用ルールを固めてから使うのが安全です。
3フォルダーを同時に走らせる(バッチで並列起動)
@echo off
set OPT=/E /COPY:DATS /DCOPY:T /R:1 /W:1 /MT:4 /XJ /NP
start "Folder1" cmd /c robocopy "D:\Folder1" "\NewServer\Share\Folder1" %OPT% /LOG:"C:\Logs\Folder1.log"
start "Folder2" cmd /c robocopy "D:\Folder2" "\NewServer\Share\Folder2" %OPT% /LOG:"C:\Logs\Folder2.log"
start "Folder3" cmd /c robocopy "D:\Folder3" "\NewServer\Share\Folder3" %OPT% /LOG:"C:\Logs\Folder3.log"
同時実行する場合は、各ジョブの/MTを控えめにして全体を安定させます。たとえば単体なら/MT:16で速い環境でも、3本同時なら/MT:4〜8に落とした方が「総時間」で勝つことがよくあります。
1つのウィンドウで順番に実行する(シンプルで安定)
@echo off
set OPT=/E /COPY:DATS /DCOPY:T /R:1 /W:1 /MT:16 /XJ /NP
robocopy "D:\Folder1" "\NewServer\Share\Folder1" %OPT% /LOG:"C:\Logs\Folder1.log"
robocopy "D:\Folder2" "\NewServer\Share\Folder2" %OPT% /LOG:"C:\Logs\Folder2.log"
robocopy "D:\Folder3" "\NewServer\Share\Folder3" %OPT% /LOG:"C:\Logs\Folder3.log"
同一ボリューム上のHDDなど、並列にするとI/Oが暴れる構成では、順番実行+/MTの方が結果的に速くなることがあります。「並列の方が速いはず」という思い込みを捨て、計測で決めるのが確実です。
「新規・更新ファイル」を最短でコピーする運用テクニック
差分コピーを速くする最大のコツは、Robocopyに気合いを入れるよりも、差分を溜めない運用に寄せることです。差分が増えるほど、最終同期の時間も読みにくくなります。
- 差分実行の間隔を短くする:1日1回より、数時間に1回の方が「1回あたりの更新量」が減り、失敗時のリカバリも軽くなります。
- 本番切替の前に「更新を止める時間」を作る:アプリ停止、共有の読み取り専用化、書き込み停止など、変更が止まる時間帯を確保すると最終同期が一気に短くなります。
- 不要なディレクトリを除外する:キャッシュ、テンポラリ、ログなど移行不要の場所が混ざると、比較とI/Oだけが増えて無駄が出ます。
- エラー時に長時間固まらない設定にする:/R と /W を短くし、「失敗したものは次回の差分で回収」する方が全体として速く進みます。
また、Robocopyには監視系オプションもあり、運用によっては「更新が一定数たまったら自動で再実行」や「一定分ごとに再実行」といった形に寄せることもできます。ただし常駐実行はログ管理や運用監視が必要になるため、まずはバッチ+タスクスケジューラでの定期実行から始めると安全です。
さらに速くしたいときの発想:分割して並列化する
「1つの巨大フォルダーの中に小ファイルが何百万」というケースでは、/MTを上げても頭打ちになることがあります。こういうときはトップレベルのサブフォルダー単位に分割して複数ジョブ化すると、走査とコピーが分散し、体感で大きく短縮できることがあります。
| 分割の例 | 狙い | 注意点 |
|---|---|---|
| 年/月、A-M/N-Z、部署別などのサブフォルダーごと | 走査とコピーの並列化で待ち時間を減らす | 除外漏れ・重複が起きないようにルールを固定する |
| 「更新が激しい領域」と「静的領域」を分ける | 静的領域は先に完了、更新領域だけを頻繁に差分 | 更新領域の切替手順(停止順序)を明確にする |
検証で勝つ:最短設定を見つける具体的な手順
最終的に速い設定は「環境依存」です。だからこそ、短時間で結論が出るように、検証のやり方を型にしておくと迷いません。
- 代表データ(数十GB〜数百GB)でテストする:小さすぎると誤差が大きく、巨大すぎると試行回数が回せません。
- 同時実行の有無を比較する:3ジョブ同時(/MT控えめ)と順番実行(/MT高め)を同じ条件で測ります。
- /MTだけを段階的に変える:4、8、16、32…のように変え、伸びが止まる点を探します。
- CPU・ディスク・ネットワークの張り付きを観察する:張り付いた資源が「今の上限」です。そこに対策を当てます。
- 本番は「最速」より「安定」寄りにする:ギリギリ最速の設定は揺れやすいので、少し控えめが運用向きです。
| 記録すると良い項目 | 例 | 判断に使うポイント |
|---|---|---|
| 所要時間 | 開始・終了時刻 | 総時間が最短の組み合わせを選ぶ |
| 平均スループット | MB/s、ファイル/秒 | 小ファイル中心なら「ファイル/秒」が重要 |
| CPU使用率 | 平均とピーク | CPUが飽和なら/MTや並列数を下げる |
| ディスク負荷 | 使用率、待ち時間 | 待ちが長いなら並列を下げるかストレージ改善 |
| ネットワーク負荷 | 送受信が帯域上限か | 上限に張り付くならそれ以上は伸びにくい |
よくある落とし穴(遅くなる/事故る)と回避策
- 既定のリトライが長すぎる:/R と /W を指定しないと、失敗したファイルで長時間止まることがあります。移行では短めが現実的です。
- ジャンクション/シンボリックリンクで再帰ループ:/XJを付ける、または必要に応じて/SLを検討します。
- 使用中ファイル:アプリ停止の時間を確保し、最終同期で取り切ります。業務時間中の差分は「取りこぼしても次回で回収」と割り切る方が進みます。
- 権限コピーで失敗:/COPY:DATSや/SECを使う場合は、実行アカウントの権限(管理者、バックアップ権限)を確認します。必要なら/ZB(再開可能+バックアップ)運用も検討します。
- ログ肥大化:/LOGを付けっぱなしで頻繁に差分するとログが巨大になり、書き込みI/Oで遅くなることがあります。/NPや/NFL /NDLで抑制し、日付でログを分けます。
- 削除同期(/MIR)の誤爆:必ず/Lで事前確認し、除外ルールを固定してから本番に入れます。
まとめ:最短で終えるための実務的な結論
- 基本はフォルダー単位の並列実行+/MTで内部も並列化。ただし同一ディスク(特にHDD)なら順番実行の方が速いこともあります。
- /MTは「CPUコア数=正解」ではなく、ディスク・ネットワークの飽和点で決まります。小さく始めて計測し、伸びが止まる手前を採用するのが安定です。
- 差分を速くする最短ルートは、オプションの工夫よりも差分を溜めない運用(頻回差分+最終停止)です。
- 本番前に、代表データで「同時実行 vs 順番」「/MTの段階比較」を行い、あなたの環境で最も速い組み合わせを決めるのが確実です。

コメント