今回は、RoboSyncで、シンプルなフルバックアップ3世代の設定をしてみます。
バックアップシナリオ
まず最初に、シンプルな3世代のローテーションによるフルバックアップ設定例を示します。
この設定では、フルバックアップをミラーコピー(/MIR)を使ってコピーします。コピー先フォルダは、Z:\backup\My Data 配下のフォルダ 「0」 に作成します。1つ前の世代をフォルダ「1」、2つ前の世代をフォルダ「2」にします。バックアップ実行ごとに、フォルダ名を1世代ずつシフトしていき、3世代前以前のフォルダは削除されます。
バックアップの目的によってはこの設定で十分なケースもあると思いますが、いくつか改善できるポイントがありますので、以降で考えてみたいと思います。
バックアップ対象が非常に大きなデータサイズであった場合、毎回全ファイルをコピーしていると非常に時間がかかることになります。少しでもコピーにかかる時間を短縮するために、以下の改善を行います。
削除していた3世代前のバックアップを、削除してしまうのではなく、フォルダ「0」に持ってきています。つまり、フォルダ「0」へのフルバックアップ作業を、全ファイルコピーするのではなく、3世代前のバックアップをベースに差分のあるファイルのみコピーを実行する、というものです。このrobocopyのコマンドがミラーコピー(/MIR)となっていますので、削除されたファイルも含めて、完全なコピーができあがります。ケースによりますが、3世代前のバックアップですが、1から全てコピーするよりは、処理をかなり高速化できるはずです。
毎日決まった時間、決まった回数でバックアップスクリプトを走らせることができれば、上記設定でも問題は起こらないと思います。しかし、より安全な運用を考えた場合、想定外の条件でスクリプトが実行されたことも考えておく必要があります。
例えば、上記バックアップ処理を3回連続して実行してしまった場合、過去の世代のバックアップは消えてしまい、現時点の同じバックアップが3つできてしまうことになります。今日、一度フルバックアップを行ったが、その後作業したので、もう一度フルバックアップに残しておきたい、というケースもあり得ると思います。
ここでは以下の要件を満たすように設定を作ってみたいと思います。
考慮ポイント
シンプルな条件なので簡単にできそうなのですが、これを実現するためには、フォルダ0の日付と現在の日付を比較したり、条件分岐処理したりする必要があり、シェルスクリプトではかなり面倒なことになります。確かに、頑張って長いスクリプトを作ればできなくはないのですが、スクリプト作成ミスによる事故のリスクも生じてきますので、ここでは、思い切って powershellを使った設定をしてみたいと思います。
実行前スクリプト
cd /d "Z:\backup\My Data" set dest=%date:/=%-full powershell -command "if(!(Test-Path %dest%)){dir *-full | sort -Descending | select -Skip 2 -First 1 | ren -NewName %dest%}"
実行後スクリプト
echo %date% %time% > "%dest%\TimeStamp.txt" powershell -command "dir *-full | sort -Descending | select -Skip 3 | del -recurse"
実行前スクリプトでは、まず、カレントディレクトリを変更し、環境変数 dest にバクアップ先のフォルダ名を設定しています。フォルダ名は、今日の日付に-fullを付けた "20200112-full" というような名前になります。同じ日に実行されるスクリプトは全てこのフォルダ上に上書きされていきます。
最後のpowershellのコマンドは、powershell を知らなくても何となく読み取れると思いますが、「バックアップ先フォルダが存在しなければ、フルバックアップのフォルダ(*-full) のうち、最近のものから数えて3番目のフォルダを今回のバックアップ先フォルダ名に変更する。」 という処理を実行します。つまり、前の章で触れた、一番古い世代を今回のコピーのベースとして使い、差分のみコピーするようにして短時間で終わらせるようにしています。
実行後スクリプトでは、最初の行で、バックアップを実行したタイムスタンプを、TimeStamp.txtというファイルに出力します。このように明示的にタイムスタンプを記録しているのは、同じ日に何度もスクリプトを起動でき、同じフォルダに何度も上書きが行われるため、最後にいつ実行されたか分からなくなる可能性があるためです。
最後のpowershellのコマンドは、「*-full のうち、最も最近の3つ以外は全て削除する」 という処理です。3世代以上前のバックアップは削除されます。
いかがでしょうか。是非やってみてください。
RoboSync: RobocopyのためのGUIツール
本サイトで公開しているツールです。ダウンロードはこのバナーをクリック!
Version 1.3.27 をリリースしました! (2021/1/1)
RobocopyをGUIから実行できるようにするツールです。コマンドプロンプトを表示することなく、GUI画面からほぼマウス操作だけで実行までできます。
Robocopyがバックグラウンドでそのまま実行されますので設定に迷うことはありません。
・ 複数のコピー項目の作成と管理。
・ スクリプトファイル(バッチファイル)出力が可能。スケジューラによるバックグラウンド処理にも使えます。
・ Robocopyによるコピー実行前に、実行プレビュー(/L)、パラメータのチェック(/QUIT)が可能。
・ Robocopyのパラメータ設定の簡易チェック、Robocopy実行前の簡易チェックを行います。
・ Robocopy実行前後で実行するスクリプトを定義可能。
・ Robocopy実行途中での中断、実行ログの履歴管理と保存が可能。
【関連記事・関連コンテンツ】