Windows – ROBOCOPYとタスクスケジューラでファイルを安全にバックアップする




この記事は約21分で読めます。
スポンサーリンク




「Windows Storage Server」や「Windows Server」をストレージサーバーとして使用していて、そのファイルバックアップを考えた時に、「Windows Server バックアップ」は簡単に設定でき、世代管理も行えるので便利なのですが、万が一、サーバーがクラッシュした時に、バックアップデータを回復させるまでデータを使用できない(バックアップデータを直接使えない)点が不便です。
そこで、「Windows Server バックアップ」に加えて、VPN網にある他拠点に置く別のNASにROBOCOPYでバックアップをとることにしました。別の拠点へのバックアップは、災害対策にも有効です。

同時に、バックアップ日付をファイル名に含むログファイルを生成します。

スポンサーリンク

hostsファイルにバックアップ先NASの名前解決を追加する

まずはバックアップ元のサーバーからバックアップ先の名前解決を行うために、バックアップ元のシステムドライブにある hosts ファイルに追記します。
デフォルトでは %windir%\system32\drivers\etc の中に hosts ファイル(拡張子なし)があります。

その hosts ファイルをデスクトップなど任意の場所にコピペし、以下のように追記して上書き保存し、元のファイル( %windir%\system32\drivers\etc\hosts )に上書きコピーします。

192.168.0.100 BACKUP-NAS-NAME の行が追記部分です。それぞれ、

192.168.0.100
バックアップ用NASの実際のIPアドレス
BACKUP-NAS-NAME
バックアップ用NASの実際のホスト名

に置き換えて追記します。

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
	192.168.0.100	BACKUP-NAS-NAME
#	127.0.0.1       localhost
#	::1             localhost

ROBOCOPYのバッチファイルを作る

メモ帳などのテキストエディタに下記をコピペし、BACKUP-NAS-NAME を 実際のホスト名に変更し、ログファイル名なども必要に応じて変更して、ファイル名を拡張子.bat(例えば robocopy.bat など)として任意の場所に保存します。

set logfile="\\BACKUP-NAS-NAME\Backup_log\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup.log"
robocopy "D:\Share" "\\BACKUP-NAS-NAME\share" /MIR /R:0 /W:0 /LOG:"%logfile%" /NP /NDL /TEE /XJD /XJF /DCOPY:T /COPY:DT /FFT

解説

下記の部分は任意のパスに任意のファイル名でログファイルを生成します。

set logfile="\\BACKUP-NAS-NAME\Backup_log\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup.log"
set logfile
変数の設定
\\BACKUP-NAS-NAME\Backup_log\
ログファイルを保存するフォルダまでのパスです。ここでは、ホスト名が BACKUP-NAS-NAME というNASの Backup_log フォルダ内に保存します。
%date:~0,4%-%date:~5,2%-%date:~8,2%_backup.log
実行した日付を含むログファイルのファイル名です。
ファイル名に”/”は使えないので次のように年月日をそれぞれ取得して間に”-“を入れています。また、環境変数は%で囲みます。

%date:~0,4%
dateコマンドで取得される日付(例:2020/01/31)の先頭の文字(先頭文字が0となり、2番目の文字から1,2,3…となります)から4文字です。つまり年(例:2020)の部分となります。
%date:~5,2%
dateコマンドで取得される日付(例:2020/01/31)の6番目の文字(先頭文字が0なので、6番目の文字は5となります)から2文字です。つまり月(例:01)の部分となります。
%date:~8,2%
dateコマンドで取得される日付(例:2020/01/31)の9番目の文字(先頭文字が0なので、9番目の文字は8となります)から2文字です。つまり日(例:31)の部分となります。

以下は robocopy コマンドの部分です。

robocopy "D:\Share" "\\BACKUP-NAS-NAME\share" /MIR /R:0 /W:0 /LOG:"%logfile%" /NP /NDL /TEE /XJD /XJF /DCOPY:T /COPY:DT /FFT

コピー元のパス、コピー先のパス、オプションが設定されています。

robocopy
robocopy コマンド
D:\Share
コピー元のパス。DドライブのShareフォルダの中身がコピー先にコピーされます。
\\BACKUP-NAS-NAME\share
コピー先のパス。コピー元データが、ホスト名:BACKUP-NAS-NAME のNASのshareフォルダ内にコピーされます。

オプション

コピーオプション
/MIR
ディレクトリツリーをミラー化。
/DCOPY:T
ディレクトリにタイムスタンプをコピーする。
/COPY:DT
ファイルにデータとタイムスタンプをコピーする。
再試行オプション
/R:0
失敗したコピーに対する再試行数を0回とする。
/W:0
再試行と再試行の間の待機時間を0秒とする。
ログオプション
/LOG:”%logfile%”
ログファイルに状態を出力(既存のログを上書き)。ファイル名には前述の環境変数名が入る。
/NP
進行状況(コピーの完了率)を表示しない。
/NDL
ディレクトリ名をログに記録しない。
/TEE
コンソールウィンドウとログファイルに出力。
ファイル選択オプション
/XJD
ディレクトリのジャンクション(ファイルやフォルダへのリンク)を除外。これを設定しないと無限コピーに陥る可能性大なので必須。
/XJF
ファイルのジャンクション(ファイルやフォルダへのリンク)を除外。/XJD 同様、無限ループ対策。
/FFT
2秒以内の誤差を、時刻情報の一致と見なす。

robocopy コマンドは、2つのフォルダの内容を同期し、ファイルやフォルダの内容を同じ状態に保つ機能で、ファイルサーバなどのデータのバックアップや同期に利用されます。
robocopy は Robust File Copy(堅牢性の高いファイルコピー)の略で、非常に多機能で、特に、属性やセキュリティ設定のコピーが行えることと、コピー先にある余分なファイルの削除、動作ログがとれることがメリットです。他にも多くのオプションがあり、コマンドプロンプトにて robocopy /? でヘルプ(下記)が表示されます。

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

  開始: 2020年2月12日 10:09:35
              使用法:: ROBOCOPY コピー元 コピー先 [ファイル [ファイル]...]
                       [オプション]

           コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー
                       \共有\パス)。
           コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー
                       \共有\パス)。
           ファイル :: コピーするファイル (名前/ワイルドカード: 既定値は「*.*」
                       です)

::
:: コピー オプション:
::
                 /S :: サブディレクトリをコピーしますが、空のディレクトリはコピ
                       ーしません。
                 /E :: 空のディレクトリを含むサブディレクトリをコピーします。
             /LEV:n :: コピー元ディレクトリ ツリーの上位 n レベルのみをコピーし
                       ます。

                 /Z :: 再起動可能モードでファイルをコピーします。
                 /B :: バックアップ モードでファイルをコピーします。
                /ZB :: 再起動可能モードを使用します。アクセスが拒否された場合、
                       バックアップ モードを使用します。
                 /J :: バッファーなし I/O を使用してコピーします (大きなファイル
                       で推奨)。
            /EFSRAW :: 暗号化されたすべてのファイルを EFS RAW モードでコピーし
                       ます。

 /COPY:コピーフラグ :: ファイルにコピーする情報 (既定値は /COPY:DAT)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
                       (S= セキュリティ =NTFS ACL、O= 所有者情報、U= 監査情報)。


               /SEC :: セキュリティと共にファイルをコピーします (/COPY:DATS と
                       同等)。
           /COPYALL :: ファイル情報をすべてコピーします (/COPY:DATSOU と同等)。
            /NOCOPY :: ファイル情報をコピーしません (/PURGE と共に使用すると便
                       利)。
            /SECFIX :: スキップしたファイルも含むすべてのファイルのファイル セ
                       キュリティを修正します。
            /TIMFIX :: スキップしたファイルも含むすべてのファイルのファイル時刻
                       を修正します。

             /PURGE :: 既にコピー元に存在しないコピー先のファイル/ディレクトリ
                       を削除します。
               /MIR :: ディレクトリ ツリーをミラー化します (/E および /PURGE と
                       同等)。

               /MOV :: ファイルを移動します (コピー後にコピー元から削除)。
              /MOVE :: ファイルとディレクトリを移動します (コピー後にコピー元か
                       ら削除)。

     /A+:[RASHCNET] :: コピーされたファイルに指定の属性を追加します。
     /A-:[RASHCNET] :: コピーされたファイルから指定の属性を削除します。

            /CREATE :: ディレクトリ ツリーと長さ 0 のファイルのみを作成します。
               /FAT :: 8.3 FAT ファイル名のみを使用してコピー先ファイルを作成し
                       ます。
               /256 :: 256 文字を超える非常に長いパスのサポートをオフにします。

             /MON:n :: コピー元を監視し、n 回を超える変更があった場合に再度実行
                       します。
             /MOT:m :: コピー元を監視し、m 分後に変更があった場合に再度実行
                       します。

      /RH:hhmm-hhmm :: 実行時間 - 新しいコピーを開始できる時刻です。
                /PF :: 実行時間をファイルごと (パスごとではない) に確認します。

             /IPG:n :: 低速回線で帯域幅を解放するためのパケット間ギャップ (ミリ
                       秒)。

                /SL :: 対象ではなくシンボリック リンクをコピーします。

            /MT[:n] :: n 個のスレッドのマルチスレッド コピーを実行します
                       (既定値 8)。
                       n は 1 から 128 までの値である必要があります。
                       このオプションは、/IPG および /EFSRAW オプションと互換性
                       がありません。
                       パフォーマンスの向上のため、/LOG オプションを使用して出力
                       をリダイレクトします。

/DCOPY:コピーフラグ :: ディレクトリにコピーする情報 (既定値は /DCOPY:DA)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。

           /NODCOPY :: ディレクトリ情報をコピーしません (既定では /DCOPY:DA が
                       実行されます)。

         /NOOFFLOAD :: Windows のオフロードをコピーするメカニズムを使用せずに、
                       ファイルをコピーします。

::
:: ファイル選択オプション:
::
                 /A :: アーカイブ属性が設定されているファイルのみをコピーしま
                       す。
                 /M :: アーカイブ属性のあるファイルのみをコピーし、リセットしま
                       す。
    /IA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルのみを含
                       みます。
    /XA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルを除外し
                       ます。

/XF file [ファイル]... ::
                       指定された名前/パス/ワイルドカードに一致するファイルを
                       除外します。
/XD dir [ディレクトリ]... ::
                       指定された名前/パスに一致するディレクトリを除外します。

                /XC :: 変更されたファイルを除外します。
                /XN :: 新しいファイルを除外します。
                /XO :: 古いファイルを除外します。
                /XX :: コピー先にだけ存在するファイルとディレクトリを除外し
                       ます。
                /XL :: コピー元にだけ存在するファイルとディレクトリを除外し
                       ます。
                /IS :: 同一ファイルを含みます。
                /IT :: 異常なファイルを含めます。

             /MAX:n :: 最大ファイル サイズ - n バイトより大きいファイルを除外し
                       ます。
             /MIN:n :: 最小ファイル サイズ - n バイトより小さいファイルを除外し
                       ます。

          /MAXAGE:n :: 最長ファイル有効期間 - n 日より古いファイルを除外します。
          /MINAGE:n :: 最短ファイル有効期間 - n 日より新しいファイルを除外しま
                       す。
          /MAXLAD:n :: 最大最終アクセス日 - n で指定する値以後に使用していない
                       ファイルを除外します。
          /MINLAD:n :: 最小最終アクセス日 - n で指定する値以後に使用されたファ
                       イルを除外します。
                       (n < 1900 の場合、n = n 日です。それ以外は、n = YYYYMMDD
                       の日付です)。

                /XJ :: 接合ポイントとシンボリック リンクを除外します (通常は既定で含まれます)。

               /FFT :: FAT ファイル時間 (2 秒の粒度) を仮定します。
               /DST :: 1 時間の DST 時間差を補正します。

               /XJD :: ディレクトリの接合ポイントとシンボリック リンクを除外します。
               /XJF :: ファイルのシンボリック リンクを除外します。

::
:: 再試行オプション:
::
               /R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。
               /W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。

               /REG :: /既定の設定としてレジストリに R:n と /W:n を保存します。

               /TBD :: 共有名が定義されるのを待ちます (再試行エラー 67)。

::
:: ログ オプション:
::
                 /L :: リストのみ - いずれのファイルにも、コピー、タイムスタン
                       プの追加、または削除を実施しません。
                 /X :: 選択されたファイルのみではなく、余分なファイルをすべて報
                       告します。
                 /V :: スキップされたファイルを示す詳細出力を作成します。
                /TS :: 出力にコピー元ファイルのタイム スタンプを含めます。
                /FP :: 出力にファイルの完全なパス名を含めます。
             /BYTES :: サイズをバイトで出力します。

                /NS :: サイズなし - ファイル サイズをログに記録しません。
                /NC :: クラスなし - ファイル クラスをログに記録しません。
               /NFL :: ファイル リストなし - ファイル名をログに記録しません。
               /NDL :: ディレクトリなし - ディレクトリ名をログに記録しません。

                /NP :: 進行状況なし - コピーの完了率を表示しません。
               /ETA :: コピーするファイルの推定完了時刻を表示します。

      /LOG:ファイル :: ログ ファイルに状態を出力します (既存のログを上書きしま
                       す)。
     /LOG+:ファイル :: ログ ファイルに状態を出力します (既存のログ ファイルに
                       追加します)。

   /UNILOG:ファイル :: ログ ファイルに UNICODE で状態を出力します (既存のログを
                       上書きします)。
  /UNILOG+:ファイル :: ログ ファイルに UNICODE で状態を出力します (既存のログに
                       追加します)。

               /TEE :: コンソール ウィンドウとログ ファイルに出力します。

               /NJH :: ジョブ ヘッダーがありません。
               /NJS :: ジョブ要約がありません。

           /UNICODE :: 状態を UNICODE で出力します。

::
:: ジョブ オプション:
::
      /JOB:ジョブ名 :: 名前の付いたジョブ ファイルからパラメーターを取得します。
     /SAVE:ジョブ名 :: 名前の付いたジョブ ファイルにパラメーターを保存します。
              /QUIT :: コマンド ラインの処理後に終了します (パラメーターの表示の
                       ため)。
              /NOSD :: コピー元ディレクトリを指定しません。
              /NODD :: コピー先ディレクトリを指定しません。
                /IF :: 後続のファイルを含みます。

::
:: 注釈 :
::
       ボリュームのルート ディレクトリに対して /PURGE または /MIR を使用すると、これまでは、
       robocopy は要求された操作をシステム ボリューム情報ディレクトリ内のファイル
       にも適用していました。この動作は変更されました。
       どちらかを指定すると、robocopy はその名前を持つファイルまたはディレクトリを
       (コピー セッションの最上位レベルのソースと宛先ディレクトリで) スキップします。

作成したバッチファイルを実行するとバックアップが開始されます。
次に、このバックアップをタスクスケジューラで定期的に行う方法を解説します。

タスクスケジューラで実行して定期的にバックアップする

上記で作成したバッチファイルをタスクスケジューラで実行して定期バックアップをとります。

検索ボックス(ここに入力して検索)に taskschd と入力してEnter押下、またはコントロールパネル > [管理ツール] などでタスクスケジューラを開きます。
Windows Server なら、サーバーマネージャーから開くことも可能です。

サーバーマネージャー > タスクスケジューラ

タスクスケジューラを開いたら、右側にある[タスクの作成]をクリックします。

タスクの作成
タスクの作成

[タスクの作成]のそれぞれのタブを設定します。
[条件][設定]はデフォルトのままで良いと思います。

タスクの作成 全般

[全般]タブ
名前
タスクの名前
説明
タスクの説明
ユーザーがログオンしているかどうかに関わらず実行する
選択する
最上位の特権で実行する
チェックする

タスクの作成 トリガー

[トリガー]タブ
タスクの開始
タスクを開始するタイミング。ここでは[スケジュールに従う]を選択。
設定
タスクを実行する頻度。ここでは[毎日]としました。

開始
タスクを開始する日時(上記の設定で[1回]以外を選択すると、開始日時の翌日以降も、同時刻に実行される)。ここでは 20:00:00 としました。
間隔
タスクを実行する間隔。何日おきに実行するか…です。
詳細設定
停止するまでの時間
実行時間に制限を設けて制限時間を超えたら停止させる場合。コピーするファイルの合計サイズにもよると思います。
有効
チェックする。チェックしないと実行されません。

タスクの作成 操作

[操作]タブ
操作
プログラムの開始
設定
プログラム/スクリプト
実行するバッチファイル。ここでは、Dドライブのバッチファイルフォルダに robocopy.bat というファイル名で置いています。

上記設定で、毎日20:00になると D\バッチファイル\robocopy.bat が実行され、その robocopy.bat の設定に応じて、D:\Share の中にあるファイルとフォルダが、\\BACKUP-NAS-NAME\share にコピーされます。

以上、ご参考になれば幸いです。

コメント

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