sea side she side

写真と山、資格が好きなアラフォーエンジニアのブログ

robocopyでWindows ディスクバックアップ

      2013/03/13

それほど大事でもないバックアップもRAIDも組んでいないHDDが飛びました。はっきり言ってこれならsystemドライブが死んでくれる方が手間はかかってもましだったなぁと思うものの、S.M.A.R.T.でエラー吐いてたの知っててめんどくさがって交換しなかった上に自分で決めた2年以上回さないというルールも破っていたので仕方ありません。

ってなことでRAIDカード入れてない方のPCなので違うディスクに突っ込むことに。rsyncっぽいのがいいなと思いつつ調べてみるとWindows標準でrobocopyというのがあるようです。

 robocopy 転送元 転送先

コマンドはこんな感じ。やりたいことはミラーリングに近いので以下のように。

 robocopy D:\ E:\backup /mir /tee /xo /fft /xd "System Volume Information" "$RECYCLE.BIN" "RECYCLER" "Robocopy.log" /log:D:\Robocopy.log

・/MIR :: ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)。
・/XO :: 古いファイルを除外します。
・/FFT :: FAT ファイル時間 (2 秒の粒度) を仮定します。
・/XD ディレクトリ [ディレクトリ]... :: 指定された名前/パスに一致するディレクトリを除外します。
・/LOG:ファイル :: ログ ファイルに状態を出力します (既存のログを上書きします)。

DドライブをEドライブのbackupフォルダにミラーリングします。そのまま実行すると進行状況がまったく表示されないので/teeオプションで表示させています。

またわかりやすいようにEドライブ指定に変更していますが、実際にはNFS先にコピーしているのですがタイムスタンプの精度が悪く、/FFTで2秒前後しててもファイル変更無し扱いにしています。

あと/XDオプションでシステムに紐付くものやゴミ箱などを除外しています。またログファイルに関してもsyncする必要は特にないので除外しています。

で最後の引数がログファイル。上書きではなく追加の場合は/LOG+を使います。ファイルサイズが大きくなりすぎるし、動作しているかの確認と万が一の時ぐらいなので上書きです。

これをメモ帳なりなんなりで.batファイルとして保存します。

あとはWindows版cronのタスクスケジューラへ突っ込むだけ。

 スタート→プログラム→アクセサリ→システムツール→タスクスケジューラ
 タスクの作成→操作タブ→新規→プログラム/スクリプトを参照、上記.batを選択→OK
 トリガータブ→毎日をクリック→開始時刻を指定→繰り返し間隔のチェックを外す→有効期限のチェックを外す→OK

夜中0時前後は色々触っている可能性があるので早朝4時で設定しました。

もう少し.batファイルをうまく書けばログを日付ファイル名にしたりすることができると思いますが、私はそこまで必要ないので作り込んでません。

初回のみ時間がかかるかと思いますが、次回以降は差分のみの処理になるかと思います。

これで悲しい思いをしなくてすみそうです。

<<参考>>
・y_moriokaのblog:HDD追加に伴うデータコピーでrobocopyを使用
・時の過ぎ行くままに:[パソコン]robocopyまとめ
・私家版 ITプロフェッショナルの仕事術:robocopyでデータ移行、そしてフォルダ同期
・GeekなNooblog:[Windows] Robocopyでフォルダを同期する方法

 - IT ,