2013年12月28日土曜日

日々のバックアップを手軽に取る方法(Robocopyを用いたbatファイル)

【前置き】

森理 麟さんが、
と、Robocopy(*)について疑問を呈されており、
普段Robocopyを使っている自分としては『しゃしゃり出るっきゃない!』
という感じだったので、自分が行っているNASへのバックアップ方法を紹介します。

(*) Vista以降のWindowsに標準で添付されているバックアップツール

【Robocopyの使い方(自分の場合)】

以下のbatファイルを作成して、デスクトップに置いています。


F:はローカルのドライブ、Z:はNASです。
写真フォルダ(Pictures)と音楽フォルダ(Music)のバックアップを取っています。
どちらも現時点で数百GBあり、クラウドに預けるとリストア時に時間がかかり不便なので家庭内のNASにバックアップを取っています。

余談ですが、ソースコードはGithubやBitbucketに、その他細々としたファイルはほぼ全てDropboxに放り込んでバックアップ代わりにしています。閑話休題。

Robocopyのパラメータについて

自分が用いているRobocopyの各パラメータの意味は以下の通りです。
  • /MIR
    • サブディレクトリを含めてミラーリング
       (ローカルと完全に同一となるように)
  • /R:0
    • コピーに失敗したら0回再試行
      (仮に一部コピーに失敗しても、ほぼ毎日バックアップをとるので少しくらいのエラーは無視で構わないと判断。また、NASやローカルのHDDが壊れてる場合などに再試行し出すととキリがないため。)
  • /NP
    • 進捗状況を表示しない
      (別に必要ないので)
  • /FFT
    • FAT ファイル時間 (2 秒の精度) を想定
      (このオプションがないと手元のNASでは、タイムスタンプが一致せず必要のないコピーを繰り返してしまうため)
オプションの中で/FFTは、家庭用NASがバックアップ先の場合には必須かと思います。

自作のBATファイルについて

自分のBATファイルでは、robocopyによるバックアップが終了すると、拙作のshutdown.exeを呼び出してWindowsが終了するようにしています。
※ 自分はアイコンが好き&毎回コールドブートさせたいので自作のshutdown.exeを使っていますが、Windows標準添付のshutdown.exeでOKです。

こうすると、shutdown代わりにこのbatを使えるので、バックアップにかかる時間を気にせずに済み楽ちんです。(即座にshutdownさせたいとき用に、shutdown.exe単体も置いたままにしています。)

デスクトップに配置した様子

【余談】

OSの再インストールや、使う端末が複数ある場合を考慮して、なるべく手軽に(OS標準の機能のみを用いて)実行できる方法を探したところ、こんな形に落ち着きました。
もっといい方法があるよ!などありましたらお教え頂けますと幸いです。

余談1

バックアップ時のログを見たい場合は下記のようにすると、ログをファイルに書き出せます。


余談2

ローカルマシンとNASとは、GigabitEtherで直接繋いでます。
無線LAN(11n; 450Mbps)経由にすると、だいぶ遅く使用に堪えなかったためです。