Windowsの自動バックアップ環境を構築します。
今回はラズパイのwakeonlanを用いて、windowsマシンを自動起動して、windowsの純正機能のrobocopyコマンドとタスクスケジューラーを用いて定刻にバックアップを自動実行させる方法をご紹介します。
ちなみにラズパイのwakeonlanの記事は以下からどうぞ。
※wakeonlanとは遠隔でPCを起動させる技術のことです。
バックアップ環境
バックアップ元:メインPC(Windows10)
バックアップ先:サブPC(Windows10)
今回は2台構成ですが、1台でも同じようにできます。
フローチャート
フローチャートというにはお粗末ですが、簡単に処理の流れを説明します。
- 定刻になったら、robocopyコマンドが書かれたbatを実行し、別のPCにバックアップを取得します。
- robocopyコマンドが完了したら、イベントIDを登録します。
- イベントIDをトリガーにシャットダウンを実行します。
- ポーリング処理でバックアップ先にpingを送って、返ってこなければシャットダウンを実行します。
バックアップ処理概要
フローチャート①・②・③の実装
batの作成
まずは、バックアップ処理用のバッチを作成し、適当なフォルダに保存します。
batの内容は以下のようです。remはコメント行になるので、記載は不要です。
robocopy <<バクアップ元>> <<バクアップ先>> /MIR /R:3 /W:1 rem ####バックアップ完了時にイベントビュアー書き込むIDとメッセージの指定### eventcreate /ID 999 /L Application /T SUCCESS /D "バックアップは正常に終了しました。" rem ################################################################# @ECHO OFF ECHO "バックアップが完了しました (Press `enter key')" SET /p c= @ECHO ON 記載例) robocopy D:\ \Winbksrv001\d /MIR /R:3 /W:1 eventcreate /ID 999 /L Application /T SUCCESS /D "バックアップは正常に終了しました。" @ECHO OFF ECHO "バックアップが完了しました (Press `enter key')" SET /p c= @ECHO ON
まずは1行目でバックアップフォルダと、バックアップ先のフォルダを指定してrobocopyコマンドでバックアップします。
3行目で、eventcreateコマンドでイベントIDとメッセージを登録します。
※999で問題ないと思いますが、イベントビュアーを見てIDが被らないように確認しましょう。
5行目以降は、手動で実行したときにコンソールに表示されるメッセージです。なくても問題ありません。
タスクスケジューラへの登録
タスクスケジューラとは、決まった時刻や決まった条件になったときにプログラムを実行するためのものです。Windows純正のcronみたいなものです。
スタートメニュー内に『タスクスケジューラ』があるので起動します。
起動したらタスクスケジューラに作成したバッチを登録します。
主な設定項目は、時間と起動スクリプトです。時間は各自でバックアップしたい日時を指定してください。起動スクリプトは上記で作成したbatを指定します。
イベントIDが登録されたときに、シャットダウンを実行するようにします。
wakeonlanと合わせれば、完全に自動化できるようになります。
ここまでで、フローチャートの①・②・③の部分の実装が完了です。
フローチャート④の実装
下記がポーリング処理のバッチです。バックアップ先に仕込んでおくバッチです。
バックアップ開始の30分後に起動するようにタスクスケジューラに仕込みます。
以下のバッチはほかの方が作成されたものをコピペしてちょっと改造したものです。
処理の内容は確か、応答がある間はpingを投げ続けます(下の例だと100回まで実行します)。
応答がなければ5分後にシャットダウンが実行されます。
@echo off set COUNT=0 :error set /a COUNT=COUNT+1 echo %COUNT% if "%COUNT%" == "100" goto errorout ping 192.168.1.11 | FINDSTR "ms TTL=" > NUL if ERRORLEVEL 1 goto notrespond timeout /t 5 > nul goto error :notrespond shutdown -s -t 300 goto end :errorout echo host not stop :end
以上でバックアップ環境は完了です。
タスクスケジューラ含むWindows純正のコマンド等で、完全にバックアップ環境を自動化することができます。
※wakeolanはlinuxのcron経由です。
ちなみに、今回紹介したbatで自動バックアップ環境を構築した場合、バックアップ元の電源が落ちていなければ、バックアップ先の電源も自動で落ちません。
バックアップ元のPCで作業していた場合は、手動でバックアップ先の電源を落とす必要があります。そこは課題ですね。
コメント