Hyper-V Server 2019で仮想マシンのホットバックアップとリストアをする

# はじめに
宅サバの仮想マシンをどうやってバックアップしようか悩んでいました。
以下の方法を使えば簡単にできます。

# 環境
- Samsung Chromebox Series 3
    - 8gbのメモリ
    - システムストレージ：USB SSD 120GBにHyper-V Server 2019をインストール
    - バックアップストレージ：USBメモリが差し込んである[^7]

# 本体のバックアップ
Filezillaで定期的にCloneするしかなさそう。と思ったが同様の方法でできそう。

## wbadmin
**この方法では、復元先はバックアップしたハードディスクとまったく同一のものにしかリストアできません。ストレージが壊れたから別のものに復元、とはなりえません。**
少なくとも、バックアップはできました。
リモートのネットワークディスクに保存するなら、
cmdkey /add 192.168.1.xx /user:ユーザー名 /pass:パスワード　でログオン資格情報を保存しよう。

- 「実用的なHyper-V2016バックアップ手順（外付けHDDへのバックアップ） - こしぞーのひとり情シス」https://www.hitoriit.com/entry/2018/08/04/111312


- 「やさしいWindows Server バックアップ復旧手順（Windows Server 2016 OSリストア手順）」https://www.hitoriit.com/entry/2018/04/04/145424
- 「やさしいWindows Server バックアップ復旧手順（共有フォルダ/NASに取得したWindows Server 2012R2 OSリストア手順）」https://www.hitoriit.com/entry/2018/09/05/080200
- 「確実なWindows Server 2019 バックアップ手順（外付けHDDへのバックアップ）」 https://www.hitoriit.com/entry/2019/02/26/080200
あとでやってみよう。

## その他
それ以外なら、[Microsoft Hyper-V Server 2016でEaseUS Todo Backup Serverを使ってみた](https://qiita.com/haniokasai/items/205be6bf21a6463af36e)をどうぞ。

# 仮想マシンの作成
## isoを落とす
wget的な感じでダウンロードします。[^3]

```powershell
Invoke-WebRequest -Uri http://releases.ubuntu.com/18.04/ubuntu-18.04.3-live-server-amd64.iso -OutFile C:\dl\ubuntu-18.04.3-live-server-amd64.iso
```

## 作成
ネットワーク等を作っておいて以下の画像のように（必須かは不明）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/c3465208-2b76-e2ea-f669-54e15925e85f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/6de0efba-17a9-8de4-f7ba-7f489ab02da7.png)

## OSのインストール
インストールしておきます。
/bootをext4、そのほかをxfsとしました。
ここでは、ユーザー名をhani、パスワードはpasswd2020です。

また、dockerをインストールしておき[^2]、nginxのコンテナを置いておきます。

```
sudo su
apt update
apt install curl
curl -fsSL https://get.docker.com/ | sh
```

```
docker create -P --name nginx bitnami/nginx:latest
docker start nginx 
```

## hyperv-daemonのインストール
ホットバックアップには、ゲストにデーモンがないといけません。

```
wget http://ftp.jp.debian.org/debian/pool/main/l/linux/hyperv-daemons_5.3.15-1_amd64.deb
dpkg -i hyperv-daemons_5.3.15-1_amd64.deb
reboot
```

前準備はこれで完了。起動したままにしておきます。

# バックアップ

## バックアップする仮想マシンを探す
ServerManagerからリモートデスクトップでログイン後、cmd.exeでVM一覧を見ます。[^4]

```bash
wbadmin get virtualmachines
```
```bash
C:\Users\Administrator>wbadmin get virtualmachines
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

VM 名: ubutest1
VM キャプション: Online\ubutest1
VM 識別子: 01CC1042-D20F-4F6B-BA4A-4A821F010709

VM 名: Host Component
VM キャプション: Host Component
VM 識別子: Host Component
```

## バックアップ先のストレージを探す

```powershell
C:\Users\Administrator>wbadmin get disks
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

ディスク名: SUNEAST SSD SE800 mSATA 128GB
ディスク番号: 0
ディスク ID: {16bd9aaaafbb}
総領域: 119.24 GB
使用領域: 44.51 GB
ボリューム: EFI システム パーティション[(ボリューム ラベルなし)],D:[]

ディスク名: JMicron Tech SCSI Disk Device
ディスク番号: 1
ディスク ID: {8cfa6aaaa00}
総領域: 111.79 GB
使用領域: 14.11 GB
ボリューム: E:[boot],C:[os]

ディスク名: EVTRAN E 26S SCSI Disk Device
ディスク番号: 2
ディスク ID: {8cfaaaaaaa}
総領域: 118.00 GB
使用領域: 3.98 GB
ボリューム: F:[ボリューム]
```

## バックアップ!
cmd.exeで以下のように実行します(f: はバックアップ先のSSDです。ubutest1はバックアップ対象の仮想サーバー。)

```bash
wbadmin start backup -backupTarget:f: -hyperv:ubutest1
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/60c65bcb-47af-4d12-a119-27be6b8ffb73.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/c0790ac0-f506-bce5-87b0-593f7b448480.png)

こんな感じでバックアップできます。

# リストア
USBストレージをPCに差し込みます。
## バックアップ一覧を表示
バックアップ内容を確認します。(２回バックアップをやってみていました。）

```bash
C:\Users\Administrator>wbadmin get versions
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

バックアップ時間: 2019/12/31 20:59
バックアップ対象: 1394/USB ディスク ラベル付き ボリューム(F:)
バージョン識別子: 12/31/2019-11:59
回復可能: ボリューム, ファイル, アプリケーション, 仮想マシン
スナップショット ID: {ea92ce78-9d8c-4461-a292-d63cd2013e82}

バックアップ時間: 2019/12/31 22:59
バックアップ対象: 1394/USB ディスク ラベル付き ボリューム(F:)
バージョン識別子: 12/31/2019-13:59
回復可能: ボリューム, ファイル, アプリケーション, 仮想マシン
スナップショット ID: {3c5521e7-eab2-4604-8417-ba86337b4fe1}
```
使うバックアップの詳細を確認。

```
wbadmin get items -version:「バージョン識別子」
```

```
 PS C:\Users\Administrator\Documents> wbadmin get items -version:12/31/2019-13:59
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

ボリューム ID = {8cfa60d6-0000-0000-0000-107d00000000}
ボリューム 'os'、C: にマウント
ボリューム サイズ = 109.83 GB
回復可能 = 選択されたファイル

アプリケーション = HyperV
VM 名: ubutest1
VM キャプション: Online\ubutest1
VM 識別子: 01CC1042-D20F-4F6B-BA4A-4A821F010709
合計サイズ: 3.20 GB

 PS C:\Users\Administrator\Documents>
```


## （実験のために）サーバーを消す
サーバーを消しておきます。リストアのテストなので。

(powershellで）
```
Stop-VM ubutest1 -Force
Remove-VM ubutest1
```

## リストア！
復元してみます。

```
PS C:\Users\Administrator> wbadmin start recovery -version:12/31/2019-13:59 -itemtype:hyperv -items:ubutest1
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

警告: 別の場所に回復しようとしている仮想マシンが、このホストからバックアップ
されたものである場合、この操作により、元の仮想マシン (まだ存在する場合)
は削除され上書きされます。

アプリケーション HyperV の回復を選択しました。
次のコンポーネントが回復されます:

警告: 回復後にネットワークの設定が異なっていると、仮想マシンが起動しない
場合があります。回復が完了したら、起動する前に、Hyper-V マネージャー
を使用して仮想マシンのネットワーク設定を確認してください。

VM 名: ubutest1
VM キャプション: Online\ubutest1
VM 識別子: 01CC1042-D20F-4F6B-BA4A-4A821F010709

アプリケーション HyperV を回復しますか?
[Y] はい [N] いいえ y

回復するコンポーネント ubutest1 (Online) を準備しています...
コンポーネント ubutest1 (Online) のファイルを回復中に、(3%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(17%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(26%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(37%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(47%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(57%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(68%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(78%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(91%) をコピーしました。
コンポーネント ubutest1 (Online) のファイルを回復中に、(100%) をコピーしました。
コンポーネント ubutest1 (Online) を回復しています。
コンポーネント ubutest1 (Online) が正常に回復されました。
回復操作が完了しました。
正常に回復されたファイルのログ:
C:\Windows\Logs\WindowsServerBackup\ApplicationRestore-31-12-2019_14-09-18.log

回復操作の概要:
---------------

コンポーネント ubutest1 (Online) が正常に回復されました。
PS C:\Users\Administrator>
```

# バックアップを消す
# その他
## 「ユーザー資格情報の委任を有効化しますか？」のダイアログを消すには、このコマンドを実行します。[^1]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/6a0ff8f2-66e2-99fc-7a50-ced57f41341b.png)
## このダイアログはアカウントが間違っているのでしょう。
!「Hyper-V マネージャーで資格情報を指定して Hyper-V に接続する」[image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/e0596498-6e35-8eb7-87d7-213257a09bb4.png)

## 「この機能は、ポータブルなワークステーション環境では使用できません。」になった場合
```
[192.168.~~~~]: PS C:\dl> wbadmin start backup -backupTarget:C:\bpdir -hyperv:ubutest1
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

エラー - この機能は、ポータブルなワークステーション環境では使用できません。

```

これはなんでしょう、当環境ではUsbにosをいれてるせいかもしれない。[^5]
>原因としては、Windows To Go 環境への誤認が起きていると考えられます。
(中略)
以下のレジストリ値を削除するか、データを 0 に設定して Windows を再起動することで回避できると思います。
キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
名前 : PortableOperatingSystem

リモートデスクトップで上記のレジストリを変えて shutdown /r 。

```
regedit
```
0にしてみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/85ded2f5-3153-1ab2-3384-4253a5706ba1.png)

## バックアップに失敗する
同一ストレージへのバックアップはできません。[^6]
あくまでも、別ストレージの*root*フォルダにしか保存できません。

```
C:\Users\Administrator>wbadmin start backup -backupTarget:C: -hyperv:ubutest1
wbadmin 1.0 - バックアップ コマンドライン ツール
(C) Copyright Microsoft Corporation. All rights reserved.

ボリューム情報を取得しています...
バックアップの実行時に、バックアップに含まれている仮想マシンは
一時的に保存済みの状態になる場合があります。
これにより HyperV\ubutest1 が C: にバックアップされます。
バックアップ操作を開始しますか?
[Y] はい [N] いいえ y

C: へのバックアップ操作を開始しています。
バックアップに指定されたボリュームのシャドウ コピーを作成しています...
バックアップ操作の概要:
-----------------------

バックアップ操作が完了する前に停止しました。
バックアップ操作が完了する前に停止しました。
エラーの詳細: コンポーネントの重要なボリュームのスナップショットに失敗しました。
正常にバックアップされたファイルのログ:
C:\Windows\Logs\WindowsServerBackup\Backup-31-12-2019_11-39-57.log

バックアップに失敗したファイルのログ:
C:\Windows\Logs\WindowsServerBackup\Backup_Error-31-12-2019_11-39-57.log

エラー - 共有復元ポイントの操作でエラーが発生しました (0x8100010c)
スナップショットを作成するための有効なコンポーネントまたはボリュームがありません。


コンポーネントの重要なボリュームのスナップショットに失敗しました。

C:\Users\Administrator>
```


```text:\Windows\Logs\WindowsServerBackup\Backup_Error-31-12-2019_11-39-57.log

ライターのエラー
ライター Id: {66841CD4-6DED-4F4B-8F17-FD23F8DDC3DE}
インスタンス ID: {44EAD40E-A64B-49AE-A808-7BCDF3B91B45}
ライター名: Microsoft Hyper-V VSS Writer
ライターの状態: 0
エラー結果: 81000112
アプリケーション結果: 0
アプリケーション メッセージ: (null)
   コンポーネント: 01CC1042-D20F-4F6B-BA4A-4A821F010709
   論理パス: 
   コンポーネント結果: 8100010F
   コンポーネント メッセージ: コンポーネントで、除外されているボリュームのパスが報告されています。 (0x8100010F)
*-----------------------------*
アプリケーションのバックアップ
ライター Id: {66841CD4-6DED-4F4B-8F17-FD23F8DDC3DE}
   コンポーネント: 01CC1042-D20F-4F6B-BA4A-4A821F010709
   字幕     : Online\ubutest1
   論理パス: 
   エラー           : 8078001D
   エラー メッセージ   : 操作が完了する前に終了しました。
*-----------------------------*
```

```text:\Windows\Logs\WindowsServerBackup\Backup-31-12-2019_11-39-57.log
アプリケーションのバックアップ
*-----------------------------*
```

## 仮想マシンを立ち上げて確認
いけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245977/faad59eb-fdb9-f2a2-2250-8aa74d0671f3.png)


# 参考
これに沿ってやった。
https://yun-craft.com/software-crafts/hyper-v-server-2016-6#4

# 関連
- 「実用的なHyper-V2016バックアップ手順（外付けHDDへのバックアップ）」https://www.hitoriit.com/entry/2018/08/04/111312
- 「 メモ: Windows Server バックアップのスケジュールをコマンドラインで作成する 」https://yamanxworld.blogspot.com/2016/10/windows-server.html
- 「How to include “Host Component” of HyperV in backup with wbadmin?」https://serverfault.com/questions/510222/how-to-include-host-component-of-hyperv-in-backup-with-wbadmin
- 「wbadmin でフルバックアップスケジュールを設定する」https://www.vwnet.jp/Windows/PowerShell/wbadmin_FullBackup.htm

[^1]: 「Hyper-V マネージャーで資格情報を指定して Hyper-V に接続する」https://www.vwnet.jp/Windows/WS16TP2/HVMan/Credential.htm
[^2]: 「Docker のインストール」 http://docs.docker.jp/linux/step_one.html
[^3]: 「PowerShell で wget のようにファイルダウンロードをしたい」https://tech.guitarrapc.com/entry/2013/07/09/220710
[^4]: 「Hyper-V と Windows PowerShell の使用」https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/try-hyper-v-powershell
[^5]: 「「この機能は、ポータブルなワークステーション環境では使用できません」と出て、バックアップ機能が使えない。 」 https://answers.microsoft.com/ja-jp/windows/forum/windows_10-update-winpc/%e3%81%93%e3%81%ae%e6%a9%9f%e8%83%bd%e3%81%af/65800e93-03de-42df-81d0-4990c44a1136
[^6]: 「Backing up Hyper-V VMs using “wbadmin” failing on Windows Server 2012」https://serverfault.com/questions/604442/backing-up-hyper-v-vms-using-wbadmin-failing-on-windows-server-2012
[^7]: 使っているUSB: https://qiita.com/haniokasai/items/d617299f824791c489ab