Windowsでファイルのバックアップ(robocopy)
WindowsVista以降に標準で搭載されているコマンド「robocopy」を利用したバックアップについて。
尚、「robocopy」はrobust(堅牢性の高い)なファイルコピーを行うコマンド。
メリット
- 更新されたファイルだけをコピーするので、2回目以降のバックアップが速い。
- ミラーリング機能があるので、バックアップ元でファイルを削除すると、バックアップ先でも同じように削除してくれる。
- ファイルコピーに失敗した時でも再試行できる。
- ファイルやフォルダのアクセス権限もコピーできる。
- ファイルのパスが256文字を超えても大丈夫(通常のコピーでは、ファイルのパスが256文字を超える場合、バックアップできない)。
- Microsoftの純正コマンドである。
デメリット
- バックアップの「元」と「先」の方向を間違えるとファイルが消えてしまう可能性がある。
- コマンドによる操作なのでGUIのように直感的に実施することができない。
バックアップの設定方法
robocopyは、コマンドプロンプトから実行するコマンドなのでコマンドを準備する。
“C:\Photos”を”J:\Backup\Photos”にバックアップを行う場合、以下の様なコマンドになる。
1 | robocopy "C:\Photos" "J:\Backup\Photos" /MIR /R:0 /W:0 /LOG:"c:\work\backup.log" /NP /NDL /TEE /XJD /XJF |
※バックアップ元のパス、バックアップ先のパスの順で指定
バックアップ元がドライブ、バックアップ先がフォルダの場合の注意
バックアップ元に「ドライブ」、バックアップ先に「フォルダ」を指定した場合、注意が必要。
具体的には、以下のようなコマンドの場合。
1 | robocopy "C:" "J:\Buckup\Photos" /MIR /R:0 /W:0 /LOG:"c:\work\backup.log" /NP /NDL /TEE /XJD /XJF |
この組み合わせの場合、バックアップ先のフォルダ属性に隠しファイルシステムファイルが付与されてしまう。
「隠し+システム」属性なので、エクスプローラのデフォルト状態では表示されない。
エクスプローラの設定を変更し、それらのファイルを表示するようにすると見える。
「ドライブ→ドライブ」、「フォルダ→ドライブ」などの組み合わせでは発生せず、「ドライブ→フォルダ」の場合のみ、この現象が発生する。
回避策としては、robocopyによるバックアップ後に以下のコマンドを実行する。
1 | attrib -H -S "J:\Buckup\Photos" |
このコマンドで、フォルダ属性から「隠し+システム」属性が解除される。
パラメータ(オプション)について
robocopyコマンドで良く使うパラメータ(オプション)について。
ミラーリングでバックアップするだけの場合は、以下の設定で対応可能。
/MIR
バックアップ元とバックアップ先をミラーリングする。
元と先でファイルが同じ状態になる。
/R:0
ファイルコピーに失敗した場合に再度コピーを試す回数。
3とした場合、3回コピーを試行する。
それでもコピーできなかった場合はコピーを終了する。
※指定しない場合、既定値の1,000,000が使われる。/R:0で問題ない。
/W:0
再試行する時の待ち時間(秒)。
3とした場合、3秒経ってからコピーを再開する。
※指定しない場合、規定値の30秒が使われる。/W:0で問題ない。
/LOG:”ログファイルのパス”
バックアップ結果を指定したパスにファイル出力する。
既にログファイルがある場合、上書きする。
例) /LOG:”c:\work\backup.log”
※/LOG+とすると追記モードでログを出力する。
/NP
バックアップ中の進行状況を表示しません。
表示しない方がバックアップ時の負荷が下がる為、若干速くなる。
/NDL
バックアップ結果として、ログファイルにファイルのみが出力される。
フォルダパスがログに出力されなくなるので、ログがすっきりする。
/TEE
バックアップの結果をコマンドプロンプトとログファイルの両方に出力する。
バックアップ状況がリアルタイムで見えるので、状況が把握しやすい。
/XJD
このパラメータは、Windows 7 / Vista / 2008 標準のrobocopyコマンドのみ。
ダウンロード版にはない。
フォルダの接合ポイントを除外する。
ジャンクションと呼ばれる特殊フォルダをコピーしない。
Windows 7 / 8 / Vista / 2008の場合、このパラメータがないと、特殊フォルダが大量にコピーされる。
/XJF
このパラメータは、Windows 7 / 8 / Vista / 2008 標準のrobocopyコマンドのみ。
ダウンロード版にはない。
ファイルの接合ポイントを除外する。
XJDパラメータのファイル版。
Windows 7 / 8 / Vista / 2008の場合、このパラメータがないと、特殊ファイルが大量にコピーされる。
/FFT
バックアップ元と先のファイルの更新時間を比較する時、2秒の誤差を許容する。
/L
このオプションを使うと「バックアップのテスト」ができる。
コピーや削除予定のファイルをログ出力するだけで、バックアップは実行しない。
初めてバックアップを設定する時、設定があっているか確認の為にこのオプションを付けておくと、実際にバックアップする前にシミュレーションできる。
確認できた後は、このオプションを削除する。(残ってるといつまで経ってもバックアップできない)
ログファイルのレイアウト
どんなファイルがコピー・変更・削除されたか、どれくらいの時間がかかったか、エラーはあったか、などが出力される。
日本語/英語表記で内容はほぼ同じだが、バックアップ時にファイルがどうなったかは以下のように表示される。
(1)バックアップ「元」から「先」にファイルが新規コピーされた情報
日本語表記:新しいファイル
英語表記:New File
(2)バックアップ「元」のファイルが変更されたので、バックアップ「先」に再度コピーされた情報
日本語表記:より新しい
英語表記:Newer
(3)バックアップ「元」のファイルがなくなったので、バックアップ「先」のファイルが削除された情報
日本語表記:EXTRA File
英語表記:EXTRA File
バッチファイルの例
1 2 3 4 5 6 7 8 9 10 | rem LOGファイル指定 set LOG="C:\temp\log\%date:/=%_robocopy.log" rem オプション指定 set OPT=/mir /copyall /r:0 /w:0 /np /tee /LOG+:%LOG% rem コピー元 set ORG="C:\Photos" rem コピー先 set DST="J:\Backup\Photos" rem コマンド指定 robocopy %ORG% %DST% %OPT% |