セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ メモ. 明日のためのスクリプト: コマンドでバックアップ
2024年06月18日配信
2024年06月18日更新
執筆者:山内 和朗
Windows Serverのサーバーの機能「Windows Serverバックアップ」によるバックアップは、コマンドプロンプトやPowerShellで完全に代替できます。すべてのオプションを網羅することはできませんが、その勘所をメモしておきます。いつか役立つそのときに備えて。
Windows Serverのサーバーの機能「Windows Serverバックアップ」を使用すると、ベアメタル回復可能なシステムのバックアップやデータのバックアップ、Hyper-V仮想マシン(VM)のオンラインバックアップを、専用のディスク、またはボリューム、または共有フォルダーに取得することができます。1日1回以上の開始時間を指定するスケジュール実行の他、単発バックアップにも対応しています(画面1、画面2)。
画面1 バックアップ専用ディスク(F:)以外をすべてバックアップ対象に含める
画面2 1日1回、21:00にバックアップをスケジュール設定する
Windows Serverバックアップは、「wbadmin」スナップインを使用したGUIによるバックアップの他、WBADMINコマンドや、PowerShellのWindowsServerBackupモジュールのコマンドレットによるコマンドライン操作やバッチ/スクリプトによる操作も可能です。すべての操作方法を網羅することはできませんが、画面1、画面2のGUIでの選択を例に、スケジュールバックアップの設定と単発バックアップの方法を、WBADMINとPowerShellの両方で行ってみましょう。
wbadmin(Microsoft)
WindowsServerBackup(Microsoft)
画面1、画面2のGUIで選択した内容は、ベアメタル回復用のバックアップ(システム状態、EFIシステムパーティション、回復パーティション、C:ドライブ)とデータボリューム(D:ドライブ)のバックアップを、バックアップ専用ディスク(F:ドライブ)に対して、毎日21:00に開始する「カスタム」設定です。この設定は、「バックアップスケジュールウィザード」または「単発バックアップウィザード」で「サーバー全体(推奨)」を選択し、バックアップ専用ディスクをバックアップ対象から除外したものと同等と考えてください。
WBADMINでバックアップスケジュールを作成するには、最初に現在のスケジュールを無効にし、改めてスケジュールを作成します。細かなパラメーターの意味や、専用ではないボリュームや共有へのバックアップの指定については、前掲のドキュメントで確認してください。スケジュールが無い場合は、最初のコマンドラインはエラーが表示されますが(エラー - バックアップは現在スケジュールされていません)、無視できます。
C:¥> WBADMIN DISABLE BACKUP C:¥> WBADMIN ENABLE BACKUP -addTarget:F: -Include:C:,D: -allCritical -vssFull -schedule:21:00 -quiet |
バックアップスケジュールを作成すると、指定した時刻にバックアップが開始します。
なお、Hyper-VホストでHyper-Vの設定(Host Component)とHyper-V VMのバックアップ(実行中の場合はオンラインバックアップ)を行いたい場合は、WBADMIN GET VirtualMachinesを実行して仮想マシン名を確認し、WBADMIN ENABLE BACKUPに-hyperv:<VM名>,<VM名>,"Host Component"パラメーターを追加します。
WBADMINは、Windows Serverバックアップのサーバーの機能を有効化したWindows Serverの他、Windows 10やWindows 11でも標準で使えるコマンドラインツールです。Windows 10やWindows 11の場合、「バックアップと復元(Windows 7)」コントロールパネルから実行するスケジュールバックアップやシステムイメージの作成をコマンドラインから実行できます。ただし、Windows 10/11のwbadminは-hypervパラメーターには対応していません。
「wbadmin」スナップインや次に説明するPowerShellで作成したものを含め、バックアップスケジュールが有効な場合、次のコマンドラインを実行することで、そのスケジュールによる1回限りのバックアップを即座に開始することができます。
C:¥> WBADMIN START BACKUP -quiet |
バックアップスケジュールが無い場合、または現在のスケジュールとは異なる設定でバックアップを行いたい場合は、各種バックアップパラメーターを直接指定してWBADMIN START BACKUPを実行します(画面3)。
C:¥> WBADMIN START BACKUP -backupTarget:F: -Include:C:,D: -allCritical -vssFull -quiet |
画面3 WBADMINによる単発バックアップ
PowerShellのWindowsServerBackupモジュールのコマンドレットを使用したバックアップ操作は少し複雑です。PowerShellではバックアップスケジュールをバックアップポリシーとして作成します。
PS C:¥> Remove-WBPolicy -All PS C:¥> $newpolicy = New-WBPolicy PS C:¥> Add-WBBareMetalRecovery -Policy $newpolicy PS C:¥> Add-WBSystemState -Policy $newpolicy PS C:¥> Add-WBVolume -Policy $newpolicy -Volume (Get-WBVolume C:,D:) PS C:¥> $backuptarget = New-WBBackupTarget -Volume (Get-WBVolume F:) PS C:¥> Add-WBBackupTarget -Policy $newpolicy -Target $backuptarget PS C:¥> Set-WBSchedule -Policy $newpolicy -Schedule 21:00:00 PS C:¥> Set-WBVssBackupOption -Policy $newpolicy -VssFullBackup PS C:¥> Set-WBPolicy -Policy $newpolicy -AllowDeleteOldBackups |
Hyper-Vの設定とすべてのVMを一緒にバックアップするなら、さらに Add-VMVirtualMachine -Policy $newpolicy -VirtualMachine (Get-WBVirtualMachine)を追加すればよいでしょう。
なお、WindowsServerBackupモジュールのコマンドレットは、Windows Serverでのみ利用できます。
「wbadmin」スナップインやWBADMINで作成したものを含め、バックアップスケジュールが有効な場合、次のコマンドラインを実行することで、そのスケジュールによる1回限りのバックアップを即座に開始することができます。Start-WBBackupに-Asyncパラメーターを追加して実行すると、バックアップ中の状態を表示せずに、即座にプロンプトが戻ります。その場合、バックアップの状態は、後述のGet-WBJobで確認することができます。
PS C:¥> $wbpolicy = Get-WBPolicy PS C:¥> Start-WBBackup -Policy $wbpolicy |
バックアップスケジュールが無い場合、または現在のスケジュールとは異なる設定でバックアップを行いたい場合は、スケジュールを含まない一時的なポリシーを作成して、Start-WBBackupに渡します(画面4)。Start-WBBackupに-Asyncパラメーターを追加して実行すると、バックアップ中の状態を表示せずに、即座にプロンプトが戻ります。その場合、バックアップの状態は、後述のGet-WBJobで確認することができます。
PS C:¥> $newpolicy = New-WBPolicy PS C:¥> Add-WBBareMetalRecovery -Policy $newpolicy PS C:¥> Add-WBSystemState -Policy $newpolicy PS C:¥> Add-WBVolume -Policy $newpolicy -Volume (Get-WBVolume C:,D:) PS C:¥> $backuptarget = New-WBBackupTarget -Volume (Get-WBVolume F:) PS C:¥> Add-WBBackupTarget -Policy $newpolicy -Target $backuptarget PS C:¥> Set-WBVssBackupOption -Policy $newpolicy -VssFullBackup PS C:¥> Start-WBBackup -Policy $newpolicy |
画面4 Start-WBBackupコマンドレットによる単発バックアップ
実行中のバックアップ操作の状況は、コマンドプロンプトやPowerShellで次のコマンドラインを実行することで確認できます。なお、Get-WBJobとStop-WBJobはWindowsServerBackupモジュールのコマンドレットであり、Windows Serverでのみ利用できます。
C:¥> WBADMIN GET STATUS |
PS C:¥> Get-WBJob |
現在、実行中のバックアップジョブを中止したい場合は、コマンドプロンプトやPowerShellで次のコマンドラインを実行します。
C:¥> WBADMIN STOP JOB |
PS C:¥> Stop-WBJob |
WBADMIN START BACKUPによるバックアップ操作が正常に終了すると、終了コード「0」を返して終了します。バックアップが失敗した場合は「1」または失敗した理由に応じた終了コードで終了するようです。終了コードの一覧は見つけられていませんが、「0」以外であることは確かです(画面5)。
画面5 WBADMIN START BACKUPの終了コード。成功は「0」、エラーや失敗は「0」以外
また、「Wbadmin」スナップイン、WBADMINコマンド、Start-WBBackupコマンドによるバックアップの開始、およびスケジュールバックアップの前回の終了コードは、PowerShellで次のコマンドラインを実行することで確認できます(画面6)。Get-WBJobコマンドレットは、過去のバックアップとリストアの履歴を出力することができ、終了コード(HResult)の他にも、開始時間(StartTime)や終了時間(EndTime)、ジョブの種類(JobType)、ジョブの状態(JobState)などさまざまな情報を提供します。
PS C:¥> (Get-WBJob -Previous 1).HResult |
画面6 バックアップの終了コードは、その方法に関係なく、Get-WBJobで確認できる。Start-WBBackupは終了コード($LastExitCode)を返さないことに注意