|
対象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)で確実なファイルコピーという意味を持つ。具体的な機能の例を以下に記す。
このようにrobocopyはたくさんの機能を備えている。本稿では、その中から一番基本的な使い方として、2つのフォルダーを同期させる機能について解説する。個々の機能については右上の関連記事を参照していただきたい(今後さらに解説を追加するつもりだ)。
コマンドラインではなくGUIからフォルダーをバックアップしたり同期したりしたい場合は、richcopyが利用できる。詳細は右の関連記事を参照していただきたい。
robocopyでは、copyやxcopyコマンドのように、引数としてコピー元とコピー先、オプションなどを指定する。コピー元もコピー先もフォルダーであり(ファイル名やワイルドカードは指定不可)、指定されたフォルダー間で、その中にあるファイルがコピーされる。ただしデフォルトでは、次の種類のファイルだけが上書きでコピーされる。
robocopyの最も基本的なコマンドラインは次の通りだ。
robocopy c:\src d:\dest ……2つのフォルダー間での全ファイルのコピー
デフォルトでは「*.*」、つまり全てのファイルがコピーの対象となる。オプションとしてファイルのパターンを指定すると、そのパターンに合うファイルのみがコピーの対象となる。例えばJPEGファイルだけをコピーするには、次のようにする(パターンは複数指定可能)。
robocopy c:\src d:\dest *.jpg *.jpeg ……2つのフォルダー間でのJPEGファイルのコピー
こうした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:\>
以上のように、デフォルトではコピーしているファイルや転送量など、詳細なログが表示される。このログはファイルなどに残すこともできるので、タスクスケジューラに登録して自動実行する場合にも便利である。
その機能の多さ故か、これまでrobocopyには不具合がしばしば見つかり、それを修正した更新版がリリースされる、ということが繰り返されてきた。以下は、そうした不具合・更新情報の一部である。
もし、正しくオプションを指定しているにもかかわらずrobocopyが思い通りに実行されない場合は、Windows Updateで未適用の更新プログラムがないか確認してみよう。過去のrobocopyの更新版も、その多くが更新プログラムという形でWindows Updateで配布されてきたからだ。
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)。
■この記事と関連性の高い別の記事
Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.
@IT Special
- PR -TechTargetジャパン