まともなWindows Server バックアップを無料で実現する方法

Windows Server
スポンサーリンク

OS標準ツールの「Windows Server バックアップ」は無料で使える反面、市販のバックアップツールと比較して様々な制約があります。この辺りは以前の記事で紹介したところです。データの整合性を確保したボリュームバックアップができる点は、robocopyなどのコピーコマンドにはない利点です。しかし、ネットワーク経由の場合、世代バックアップができません。この欠点を、工夫で補う例を紹介します。

バックアップ要件の例

機器構成

バックアップ元はファイルサーバーです。ストレージ障害に備えデータ(D:\)を、別筐体のサーバー(or PC)の共有フォルダにバックアップします。

いつ時点のデータから戻せるようにしておくか

障害に備え、毎日バックアップします。そして、次のいずれの時点からでも戻せるようにします。

  • 本日AM2:00 時点
  • 前日AM2:00 時点
  • 直近の日曜日AM2:00時点(本日が日曜日なら、先週日曜日AM2:00時点)

基本的には本日AM2:00時点のデータから戻します。ただし、「前日の夜にランサムウェアによってデータが全てロックされていた」という場合は前日AM2:00時点に戻します。あるいは「3日前の火曜日に誤って重要なファイルを消してしまったことに気付いた」という場合は直近の日曜日AM2:00時点のデータから復旧します。

設定例

バックアップ用バッチファイルの準備

バックアップ元のファイルサーバーに「C:\backup_script」フォルダを作り、4つのバックアップ用バッチファイルを配置します。

4つの中身は以下の通りです。どれもほぼ同じで、バックアップ先のパスとログファイル名だけが異なります(太字の部分)。

【ファイル名:backup-Daily1.bat】

cd %~dp0
wbadmin start backup -backupTarget:"\\192.168.50.1\backup\Daily1" -include:d: -user:bkuser -password:P@ssw0rd -quiet > log\backuplog_Daily1.txt 2>&1
【ファイル名:backup-Daily2.bat】

cd %~dp0
wbadmin start backup -backupTarget:"\\192.168.50.1\backup\Daily2" -include:d: -user:bkuser -password:P@ssw0rd -quiet > log\backuplog_Daily2.txt 2>&1
【ファイル名:backup-Weekly1.bat】

cd %~dp0
wbadmin start backup -backupTarget:"\\192.168.50.1\backup\Weekly1" -include:d: -user:bkuser -password:P@ssw0rd -quiet > log\backuplog_Weekly1.txt 2>&1
【ファイル名:backup-Weekly2.bat】

cd %~dp0
wbadmin start backup -backupTarget:"\\192.168.50.1\backup\Weekly2" -include:d: -user:bkuser -password:P@ssw0rd -quiet > log\backuplog_Weekly2.txt 2>&1

タスクスケジューラの設定

タスクスケジューラで、次のように4つのタスクを作ります。それぞれ上記の対応するバッチファイルを実行します。

<タスクの詳細…Backup-Daily1 の場合>

他のタスクの設定も同様です。Backup-Weekly1, Backup-Weekly2 のスケジュールは、次のようにしています。2つのタスクを毎週交互に実行させるために、開始日を1週ずらして「2週間に1回」の設定としています。

設定例のバッチ・タスクのダウンロード

手っ取り早く、上記の設定をしたい場合、以下のダウンロードリンクからファイルを取り込んで下さい。タスクのインポート方法は、タスクスケジューラで右クリックし[タスクのインポート]から、XMLファイルを指定することで可能です。

解説

世代バックアップ

Windows Server バックアップでは、保存先を共有フォルダとした場合、世代バックアップができません。そのため、4つの保存フォルダを分け、タイミングによって保存先を変えています。こうすることで、無理やり世代バックアップを実現させています。ただし、増分バックアップはできません。毎回フルバックアップになるため、バックアップ対象の4倍のデータ容量が、保存先でが必要になります。

バックアップから戻せる時点

この例では、4世代でありながら1週間程度前の時点にも戻れるようにしています。もし4つのフォルダに対して毎日順繰りに保存した場合、4日程度前にしか戻れません。「誤って重要なデータを上書きしていた」といったミスは、遅れて気づくことも多いと思いますので、前日以外に1週間程度前のデータが残っていると安心です。

この方式は保存容量が多くなりますので(毎回フルバックアップ)、世代数を少なくする工夫をしたわけです。もちろん保存先に潤沢な容量があれば、曜日ごとのフォルダを用意して、7世代としてもOKです。

バックアップログ

バッチファイルの標準出力・標準エラーを、テキストファイルにリダイレクトしていますので、直近の成否を確認できます。この例では、過去のログは上書きしていますが、バッチファイルを編集して、ログファイル名に日付を付加すれば、過去ログも残ります。

この例では、定期的にバックアップログを開いて確認する必要があります。ですが、市販のバックアップソフトのように、メールでバックアップの成否を通知できた方が便利です。この場合は、バッチファイルをPowerShellスクリプトなどにして、ログをメール送信するようにする必要があります。

保存先の共有フォルダ

この例では、バックアップ先はWindows OSのサーバー/PCとしています。市販のLinux系NASであれば、安価で済みますが、以前の記事で解説した通り、Windows Server バックアップではエラーになることが多いため避けています。NASを使うとすれば、Windows Storage Serverを搭載したNAS(Linux系NASより高価)にするか、あるいはArcserve UDPなどの有償のバックアップソフトを使用する必要があります。

スクリプトのシンプルさ

この例では、実行タイミングごとにタスクとバッチファイルを分けています。「こんなダサいことしないで、1つのスクリプトで処理を分岐すればいいだろう」と思うかもしれません。それも正解だと思います。どちらがシンプルで運用しやすいか、運用要員の構成やスキルで変わってくるかと思います。

別筐体のサーバーがバックアップストレージを兼ねる案

別筐体のWindows Serverがある場合、いっそバックアップ用のHDDを追加するとトータルコストが抑えられる場合もあります。通常、サーバー機のHDD(SAS接続 10~15krpm)は、信頼性や性能が高いぶん高価です。しかし、グレードの低いHDD(SATA接続 7.2krpm)はそれより安価で、バックアップ用途には最適です。サーバー購入時にハードウェアベンダーに相談して、追加搭載してもらっておくと、バックアップストレージを兼ねることもできます。こうすると、機器の数が少なくなり、まとめて保守ができますので、運用の負荷も抑えられます。

フィードバック

コメント

タイトルとURLをコピーしました