9Jan
Windowsには「robocopy」というコマンドがあります。
あまりなじみがないコマンドかも知れませんね。
そんなあまり知られていないコマンドなのですが、
実はファイル単位のバックアップでは最強だと思っています。
実はファイル単位のバックアップでは最強だと思っています。
小規模のファイルサーバのバックアップにおすすめですよ。
私も運用管理しているファイルサーバのバックアップに使ってます。
私も運用管理しているファイルサーバのバックアップに使ってます。
この記事ではrobocopyの使い方を紹介します。
もくじ
- Windowsのrobocopyコマンドを使います
- コマンドプロンプトがわからない!
- robocopyのroboはロボットのロボじゃない
- バックアップの特徴
- 良いところ
- 苦手なところ
- 注意事項!
- robocopyが付いてるOSと付いていないOSがある
- robocopyコマンドの準備
- robocopyのヘルプファイルについて
- バックアップの例
- バックアップの設定方法
- バックアップ元がドライブ、バックアップ先がフォルダの場合の注意
- パラメータ(オプション)の説明
- バックアップの実行
- バックアップの実行(2回目以降)
- ログファイルの見かた
- バッチファイルを作成しておくと便利
- リストアの方法
- ベンチマーク的なもの
- まとめ
Windowsのrobocopyコマンドを使います
「robocopy」は、Windows 7 / 8 / Vistaに標準で付いているコマンドです。
他のOSでもMicrosoftからリソースキットという形で無料配布されているので
ほぼ同じ機能を使うことができます。
ほぼ同じ機能を使うことができます。
マウスで操作できるようなグラフィカルな画面はありません。
初心者の方には少し難しいかも知れませんが、
ある程度コマンドプロンプトがわかる方であれば、使うことができます。
ある程度コマンドプロンプトがわかる方であれば、使うことができます。
コマンドプロンプトが良くわからない場合
コマンドは、Windowsのスタートメニューにあるコマンドプロンプト、
あの「黒い画面」から入力できます。
あの「黒い画面」から入力できます。
「コマンドプロンプトが良くわからない!」という方は、
フリーのバックアップツールBunBackupをおすすめします。
フリーのバックアップツールBunBackupをおすすめします。
『BunBackupで簡単!素早く!ファイルをバックアップする方法』の記事をどうぞ!
robocopyのroboはロボットのロボじゃない
robocopyのroboは、
robust(堅牢な)のrobo(robu?)です。
robust(堅牢な)のrobo(robu?)です。
ロボットのロボではありません。
少し前までは私もロボットコピーだと思ってました。。
robocopyコマンドのヘルプでも、
「Windows の堅牢性の高いファイル コピー」
と紹介されています。
「Windows の堅牢性の高いファイル コピー」
と紹介されています。
手堅くコピーできるコマンドですよ、
ということみたいですね。
ということみたいですね。
バックアップの特徴
(1) バックアップの対象
- 企業の小規模なファイルサーバ
※もちろん家庭でも使えます。私も使ってますよ。
(2) バックアップの単位
- ファイルをバックアップ
(3) OSの種類
- ほぼ全てのWindows
良いところ
- 更新されたファイルだけをコピーするので、2回目以降のバックアップが速い。
- ミラーリング機能があるので、バックアップ元でファイルを削除すると、
バックアップ先でも同じように削除してくれる。
- ファイルコピーに失敗した時でも再試行できる。
- ファイルやフォルダのアクセス権限もコピーできる。
緊急時、バックアップ先を一時運用環境としてつかえる可能性あり。
- ファイルのパスが256文字を超えても大丈夫
普通はファイルのパスが256文字を超える場合、バックアップできないことが多い。
- Microsoftの純正コマンドなので安心
サードパーティ製のバックアップソフトが使えないような状況でも使える
苦手なところ
- コマンドプロンプトなので、コマンドの知識がないと設定が難しい。
基本的にはバックアップ元と
バックアップ先のフォルダのパスを指定するだけですが、
少し慣れが必要です。
注意事項!
バックアップの「元」と「先」の方向を間違えると
ファイルが消えてしまう可能性があります。
ファイルが消えてしまう可能性があります。
robocopyコマンドを実行する時には、
設定を良く確認してください!
一度消えたものは取り返せませんので、しっかりと確認しておきましょう。
robocopyが付いてるOSと付いていないOSがある
OSに標準で付いているのですぐに使えます。
- Windows Vista
- Windows 7
- Windows 8、8.1
- Windows 10
- Windows Server 2008(R2含む)
- Windows Server 2012(R2含む)
以下は、OSに付いていないのでダウンロードが必要です。
- Windows XP
- Windows Server 2003
※現在、Windows 2000版は配布されていないようです。
robocopyコマンドの準備
robocopyが付いていないOSの場合、
Microsoftのダウンロードセンターからダウンロードする必要があります。
Microsoftのダウンロードセンターからダウンロードする必要があります。
[Windows XP、Windows Server 2003の場合]
Windows Server 2003 Resource Kit Tools
http://www.microsoft.com/en-us/download/details.aspx?id=17657
http://www.microsoft.com/en-us/download/details.aspx?id=17657
- 上記のサイトにアクセスして、DOWNLOADボタンをクリックする。
- ダウンロードしたファイル(rktools.exeまたはsp4rk_i386.Exe)を実行する。
ここではrktools.exeの場合で説明します。
- Nextボタンをクリックする。
- 「I Agree」を選択し、Nextボタンをクリックする。
- 「Name」に使用するユーザの名前、
「Organization」に使用する組織名を入力し、Nextボタンをクリックする。
- インストールするフォルダを指定し、「Install Now」ボタンをクリックする。
ここでは、
C:\Program Files\Windows Resource Kits\Tools\
フォルダにインストールしています。
- Finishボタンをクリックすると、完了です!
インストールしたフォルダには、パス(環境変数のpath)が自動設定されます。
万が一、パスが通っていない場合は、
インストールフォルダに「robocopy.exe」ファイルがあるので、
パスが通っているフォルダか、
コマンドを実行するフォルダにコピーしてくださいね。
インストールフォルダに「robocopy.exe」ファイルがあるので、
パスが通っているフォルダか、
コマンドを実行するフォルダにコピーしてくださいね。
robocopyのヘルプファイルについて
コマンドプロンプトで、
robocopy /?
を実行するとコマンドのヘルプを見ることができます。
XPや2003用にダウンロードしたrobocopy.exeは、
ヘルプ、実行中の画面、ログファイルともに英語表記です。
ヘルプ、実行中の画面、ログファイルともに英語表記です。
下の方に書いたパラメータを使えればあまり問題ないと思いますよ。
バックアップの例
ここではバックアップの例として、
『BunBackupで簡単!素早く!ファイルをバックアップする方法』記事と同じく、
C:\ライブラリ
↓
J:\バックアップ\ライブラリ
↓
J:\バックアップ\ライブラリ
のバックアップを行います。
バックアップ元のライブラリフォルダはこんな感じです。
デジカメとビデオカメラのファイルがありますね。
デジカメとビデオカメラのファイルがありますね。
バックアップの設定方法
robocopyは、コマンドプロンプトから実行するコマンドですので、
コマンドを準備しておくことが、バックアップの設定になります。
「バックアップの例」で書いたバックアップを行う場合、
以下の様なコマンドになります。
以下の様なコマンドになります。
robocopy "C:\ライブラリ" "J:\バックアップ\ライブラリ" /MIR /R:0 /W:0 /LOG:"c:\work\backup.log" /NP /NDL /TEE /XJD /XJF
※1 実行時は、1行のコマンドです。
※2 バックアップ元のパス、バックアップ先のパスの順で指定します。
※2 バックアップ元のパス、バックアップ先のパスの順で指定します。
早速実行したいところですが、少しお待ちください!
バックアップの設定は「元」と「先」を間違えると、大変なことになります。
もう少し記事を読んでいきながら、あっているか確認していきましょう。
バックアップの設定方法(というか下準備)はこれで完了です!
バックアップ元がドライブ、バックアップ先がフォルダの場合の注意
バックアップ元に「ドライブ」、
バックアップ先に「フォルダ」を指定した場合、注意が必要です。
バックアップ先に「フォルダ」を指定した場合、注意が必要です。
具体的には、
robocopy "C:" "J:\バックアップ\ライブラリ" /MIR /R:0 /W:0 /LOG:"c:\work\backup.log" /NP /NDL /TEE /XJD /XJF
という感じのコマンドですね。
この組み合わせの場合、バックアップ先のフォルダ属性に
- 隠しファイル
- システムファイル
が付与されてしまいます。
robocopyコマンドの仕様?のようですね。
「隠し+システム」属性ですので、エクスプローラのデフォルト状態では表示されません。
エクスプローラの設定を変更し、それらのファイルを表示するようにすると見えます。
エクスプローラの設定を変更し、それらのファイルを表示するようにすると見えます。
「ドライブ→ドライブ」、「フォルダ→ドライブ」などの組み合わせも試しましたが、
「ドライブ→フォルダ」の場合のみ、この現象が発生するようです。
「ドライブ→フォルダ」の場合のみ、この現象が発生するようです。
とりあえずの回避策としては、robocopyによるバックアップ後に
attrib -H -S "J:\バックアップ\ライブラリ"
コマンドを実行してください。
このコマンドで、フォルダ属性から「隠し+システム」属性が解除されます。
バッチファイルで実行する場合は、
この解除コマンドを最後に実行すると良いかも知れませんね。
この解除コマンドを最後に実行すると良いかも知れませんね。
パラメータ(オプション)の説明
robocopyコマンドで良く使うパラメータ(オプション)を説明します。
ミラーリングでバックアップするだけの場合は、これらの設定で十分ですよ。
/MIR
バックアップ元とバックアップ先をミラーリングします。
元と先でファイルが同じ状態になります。
元と先でファイルが同じ状態になります。
/R:0
ファイルコピーに失敗した場合に再度コピーを試す回数です。
3とした場合、3回コピーし直します。
それでもコピーできなかった場合はあきらめます。
3とした場合、3回コピーし直します。
それでもコピーできなかった場合はあきらめます。
<メモ>
指定しない場合、既定値の1,000,000が使われます。
そんな回数を再試行されても困りますので、明示的に指定しておきましょう。
とりあえずは、/R:0 で問題ありません。
指定しない場合、既定値の1,000,000が使われます。
そんな回数を再試行されても困りますので、明示的に指定しておきましょう。
とりあえずは、/R:0 で問題ありません。
/W:0
再試行する時の待ち時間(秒)です。
3とした場合、3秒経ってからコピーし直します。
3とした場合、3秒経ってからコピーし直します。
<メモ>
指定しない場合、規定値の30秒が使われます。
そんなに待たなくても良いのでこれも /W:0 で良いです。
環境によっては数秒待っても良いかも知れませんね。
指定しない場合、規定値の30秒が使われます。
そんなに待たなくても良いのでこれも /W:0 で良いです。
環境によっては数秒待っても良いかも知れませんね。
/LOG:”ログファイルのパス”
バックアップ結果を指定したパスにファイル出力します。
既にログファイルがある場合、上書きします。
既にログファイルがある場合、上書きします。
例) /LOG:”c:\work\backup.log”
/NP
バックアップ中の進行状況を表示しません。
表示しない方がバックアップ時の負荷が下がる為、若干速くなるようです。
表示しない方がバックアップ時の負荷が下がる為、若干速くなるようです。
/NDL
バックアップ結果として、ログファイルにファイルのみが出力されるようになります。
フォルダパスがログに出力されなくなるので、ログがすっきりします。
フォルダパスがログに出力されなくなるので、ログがすっきりします。
/TEE
バックアップの結果をコマンドプロンプトとログファイルの両方に出力します。
バックアップ状況がリアルタイムで見えるので、状況が良くわかります。
バックアップ状況がリアルタイムで見えるので、状況が良くわかります。
/XJD
フォルダの接合ポイントを除外します。
少し難しいですが、ジャンクションと呼ばれる特殊フォルダをコピーしません。
少し難しいですが、ジャンクションと呼ばれる特殊フォルダをコピーしません。
Windows 7 / 8 / Vista / 2008の場合、このパラメータがないと、
変な特殊ファイルが大量にコピーされてしまいます。
必ずパラメータに指定してください!
このパラメータは、Windows 7 / Vista / 2008 標準のrobocopyコマンドのみです。
ダウンロード版にはありません。
/XJF
ファイルの接合ポイントを除外します。
XJDパラメータのファイル版です。
上記と同じ理由で、必ずパラメータに指定してください!
このパラメータは、Windows 7 / 8 / Vista / 2008 標準のrobocopyコマンドのみです。
ダウンロード版にはありません。
/FFT
バックアップ元と先のファイルの更新時間を比較する時、2秒の誤差を許します。
バックアップ先がNAS(OSがLinux系)などの場合、指定した方が良いですね。
/DCOPY:T
フォルダをコピーした時、フォルダのタイムスタンプも一緒にコピーします。
バックアップ先のフォルダも同じ日付になりますよ。
日々の作業する時、フォルダの日付で「いつ頃作成した?」を判断することが良くあります。
ぜひ、このパラメータを付けておくことをおすすめします。
※Vista以降のパラメータです。
日々の作業する時、フォルダの日付で「いつ頃作成した?」を判断することが良くあります。
ぜひ、このパラメータを付けておくことをおすすめします。
※Vista以降のパラメータです。
[2015/10/07追記]
このパラメータを付けた場合、バックアップ時間が8倍くらい遅くなる可能性があります。
特に「一度コピーした後の差分チェック」は毎日のバックアップ時間に大きく関係します。
現在検証中なのですが、ファイル数が500万個・合計サイズ5TBの環境では、
・パラメータあり:6時間
現在検証中なのですが、ファイル数が500万個・合計サイズ5TBの環境では、
・パラメータあり:6時間
・パラメータなし:45分
とかなりの時間差がありました。
※差分チェックの時間
フォルダのタイムスタンプをコピーする必要が無くて、「バックアップに時間がかかってる?」と感じた場合は、オフにした方が良いかも知れませんね。
/SEC
Windowsのセキュリティ情報(権限)も一緒にコピーします。
フォルダとファイルの両方が対象になります。
オリジナルとなるバックアップ元が壊れてしまった場合、
オリジナルとなるバックアップ元が壊れてしまった場合、
しばらくはバックアップ先が唯一のデータファイルとなります。
権限設定もコピーしていると、元が復旧するまでの間、
バックアップファイルを一時的な参照元として使うことが可能になります。
「/DCOPY:T」とセットで使うと良いですね。
/L
このオプションを使うと「バックアップのテスト」ができます。
ヘルプでは、「リストのみ – いずれのファイルにも、コピー、タイムスタンプの追加、または削除を実施しません」とあります。
要は、「コピーや削除予定のファイルをログ出力するだけで、バックアップはしません!」ということですね。
要は、「コピーや削除予定のファイルをログ出力するだけで、バックアップはしません!」ということですね。
初めてバックアップを設定する時、設定があっているか心配ですよね。
そんな時はこのオプションを付けておくと、実際にバックアップする前にシミュレーションできます。
そんな時はこのオプションを付けておくと、実際にバックアップする前にシミュレーションできます。
確認できた後は、このオプションを削除するのをお忘れなく。
残ってるといつまで経ってもバックアップできませんので。
バックアップの実行
今回のバックアップ例では、バックアップ元のライブラリフォルダに、
ファイル数: 382、フォルダー数: 7 の合計 4.76 GB
があります。
ファイル数: 382、フォルダー数: 7 の合計 4.76 GB
があります。
ファイル数の割には、サイズが大きいですね。
ビデオカメラの動画ファイルが
1ファイル平均で300MBありましたので。。。
1ファイル平均で300MBありましたので。。。
- バックアップを実行する前に!
くどくてすいません。
再度同じことを書きますが、
「バックアップ元」と「バックアップ先」は良く確認してください!
「元」と「先」を逆にしてしまうと、ファイルが削除されてしまいます!
これは本当に大事な確認ですので、再度確認してみてください。
設定は大丈夫ですか?
大丈夫な場合、次に進みましょう。 - 「バックアップの設定方法」で準備しておいたコマンドを
コマンドプロンプトから実行します。
- バックアップが実行される。
- バックアップ先を確認しておきましょう。
ちゃんとバックアップされています!
これで一安心ですね。
バックアップの実行(2回目以降)
バックアップ元のファイルを[追加・変更・削除]した状態で、
もう一度バックアップを実行してみましょう。
もう一度バックアップを実行してみましょう。
手順は最初と同じです。
- バックアップのコマンドをコマンドプロンプトから実行する。
- バックアップが実行される。
今度はすぐにバックアップが終了しました!
バックアップにかかった時間は「3秒」でした。
変更があったファイルだけですので、速いですね。
もちろん、変更があったファイルが多いとその分だけ時間がかかりますが、
すべてのファイルをコピーするよりは
はるかに短時間でバックアップが終わります。
ログファイルの見かた
ログファイルはこんな感じです。
どんなファイルがコピー・変更・削除されたか、
どれくらいの時間がかかったか、エラーはあったか、
などが出力されます。
どれくらいの時間がかかったか、エラーはあったか、
などが出力されます。
日本語 / 英語表記で内容はほぼ同じですが、
バックアップ時にファイルがどうなったかは以下のように表示されます。
バックアップ時にファイルがどうなったかは以下のように表示されます。
(1) バックアップ「元」から「先」にファイルが新規コピーされた
- 日本語表記:新しいファイル
- 英語表記:New File
(2) バックアップ「元」のファイルが変更されたので、
バックアップ「先」に再度コピーされた
バックアップ「先」に再度コピーされた
- 日本語表記:より新しい
- 英語表記:Newer
(3) バックアップ「元」のファイルがなくなったので、
バックアップ「先」のファイルが削除された
バックアップ「先」のファイルが削除された
- 日本語表記:EXTRA File
- 英語表記:EXTRA File
※なぜか同じですね。
まずはこれだけを覚えておけば良いです。
バッチファイルを作成しておくと便利
コマンドを集めて一つのテキストファイルにした、
「バッチファイル」を作成しておくと便利ですね。
「バッチファイル」を作成しておくと便利ですね。
バッチファイルと言っても中身はテキストファイルですので、
メモ帳で作成した場合は、こんな感じになります。
メモ帳で作成した場合は、こんな感じになります。
ライブラリのバックアップ.batの例
リストアの方法
- バックアップ先にはオリジナルのファイルがそのままコピーされています。
元に戻したいファイルを探して、適切なフォルダにコピーするだけです。
- リストア完了です!
簡単ですね。
ベンチマーク的なもの
私も日々の業務でrobocopyコマンドを使っていますので、
具体的なバックアップ時間の例を書いておきますね。
具体的なバックアップ時間の例を書いておきますね。
[使った機器]
- バックアップ元:
HP製ファイルサーバ(Windows Storage Server 2003、RAID5)
- バックアップ先:
バッファローのRAID1対応外付けハードディスク(HD-WL4TU3/R1J)
- USB3.0拡張ボード:
I-O DATAのインターフェイスボード(USB3-PEX2S)
[バックアップ対象]
- ファイル数:500万個
- フォルダ数:50万個
- 総サイズ:1TB
[バックアップにかかった時間]
- 3時間(180分)
バックアップ元のファイルサーバは一昔前の機器ですので、
ミラーリング時のデータ読み込みに時間がかかっていますね。
ミラーリング時のデータ読み込みに時間がかかっていますね。
読み込みが速いサーバであれば、
バックアップ時間をもっと短縮できるかも知れませんね。
バックアップ時間をもっと短縮できるかも知れませんね。
とはいえ、深夜に日次バッチで自動起動していますので、
私の場合は、この時間で完了してくれれば全然問題ありません。
私の場合は、この時間で完了してくれれば全然問題ありません。
まとめ
robocopyは、コマンドプロンプトの知識が少し必要ですが、
設定さえできれば、とても強力にバックアップしてくれます。
設定さえできれば、とても強力にバックアップしてくれます。
このコマンドを使って、5年ほどファイルサーバのバックアップをしていますが、
毎日、きっちり確実にバックアップしてくれています。
毎日、きっちり確実にバックアップしてくれています。
ファイルサーバのバックアップに困っておられる方は、
一度お試しくださいね。
一度お試しくださいね。
ロボ最高!
関連記事
コメント
トラックバックは利用できません。
コメント (7)
素晴らしく丁寧な説明で感銘しました。
バックアップが趣味って…。^^;
悪戦苦闘中さん、コメントありがとうございます。
お役に立てればうれしいです。
バックアップは楽しいものなんですよー。安心感やお得感もありますし。
記事を読んで自宅NASのバックアップでrobocopyを使ってみました。
早くて凄くいいですね。こちらの記事に、感謝 感謝です。
DOSコマンドを20年ぶりに使いました。
ご存知でしたら教えていただきたいのですが、
NASのバックアップ先をUSBで直結したHDDに行う場合
robocopyて使えるでしょうか。
こんな、構成です。
——-lan——–
|
|
[NAS]・・・・[USB HDD] ←このHDDにバックアップしたい
私も悪戦苦闘していますさん、コメントありがとうございます。
いろんなバックアップツールを試しましたが、
ファイル単位のバックアップは、このコマンドが一番でした。
ご質問の件ですが、結論から言えば使えます。
ポイントとしては、
ネットワーク上で「NASにつないだHDD」が「robocopyを動かすPC」からどう見えているか?
になります。
もし、USBHDDが「NASの共有フォルダ」として認識されていれば、
\\NAS\バックアップ元のデータ → \\NAS\バックアップ先のデータ(USBHDD)
でいけるのではないでしょうか。
NASがWindows機の場合は、ネットワークフォルダではなく、
通常のドライブ指定で大丈夫ですよ。
(c:\バックアップ元のデータ など)
だーしゅさん
素晴らしい、希望が持てるコメント有難うございました。
直ぐには試せませんが、実験してみます。
非常に参考になりました。
普段バックアップにはxcopyを愛用していますが、
ネットワークPC→ネットワークPCでバッチを流すと
どうも文字数制限?に引っかかるようで
おかしな具合にバックアップが取れてしまって難儀しておりました。
RobocopyのGUI版Richcopyを使ってみたものの、どうもこれはこれで使い勝手が微妙で。
やはり安心のコマンドラインと思っていろいろ探してこちらにたどり着きました。
やろうと思ったことが実現できそうです。
ありがとうございました。
みるさん、コメントありがとうございます。
私もxcopyでの文字数制限には困っていました。
その後、GUI版Richcopyを試したのも同じだったりします。
robocopyは安心できますね!