« 当たり前のことをあえて文章にする | トップページ | システムダウンの英語表現 »

2008年3月23日

robocopyでデータ移行、そしてフォルダ同期

ThinkPad T42のハードディスクが手狭になってきたので、500GBの外付けハードディスクを買ってきた。ThinkPadのハードディスクを換装したあとに残った40GBと80GBの2.5インチハードディスクをHDDケースに入れたものもある。この3台を使い分けることにした。一番容量を食っているのがiTunesのライブラリだ。40GB近い。これを80GBに追い出して、80GBに入っていた諸々のバックアップを500GBに移すことにする。

データ移行はエクスプローラのドラッグ&ドロップでやっていたが、これでは芸がない。Windowsリソースキットツールのrobocopyをこの機会に覚えることにした。日々のバックアップはxcopyやMFSyncでやっていたのだが、robocopyのバッチも作った。バックアップ方法は差分バックアップとする。T42やiTunesライブラリで追加・変更されたファイルだけを500GBにコピーする。

robocopyで差分バックアップするときのパラメータはこれが基本だ。

/e /xo /log+:<ログファイル> /np /tee


  • /e:空ディレクトリも含めてサブディレクトリをコピーする。
  • /xo:コピー先のタイムスタンプが新しい場合はコピーしない。どういうわけか、robocopyでコピーした先のタイムスタンプが元のファイルより古くて(エクスプローラの表示上は同一だが)、バックアップのたびに同じファイルをコピーするという現象が起きた。これを回避するためのオプション。
  • /log+:ログファイルに追記する。ログファイルは日付時刻を含んだ名前にする(下記参照)。
  • /np:コピー進捗率をログに表示しない。デフォルトでは、コピーした割合が10%、20%と表示される。画面で見る限りは便利なのだが、不要な行がログファイルに大量に出力される。これを回避するためのオプション。
  • /tee:デフォルトでは、ログファイルに出力すると画面に何も表示されず、進捗がわかりにくい。/teeを付けるとログファイルと画面の両方にメッセージが記録される。

差分バックアップ運用を続けていると、コピー元から削除したがバックアップ先に残っているというファイルがだんだんたまってくる。だからバックアップなのだが、バックアップ先の容量が肥大化しすぎないように、ときどき整理する必要がある。

コピー元とコピー先を同じディレクトリ構造に同期するには、/purgeオプションを使う。ただし、いきなりコピー先のファイルを削除するのは危険なので、どのファイルが削除されるかをチェックしてからにしたほうがいい。そのためのオプションはこうなる。

/e /xo /log+:<ログファイル> /np /tee/purge /l /nocopy


  • /purge:コピー先だけに存在するファイルを削除する。
  • /l:ログ出力のみでコピーしない
  • /nocopy:/lで十分と思われるが、念のためにコピーしないオプションも付けておく。

ログで「EXTRA」とマークされているファイルが削除対象だ。確認したあと、/lと/nocopyをを付けずに実行すればよい。

バックアップのログファイル名は、日付時刻を付加した「backup_20080322_130401」の形式にしたい。Windowsバッチファイルでこういうファイル名を使う方法は、@ITの次の記事を参考にした。

「バッチ・ファイル中で日付をファイル名に使用する」
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

以下の3行をバッチファイル先頭に記述し、robocopyに「/log+:%FNAME%」オプションを指定すればよい。

SET DT=%date%
set TIME2=%time: =0%
SET FNAME=D:\backup_log\itunes_%DT:~0,4%%DT:~5,2%%DT:~8,2%_%time2:~0,2%%TIME2:~3,2%%time2:~6,2%.txt

|

« 当たり前のことをあえて文章にする | トップページ | システムダウンの英語表現 »

コメント

>どういうわけか、robocopyでコピーした先のタイムスタンプが元のファイルより古くて(エクスプローラの表示上は同一だが)、バックアップのたびに同じファイルをコピーするという現象が起きた。

外付けHDDのファイルシステムはなんでしょうか?
FATだと以下のような問題が該当するかもしれません。

NTFS から FAT へコピーされるとき、タイムスタンプが変更されます。
http://support.microsoft.com/kb/127830/ja

投稿: | 2008年6月30日 00時37分

ThinkPadはNTFS、バックアップ先はFAT32です。/xoなしでコピーされるファイルのタイムスタンプを秒単位で確認したら、ソースとターゲットで2秒違っていました。どうやらこの技術情報が該当するようです。どうもありがとうございました。

投稿: raven | 2008年6月30日 22時21分

この記事へのコメントは終了しました。

« 当たり前のことをあえて文章にする | トップページ | システムダウンの英語表現 »