連載
» 2015年02月25日 19時00分 UPDATE

Tech TIPS:Windowsのrobocopyコマンドでフォルダーをバックアップ/同期させる

Windowsでファイルのバックアップをするには、2つのフォルダーの内容を同期させるコマンドを利用するとよい。robocopyはフォルダーの同期機能を始め、さまざまなオプションを指定してのコピーができる。2つのフォルダーの内容を完全に同期させるには、/mirオプションを利用する。

[打越浩幸, 島田広道,デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows XP/Windows Vista/Windows 7/Windows 8/Windows 8.1/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2



解説

 2つのフォルダーの内容を同期させ、ファイルやフォルダーの内容を同じ状態に保つ機能は、ファイルサーバーのバックアップや個人的なデータのバックアップ、リモートオフィス同士でのデータの同期など、システム管理のさまざまな場面で利用される。本フォーラムでもWindows向けに、これまで右上の関連記事のような手法をいくつか紹介してきた。

 フォルダーの同期に利用できるツールとしては、以上の他にも「robocopy.exe」というコマンドラインツールがある。これはもともとはWindows OSのリソースキットツールの1つとして、OS本体とは別に提供されていたものだ。それがWindows Vista/Windows Server 2008以降では、OS標準コマンドとして用意されるようになった

 Windows XP/Windows Server 2003の場合はリソースキットツールをインストールすることで利用できるようになる。入手方法の詳細については右上の関連記事を参照のこと。

 robocopyは、もともとはリモートのファイルサーバー同士でフォルダーを同期させるために作られたコマンドである(ユーザープロファイルなどを複製するために作られた)。その名前は「Robust File Copy」の略であり、堅牢(robust)で確実なファイルコピーという意味を持つ。具体的な機能の例を以下に記す。

  • エラー時の再試行
  • ネットワーク切断時のコピーの中断と再開
  • 属性やセキュリティ設定のコピー
  • ファイルサイズを限定してのコピー
  • コピー先にある余分なファイルの削除
  • 256文字を超える長いパス名の処理
  • 動作ログの記録
  • コピーの進行状態の常時表示
  • ジョブによる同期作業内容の定義
  • コピー時の占有帯域制御

 このようにrobocopyはたくさんの機能を備えている。本稿では、その中から一番基本的な使い方として、2つのフォルダーを同期させる機能について解説する。個々の機能については右上の関連記事を参照していただきたい(今後さらに解説を追加するつもりだ)。

 コマンドラインではなくGUIからフォルダーをバックアップしたり同期したりしたい場合は、richcopyが利用できる。詳細は右の関連記事を参照していただきたい。

操作方法

●robocopyの基本的な使い方

 robocopyでは、copyやxcopyコマンドのように、引数としてコピー元とコピー先、オプションなどを指定する。コピー元もコピー先もフォルダーであり(ファイル名やワイルドカードは指定不可)、指定されたフォルダー間で、その中にあるファイルがコピーされる。ただしデフォルトでは、次の種類のファイルだけが上書きでコピーされる。

  • コピー先に存在しないファイル
  • 更新日付が異なるファイル(新しいファイルだけではなく、コピー元の方が古くてもコピー対象となる)
  • 日付は同じでもサイズが異なるファイル

 robocopyの最も基本的なコマンドラインは次の通りだ。

robocopy c:\src d:\dest ……2つのフォルダー間での全ファイルのコピー



 デフォルトでは「*.*」、つまり全てのファイルがコピーの対象となる。オプションとしてファイルのパターンを指定すると、そのパターンに合うファイルのみがコピーの対象となる。例えばJPEGファイルだけをコピーするには、次のようにする(パターンは複数指定可能)。

robocopy c:\src d:\dest *.jpg *.jpeg ……2つのフォルダー間でのJPEGファイルのコピー



●robocopyのヘルプを参照するには

 こうしたrobocopyの使い方やオプションは、コマンドプロンプトで「robocopy /?」を実行すると表示される。

C:\>robocopy /? ……Windows 7での例

--------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
--------------------------------------------------------------------

開始: Wed Feb 23 12:09:23 2015

   使用法:: ROBOCOPY コピー元 コピー先 [ファイル [ファイル]...]
            [オプション]

コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー
            \共有\パス)。
コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー
            \共有\パス)。
ファイル :: コピーするファイル (名前/ワイルドカード: 既定値は「*.*」
            です)

::
:: コピー オプション:
::
      /S :: サブディレクトリをコピーしますが、空のディレクトリはコピ
            ーしません。
      /E :: 空のディレクトリを含むサブディレクトリをコピーします。
  /LEV:n :: コピー元ディレクトリ ツリーの上位 n レベルのみをコピーし
            ます。
……(以下省略)……



 またリソースキット版の場合は、robocopy.exeがインストールされている場所にrobocopy.docというドキュメントファイルが用意されているので、参考にしていただきたい。

●フォルダーの同期

 2つのフォルダーを同期させるには、/mir(ミラー)オプションを指定する。コピー元やコピー先には、ローカルのフォルダーだけでなく(例:c:\test)、UNCによるリモートのサーバー上の共有フォルダーも指定できる(例:\\server1\drivec\test2)。

 /mirオプションを付けると、2つのフォルダーの内容が比較され、コピー元のフォルダーの内容のミラーがコピー先に作成される。コピー先に不足するものがあれば新しくコピーされるし(古ければ上書きされる)、コピー先に余分なファイルがあれば相手側のフォルダーから削除される。単なるバックアップで利用するなら、これでも十分だろう。

 余分なファイルを削除させたくなければ、/mirではなく、/s(サブフォルダーのコピー)を指定する(余分なファイルを削除する/purgeと/sを組み合わせたものが/mirオプションになっている)。

 次の実行例では、User01というアカウントのデスクトップにあるフォルダーを、Server1とServer2の間で同期している。

C:\>robocopy "\\Server1\C\Users\User01\Desktop\新しいフォルダー" "\\Server2\C\Users\user01\Desktop\新しいフォルダー" /mir

--------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
--------------------------------------------------------------------

開始: Wed Feb 23 13:00:07 2015……処理日付

コピー元 : \\Server1\C\Users\User01\Desktop\新しいフォルダー\
   コピー先 : \\Server2\C\Users\user01\Desktop\新しいフォルダー\
         ↑↑……同期するフォルダー
  ファイル: *.*
         ↑↑……同期するファイル。*.*は全ファイル
オプション: *.* /S /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30
         ↑↑……オプション。リトライ回数や待ち時間など
--------------------------------------------------------------------

             11 \\Server1\C\Users\User01\Desktop\新しいフォルダー\
     *EXTRA File    4.7 m      wmplog00.sqm ……余分な宛て先ファイル
     *EXTRA File    4.3 m      wmplog01.sqm
     *EXTRA File    3.4 m      wmplog02.sqm
……(省略)……
……以下処理結果
                合計     コピー済み      スキップ       不一致        失敗    Extras
ディレクトリ:        41        40         1         0         0         0
   ファイル:       234       234         0         0         0         0
    バイト:  123.26 m  123.26 m         0         0         0         0
     時刻:   0:00:36   0:00:33                       0:00:00   0:00:03


速度:             3897149 バイト/秒
速度:             222.996 MB/分

終了: Wed Feb 23 13:00:42 2015

C:\>



 以上のように、デフォルトではコピーしているファイルや転送量など、詳細なログが表示される。このログはファイルなどに残すこともできるので、タスクスケジューラに登録して自動実行する場合にも便利である。

●Windows Updateでrobocopyを最新版にする

 その機能の多さ故か、これまでrobocopyには不具合がしばしば見つかり、それを修正した更新版がリリースされる、ということが繰り返されてきた。以下は、そうした不具合・更新情報の一部である。

 もし、正しくオプションを指定しているにもかかわらずrobocopyが思い通りに実行されない場合は、Windows Updateで未適用の更新プログラムがないか確認してみよう。過去のrobocopyの更新版も、その多くが更新プログラムという形でWindows Updateで配布されてきたからだ。

新しいWindows OSではrobocopyのオプションが増えている

 robocopyのオプションは、Windows VistaやWindows 7、Windows 8に同梱のバージョンでいくつか新しいものが追加された。ただし、これらの新オプションのないWindows XP/Windows Server 2003でも、前述したフォルダーの同期は可能だ。

分類 オプション名 内容
■Windows Vista/Windows Server 2008で追加されたオプション
コピー /EFSRAW 暗号化済みの全ファイルをEFS RAWモードでコピーする
/DCOPY:T フォルダーのタイムスタンプをコピーする
/SECFIX スキップしたものも含む全ファイルのファイルセキュリティを修正する
/TIMFIX スキップしたものも含む全ファイルのファイル時刻を修正する
/SL 対象ファイル/フォルダーではなくシンボリックリンクをコピーする
ファイル選択 /DST 夏時間における1時間の差を補正する
/XJD フォルダーのジャンクションポイントを除外する
/XJF ファイルのジャンクションポイントを除外する
ログ /BYTES サイズの情報をbyte単位に表して出力する
/UNILOG:ファイル ログファイルにUNICODEで状態を出力する(既存のログを上書き)
/UNILOG+:ファイル ログファイルにUNICODEで状態を出力する(既存のログに追加)
/UNICODE 状態をUNICODEで出力する
■Windows 7/Windows Server 2008 R2で追加されたオプション
コピー /MT[:n] n個のスレッドのマルチスレッドコピーを実行する。デフォルトは8スレッドで、nには1〜128の値を指定可能。/IPGオプションや/EFSRAWオプションとの互換性はない
■Windows 8/Windows Server 2012で追加されたオプション
コピー /J Unbuffered I/Oを使ってコピーする。巨大なファイルのコピー時に、ファイルシステムキャッシュの浪費といった問題を回避できる
/DCOPY:コピーフラグ フォルダーの情報(データ/属性/タイムスタンプ)もコピーするかどうかを選択する。デフォルトではフォルダーのデータ(代替ストリーム情報)と属性のみがコピーされ、タイムスタンプ情報(作成、更新、アクセス時刻)はコピーされない
/NODCOPY フォルダーのコピー時に、データ/属性/タイムスタンプをコピーしない
/NOOFFLOAD コピー時に「オフロードデータ転送(ODX)」を利用しない(ODXはWindows Server 2012以降に搭載されている機能)
Windows Vista/7/8で追加されたrobocopyのオプション


■更新履歴

【2015/02/25】Windows 8/8.1およびWindows Server 2012/2012 R2に同梱のrobocopyコマンドの情報を反映しました。また過去に見つかったrobocopyの不具合と更新版について追記しました。

【2011/06/24】robocopyの基本的な使い方を追記しました。またWindows 7/Windows Server 2008 R2に同梱のrobocopyコマンドをベースに加筆修正をしました。

【2007/04/20】初版公開(対象はWindows 2000/Windows XP/Windows Server 2003/Windows Vista)。


「Tech TIPS」のインデックス

Tech TIPS

Copyright© 1999-2015 Digital Advantage Corp. All Rights Reserved.

TechTargetジャパン

@IT Special

- PR -
セキュリティ大阪
Loading

ホワイトペーパー(TechTargetジャパン)

注目のテーマ

Focus

- PR -

転職/派遣情報を探す

【転職サーチ】SIer/Web企業/新規事業 スマホ開発で、あなたのキャリアを生かす

「派遣・フリーで働くメリット」とは? 活躍する派遣エンジニアの本音

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。