IBM Cloud VPC Gen2の仮想サーバをVeeam Agentでバックアップする

# 目的

IBM Cloud VPC Gen2の仮想サーバをバックアップ・リストアする場合、IBM Cloudが提供する仕組みは今のところVeeam Agentを使う方法がガイドされています。今回はそれを使ったバックアップの取得を検証してみます。

> https://cloud.ibm.com/docs/vpc?topic=vpc-using-veeam-agent

# 検証

## バックアップ保管用のストレージのマウント

IBM CloudがガイドするVeeam Agentは、残念ながらクラサバ型ではなく、エージェントがバックアップをローカルに保管するタイプのものです。そのため、バックアップ保管用のディスクをバックアップ対象の仮想サーバにマウントしておきます。

VPCのダッシュボードからブロックストレージをオーダーします。ダッシュボードから作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/7a1a1ba8-375b-cae6-9327-3e069c0d2697.png)

必要な情報を入力します。ロケーションは仮想サーバと同じにする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/58cc97f3-0c08-2994-175a-8f5f632d2950.png)

ティアとサイズは今回は適当に。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/646bc18a-1f8e-6912-e73f-a2268d4bf09b.png)

次に ダッシュボード -> 仮想サーバインスタンス から仮想サーバを選び、ボリュームを接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/12f3e47a-e13d-9d1e-c88a-0b4c7e033c20.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/fdf76880-819b-6187-f9ba-c5d6e7098660.png)

数十秒程度で接続が完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/a01895e2-6ab2-edf2-792a-efb0e02ee6ef.png)

それでは、仮想サーバでディスクをマウントします。なお、今回仮想サーバのOSはRed Hat Enterprise Linux 7を使用しています。他のOSを使う方は各自OS固有のものに読み替えてください。

まずはデバイスを確認します。

```
# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk
|-vda1 253:1    0    1G  0 part /boot
`-vda2 253:2    0   99G  0 part /
vdb    253:16   0  376K  0 disk
vdc    253:32   0   44K  0 disk [SWAP]
vdd    253:48   0   10G  0 disk
```

vddがブロックストレージのようです。パーティションを作成します。

```
# fdisk /dev/vdd
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x2c3233f4.

Command (m for help): p

Disk /dev/vdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2c3233f4

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/vdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2c3233f4

   Device Boot      Start         End      Blocks   Id  System
/dev/vdd1            2048    20971519    10484736   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
```

パーティションvdd1ができました。

```
# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  100G  0 disk
|-vda1 253:1    0    1G  0 part /boot
`-vda2 253:2    0   99G  0 part /
vdb    253:16   0  376K  0 disk
vdc    253:32   0   44K  0 disk [SWAP]
vdd    253:48   0   10G  0 disk
`-vdd1 253:49   0   10G  0 part
```

パーティションvdd1をext3でフォーマットします。Veeam Agentはバックアップ先がext3である必要があるようです。

```
# mkfs -t ext3 /dev/vdd1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621184 blocks
131059 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
```

パーティションをマウントします。パスはIBM Cloudのガイドに合わせ``/veeam_disk``とします。

```
# mkdir /veeam_disk
# mount /dev/vdd1 /veeam_disk
```

今回は検証ですので手動マウントですが、真面目にやるときはfstabできちんとブート時にマウントするか、バックアップの前後にマウント・アンマウントを実行するとよいでしょう。

## Veeam Agentライセンスの取得

正規のライセンスはIBM Cloud宛にメールでオーダーする必要があります。

> https://cloud.ibm.com/docs/vpc?topic=vpc-ordering-veeam-licenses

今回はオーダー不要で30日間無料のお試しライセンスを使用します。

Veeamのサイトでアカウント登録をします。

> https://www.veeam.com/linux-backup-download.html

登録が終わるとトライアルキーをリクエストできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/6d6b1b09-c69d-829a-2304-b7cf42067600.png)

リクエストするとキーが``Veeam-1000instances-backup-trial.lic``ファイルとしてメールに添付されてきますので、それを仮想サーバ上に転送しておきます。

次にエージェントをダウンロードします。適切なOSとアークテクチャを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/23661296-4922-779d-c00a-c26681507abb.png)

RPMファイルダウンロードされますので、これも仮想サーバに転送しておきます。

## Veeam Agentのインストール

転送しておいたRPMをインストールします。

```
# yum -y install ./veeam-release-el7-1.0.7-1.x86_64.rpm
# yum -y install veeam
```

設定画面を開きます。

```
# veeamconfig ui
```

使用許諾をチェックして、次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/51edbd99-2e65-b8e1-387f-dae3baddea90.png)

VPC2の仮想サーバは現時点では残念ながらBMR（ベアメタルリカバリー）には対応していないようなので、このまま次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/52f0a2f2-17d7-84e0-40ba-61e8a37a398c.png)

ライセンスファイルを指定します。Workstationを選択し、次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/76eafdb0-ffc1-3f73-2243-549aa1c69b64.png)

これで初期導入は完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/7afc321b-4935-24f8-9c35-0ea9bce88d05.png)

## バックアップジョブの設定

バックアップジョブを設定します。veeamconfig uiからConfigureを選択します。

ジョブに名前をつけて次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/015eb7f5-e019-9df2-efc8-6045760ed4c0.png)

バックアップ対象はRecommendedなEntire machineにしたいところですが、これにするとこの後でエラーになる(*1)ので、``Volume level backup``にして次へ。

> *1 Entire Machineにするとマウントした/veeam_diskがバックアップ対象に含まれてしまいエラーとなります。そのため、Entire machine以外を選択し、/veem_diskを除外する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/e6d67dbb-2aca-7db8-b8c9-ca74b670df12.png)

バックアップ対象が空なので、タブキーを押して``Add: Device``を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/38a3adfd-0410-710c-6990-5d14aba2cd85.png)

今回はブートディスクであるvdaを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/9b1692e0-c916-3cb3-b358-1a7219701da0.png)

前の画面に戻り、vdaが選択済であることを確認し、次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/d124fc78-7369-21d5-d5c1-c03882f3b436.png)

バックアップ先は``Local``のままとします。一応Shared Folderが使えるようですね。自力でNFSサーバを立てるならそれを使うこともありかもしれません。次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/10bdff18-b5da-0dc8-5d8f-1cc078148fb4.png)

バックアップ先ディレクトリは先ほどマウントした``/veeam_disk``です。次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/5adcb106-031c-9114-5138-f089f97ee08a.png)

Advancedな設定を追加できます。デフォルトでは全てDisabledです。次のような設定が可能です。

* Backup encryption バックアップを暗号化するためのパスワードとヒントをここで指定する
* File system indexing バックアップ時にファイルのカタログを作成し、リストア時にファイルのブラウジングや検索ができるようになる
* Active full 定期的にフルバックアップをとるようにする
* Scripts バックアップジョブの前後に指定のコマンドを実行する

今回は全て使用せず次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/cc6cf43a-b12f-c3df-1810-ba139a7d159d.png)

ジョブの実行時間を指定します。時刻は仮想サーバのローカル時刻ですので、仮想サーバのタイムゾーンに注意してください。次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/74b77e32-06b6-7f24-d91c-f37048c8cdb2.png)

サマリを確認します。スケジュールを待たずに即実行できますので、このままフィニッシュ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/418a8078-c17b-b41c-46de-97cb96a9c8bf.png)

バックアップが開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/e1699271-2483-f9b5-1243-53646de0e08b.png)

完了までしばらく待ちます。初回はフルバックアップなのでそこそこ時間がかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/59fc8317-b29e-1c08-e1b7-f2ccf07e59d9.png)

2回目以降は差分なので早いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/d42203a1-5ecf-c6a7-f5cb-fea72eaebf75.png)

なお、バックアップジョブはcrontabを使ってスケジュールされます。

```
# crontab -l
#{********-****-****-****-************}# Veeam backup job, do not modify this line
0 6 * * * veeamconfig job start --id {********-****-****-****-************} --retriable --scheduled --highpriority > /dev/null
```

以上

# 注意点

* Veeam Agentの正規版は有料です
* ローカルにバックアップをとるというのはあまり意味がないと思います、バックアップ後にObject Storageにアップロードするのがよいでしょう
* であるならば、有料なVeeam Agentより、オープンソースのduplicityなどで直接Object Storageにバックアップする方が安価で楽かもしれません
* むしろクラウドネイティブな考え方をするなら、仮想サーバのローカルにバックアップが必要なデータは置くべきではなく、サーバ構成もAnsibleなどの構成管理ツールで復旧可能にすべきでしょう
* リストアの検証は次回以降に