1日に何度もスクリプトを実行したいシナリオ今回は、RoboSyncで、シンプルなフルバックアップ3世代の設定をしてみます。バックアップシナリオ1日1世代のフルバックアップ(ミラーコピー)を作成。3世代分(3日分)を保存。シンプルな世代ローテーション設定まず最初に、シンプルな3世代のローテーションによるフルバックアップ設定例を示します。この設定では、フルバックアップをミラーコピー(/MIR)を使ってコピーします。1つ前の世代をフォルダ「1」、2つ前の世代をフォルダ「2」にします。バックアップ実行ごとに、フォルダ名を1世代ずつシフトしていき、3世代前以前のフォルダは削除されます。バックアップの目的によってはこの設定で十分なケースもあると思いますが、いくつか改善できるポイントがありますので、以降で考えてみたいと思います。バックアップ時間を短縮するバックアップ対象が非常に大きなデータサイズであった場合、毎回全ファイルをコピーしていると非常に時間がかかることになります。コピーにかかる時間を短縮するために、以下の改善を行います。削除していた3世代前のバックアップを、削除してしまうのではなく、フォルダ「0」に持ってきています。フォルダ「0」へのフルバックアップ作業を、全ファイルコピーするのではなく、3世代前のバックアップをベースに差分のあるファイルのみコピーを実行する、というものです。このrobocopyのコマンドがミラーコピー(/MIR)となっていますので、削除されたファイルも含めて、完全なコピーができあがります。ケースによりますが、3世代前のバックアップですが、1から全てコピーするよりは、処理をかなり高速化できるはずです。1日に何度もスクリプトを実行したい毎日決まった時間、決まった回数でバックアップスクリプトを走らせることができれば、上記設定でも問題は起こらないと思います。安全な運用を考えた場合、想定外の条件でスクリプトが実行されたことも考えておく必要があります。上記バックアップ処理を3回連続して実行してしまった場合、過去の世代のバックアップは消えてしまい、現時点の同じバックアップが3つできてしまうことになります。今日、一度フルバックアップを行ったが、その後作業したので、もう一度フルバックアップに残しておきたい、というケースもあり得ると思います。ここでは以下の要件を満たすように設定を作ってみたいと思います。考慮ポイント同じ日であれば、何度スクリプトを実行しても、1つの世代としてバックアップを作成する。シンプルな条件なので簡単にできそうなのですが、これを実現するためには、フォルダ0の日付と現在の日付を比較したり、条件分岐処理したりする必要があり、シェルスクリプトではかなり面倒なことになります。powershellを使った設定をしてみたいと思います。バクアップ先のフォルダ名を設定しています。いうような名前になります。同じ日に実行されるスクリプトは全てこのフォルダ上に上書きされていきます。うち、最近のものから数えて3番目のフォルダを今回のバックアップ先フォルダ名に変更する。いう処理を実行します。前の章で触れた、一番古い世代を今回のコピーのベースとして使い、差分のみコピーするようにして短時間で終わらせるようにしています。実行後スクリプトでは、最初の行で、バックアップを実行したタイムスタンプを、TimeStamp.txtというファイルに出力します。このように明示的にタイムスタンプを記録しているのは、同じ日に何度もスクリプトを起動でき、同じフォルダに何度も上書きが行われるため、最後にいつ実行されたか分からなくなる可能性があるためです。3世代以上前のバックアップは削除されます。