robocopyというコマンドをご存知でしょうか?
大量のファイルのコピーやバックアップに適したWindows標準のコマンドです。
Windows管理者(特にファイルサーバー管理者)は絶対に覚えておいた方が良いコマンドですね!
robocopyとは?robocopyコマンドの歴史
マイクロソフトでは、robocopyを「Windows の堅牢性の高いファイル コピー」コマンドとして紹介されています。
まさにそうだと思います。
どういう時に使用出来るコマンドかというと
- ファイルサーバーを移行したい
- たくさんあるファイルの途中までコピーしたんだけど、また最初からではなく差分ファイルのみコピーし時間を短縮したい
- 古いファイルはコピーしたくない
- フォルダ体系のみコピーし、アクセス権をコピーしたい
- アクセス権が無いけどバックアップに使いたい
などなど
といった、いろんなケースに使用でき、ファイルコピーだけでなくアクセス権のコピーや所有者情報のコピーまで出来るコマンドです。
その分、難しいたくさんのオプションがrobocopyにはあるんですけどね。
robocopyコマンドの歴史。(余談ですけど)
robocopyの歴史としては、古くは「リソースキット」からスタートしたコマンドでした。
(昔からWindows管理者だったかたら懐かしいかもですね)
リソースキットとは、
Windows標準では無いが、Windows管理に便利な開発コマンド群をマイクロソフトがフリーで提供していて、その開発ツール群の事をリソースキットと呼んでいました。
つまり、昔はマイクロソフトのフリーツールコマンドだったのが、今では標準コマンドになったんですね。
Windows 標準コマンドでは無かった時代のOS(リソースキットで入手可能)
- Windows 2000 Server
- Windows 2000
- Windows Server 2003
- Windows XP
昔は、マニアックな人だけが知っていたコマンドでした。
Windows標準コマンドになった時代のOS
- Windows Server 2008
- Windows Vista
- Windows Server 2012
- Windows 7
- Windows 8
Windows Server 2008 以降はその便利さゆえに標準コマンドになったというわけです。
「robocopy」の使用方法。便利なオプションを説明
robocopyはオプションがたくさんあり正直難しいです、、、
なので、良く使用するオプションを紹介します。
コマンド使用例:
ROBOCOPY コピー元 コピー先 /B /COPY:DATSOU /FFT /R:0 /W:0 /FP /NP /LOG:ログファイル
ROBOCOPY コピー元 コピー先 /MIR /R:0 /W:0 /FP /NP /LOG:ログファイル
-
/B 「バックアップ モードでファイルをコピーします。」
コピー管理者にアクセス権が無いフォルダやファイルがある場合に使用するオプションです。
例えば、ファイルサーバーの管理者権限「administrator」でrobocopyを実行すると、administratorがアクセス出来るフォルダ・ファイルのみがコピーできます。
しかし、ファイルサーバーにはadministratorsに権限のないフォルダやファイルが圧ケースがあります、、、
この場合、ファイル・フォルダをrobocopyで移行もしくはバックアップしたいのに困ってしまいますよね。
Windowsには、バックアップの時のみはアクセス権が無くてもコピーできる特殊なユーザー・グループが存在します。
一般的には「Backup Operators」グループと呼ばれるユーザーです。
/Bオプションを使用すると、「Backup Operators」グループに入っていないユーザーでも、「Backup Operators」グループユーザー同等で”アクセス権が無いけどコピーできる”オプションになります。
便利ですね!
-
/COPY:「ファイルにコピーする情報」 もしくは/COPYALLオプション
アクセス権のみコピーしたいとかアクセス権以外をコピーしたいと言った時に使用するオプションです。
robocopyには”アクセス権だけコピーする”といった特殊なコピーも出来ます。
その特殊なファイル情報を選び指定しコピーするオプションが/COPYオプションです。
- /COPY:D= データ(ファイルデータそのもの)
- /COPY:A= 属性
- /COPY:T= タイムスタンプ
- /COPY:S= セキュリティ NTFS ACL
- /COPY:O= 所有者情報
- /COPY:U= 監査情報
既定値(/COPYオプションを何も指定しない場合)は「/COPY:DAT」になります
/COPYALL はファイル情報をすべてコピーします。
つまり、/COPY:DATSOU と同等になります。
-
/FFT 「FAT ファイル時間 (2 秒の粒度) を仮定します。」
NTFSからFATにコピーする時に使用するオプションです。
NTFS から FAT にコピーするとき、時刻のスタンプ変更
robocopyは、基本的に
- ファイル名
- ファイルサイズ
- タイムスタンプ
で、同じファイルか違うファイルか見極め、違うファイルだった場合コピーしていきます。(なのでrobocopyはスキップして差分コピーが出来ます)。
ここで、タイムスタンプが異なると異なるファイルと判断してしまうので、何回robocopyを実行しても同じファイルをスキップしなくなってしまい毎回フルコピーになってしまいます。
ここで、NTFSからFATにコピーする場合、FATからNTFSにコピーする場合の注意点があります。
実は、NTFSからFATにコピーする場合、ファイルシステムの仕様上の問題でファイルのタイムスタンプが正確に同じにならないのです(2秒程度の誤差あり)。
この誤差を許容し、タイムスタンプに2秒の誤差があっても同じファイルだと思うオプションが/FFTです。
-
/R:0 「失敗したコピーに対する再試行数」
コピーに失敗したらリトライしないで先に他のファイルをコピーさせたい時に使用するオプションです。
コピー時間を短縮したい時に使用します。
既定値は 1,000,000。
-
/W:0 「再試行と再試行の間の待機時間」
コピーに失敗したらリトライしないで先に他のファイルをコピーさせたい時に使用するオプションです。
コピー時間を短縮したい時に使用します。
既定値は、30 秒です。
/MIR 「ディレクトリ ツリーをミラー化します」
「コピー元」から「コピー先」にミラー(同期)をかけます。
- robocopyで コピー元からコピー先にコピー
- コピー元でファイルを消す
- robocopyで コピー元からコピー先にコピー
(コピー先でもコピー元同様にファイルが消えます)
/E オプションとおよび /PURGE オプションを同時に使用したコピーと同等になります。
便利で手軽なオプションですね。
/E :: 空のディレクトリを含むサブディレクトリをコピーします。
/PURGE :: 既にコピー元に存在しないコピー先のファイル/ディレクトリを削除します。
-
/FP /NP /LOG:ログファイル
ログ出力に関する見栄えのオプションです。
/FP :: 出力にファイルの完全なパス名を含めます。
/NP :: 進行状況なし - コピーの完了率を表示しません。
/LOG:ファイル :: ログ ファイルに状態を出力します (既存のログを上書きします)。
その他面白いオプション
-
/Z :: 再起動可能モードでファイルをコピーします。
巨大ファイルのネットワークコピー時に失敗した場合、リジューム機能が使えます
-
/XJ :: 接合ポイントを除外します
「接合ポイント」とはWindowsのハードリンクと呼ばれる「ジャンクション」リンクを意味します。
このジャンクションリンクをコピーするかどうか指定できます。
(ジャンクションリンクは、ハードリンクともいわれる特殊なショートカットリンクのことですね)