コンテンツ

Windowsに付いているrobustなcopyツールrobocopy. 何かとrobustでないWindowsだがNTFSファイルシステムだけはまとも。おかしな点が少ないのがありがたい。
Windowsでファイルのバックアップをするならrobocopyだけあればいい。CUIツールだが非常に簡単、誰でも簡単バックアップオペレーターになれるツールである。

robocopyの結論

これを使え

robocopy c:\source d:\destination\sub_folder_name *.* /E /R:5 /W:20 /LOG+:C:\bat\robocopy-log.txt /TEE /NP /J /IPG:100
数万ファイル、数十ギガくらい、ネットワーク越しのバックアップはこれでよい。

デフォルト設定 at a glance

デフォルトでは、サイズ&タイムスタンプがどちらも一緒なら同一とみなしてコピーをスキップする。
ほとんどの場合はこれで不自由ないと思われるので変えなくて良い。

コピー対象のファイルはデフォルトで*.*である。
これも普通は変えなくて良かろう。

デフォルトではサブディレクトリはコピーされないので /E は必須

パラメーター解説

/E 空のディレクトリを含むサブディレクトリをコピーします。

/R: リトライ回数(デフォルトは100万回となっており、いつまで経っても終わらない原因となるので5回くらいにしたほうがいい)

/W: リトライが出たときのウエイト秒数
→ リトライが出るのはディスクI/Oエラー、ネットワーク越しコピーなのにネットワークが切断された等

/LOG+: ログを追記モードで記録
→それほど膨大なログにはならないので追記モードでよいかと。心配ならファイル名に日付変数を使って月ごとに分けるなど

/TEE コンソール ウィンドウとログ ファイルに出力します。とのこと、黒い画面で進捗が出る安心感。

/NP 進行状況なし – コピーの完了率を表示しません。
→ログを取らない表示のみ目的ならばあったほうがいいが、進行状況を表示するとログがおかしくなるので表示しない設定を推奨

/J バッファーなし I/O を使用してコピーします (大きなファイルで推奨)。
→SSDから10GbEでハードディスクにコピーする場合などは書き込み先が遅いのでいったんバッファに入れて転送を停止するなど、ややこしい動きをして分かりにくくなる。/Jを付けてバッファなし転送にすると遅くなるが夜間バッチなら安定重視で問題ないかと

/IPG:100
1ブロック転送するごとに100ms休む。これは大事。これを入れないと大きなファイルを全力転送してI/OがボトルネックとなりWindows全体が止まってしまう。デフォルトでは1ブロックは1MBになっているとのこと。1MB転送ごとに0.1sec休む。ということ。

ログファイル名に今日の日付を付けたい

set a=%date:~0,4%%date:~5,2%%date:~8,2%
echo %a%
/LOG+:C:\log\1robocopy-log-%a%.txt
のような記述をすればよい。日付からファイル名に使えない文字列を排除する処理が面倒だが、固定的な処理なので一度定義しておけば9999年までは動作するはず。

ネットワークの帯域制限をしたい

robocopyにはそのような機能はないのでrobocopyをHyper-v上で動かして、Hyper-vのゲストマシンに対して帯域制限を500Mbpsなどと設定すれば夜間バックグラウンド動作に最適。

1日一回のバックアップに使いたい

タスクスケジューラと組み合わせて使う

robocopy自体にそのような機能はないが、タスクスケジューラに仕込めば良い。ログインしている時のみ有効と設定 > robocopyを実行する前にnet useでネットワークフォルダをドライブとしてマウントするバッチファイルを作れば良い

7zipと組み合わせて使う

7zipのコマンドライン版があるのでそれを使う。

参考

基本的な動作の理解。こちらは有用
https://n-archives.net/software/robosync/articles/robocopy-specs-and-command/#i-2-2
参考
https://it-study.info/robocopy/
https://golorih.exblog.jp/21438298/

 

TOP