0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenNebula 7.0 + Restic バックアップ検証(実践編)- Backrestを試してみた

0
Posted at

はじめに

前回の記事「OpenNebula 7.0 Restic Datastoreでバックアップを構築してみた」では、Restic Datastoreの構築とVM全体のバックアップ・リストアを検証しました。

今回は、Backrest(Restic用Web UI)を導入して複数VMのバックアップを一括管理できるか、そしてqcow2形式のディスクイメージ内部のファイルにアクセスできるかを検証します。

検証環境

  • Frontend: nebula-f1 (192.168.11.110)
  • Computeノード: nebula-n1 (192.168.11.111), nebula-n2 (192.168.11.112)
  • Datastore:
    • 108: image-qcow2 (750GB)
    • 109: system-qcow2 (750GB)
    • 112: RBackups (Restic, 96.4GB)

対象VM(6台)

oneadmin@nebula-f1:~$ onevm list
  ID USER     GROUP    NAME                      STAT  CPU  MEM HOST            TIME
  36 oneadmin oneadmin alpine-persistent-new     runn    1  512M 192.168.11.111 19d 20h17
  35 oneadmin oneadmin alpine-qcow2-24-cloned    runn    1  128M 192.168.11.112 19d 21h25
  34 oneadmin oneadmin FreeBSD-test-01           runn    1 1024M 192.168.11.110 33d 18h11
  30 oneadmin oneadmin alpine-qcow2-dev-30       runn    1  128M 192.168.11.110 42d 09h39
  25 oneadmin oneadmin alpine-shared-test-25     runn    1  128M 192.168.11.111 43d 07h20
  24 oneadmin oneadmin alpine-qcow2-24           runn    1  128M 192.168.11.112 43d 07h21

1. 全VMの一括バックアップ

1-1. バックアップスクリプトの作成

6台のVMを一括でバックアップするスクリプトを作成しました。

backup-all-vms.sh:

#!/bin/bash

VM_IDS="24 25 30 34 35 36"
BACKUP_DATASTORE="112"

echo "Date: $(date)"
echo "Starting backup for VMs: ${VM_IDS}"
echo "Backup Datastore: ${BACKUP_DATASTORE}"
echo ""

for VM_ID in ${VM_IDS}; do
    echo "----------------------------------------"
    echo "Backing up VM ${VM_ID}..."
    
    onevm backup --schedule now -d ${BACKUP_DATASTORE} ${VM_ID}
    
    if [ $? -eq 0 ]; then
        echo "✅ VM ${VM_ID} backup scheduled successfully"
    else
        echo "❌ VM ${VM_ID} backup failed"
    fi
    echo ""
done

echo "=== Backup jobs submitted ==="
echo ""
echo "Check scheduled actions with: onevm show <VM_ID>"
echo "Check backup images with: oneimage list --backup"
echo ""
echo "Note: Backup execution may take a few minutes."
echo "      Monitor progress in Sunstone or with 'onevm show' command."

1-2. 実行結果

oneadmin@nebula-f1:~/work$ chmod +x backup-all-vms.sh
oneadmin@nebula-f1:~/work$ ./backup-all-vms.sh

Date: Mon Jan 26 12:45:05 AM UTC 2026
Starting backup for VMs: 24 25 30 34 35 36
Backup Datastore: 112

----------------------------------------
Backing up VM 24...
VM 24: backup scheduled at 2026-01-26 00:45:06 +0000
✅ VM 24 backup scheduled successfully

----------------------------------------
Backing up VM 25...
VM 25: backup scheduled at 2026-01-26 00:45:08 +0000
✅ VM 25 backup scheduled successfully

(以下、VM 30, 34, 35, 36も同様に成功)

=== Backup jobs submitted ===

1-3. バックアップ確認

oneadmin@nebula-f1:~$ oneimage list --backup
  ID USER     GROUP    NAME                                                                                                    DATASTORE     SIZE TYPE PER STAT RVMS
  24 oneadmin oneadmin 34 26-Jan 00.46.12                                                                                      RBackups      3.8G BK   Yes rdy     1
  23 oneadmin oneadmin 25 26-Jan 00.45.33                                                                                      RBackups      118M BK   Yes rdy     1
  22 oneadmin oneadmin 30 26-Jan 00.45.32                                                                                      RBackups      120M BK   Yes rdy     1
  21 oneadmin oneadmin 36 26-Jan 00.45.32                                                                                      RBackups      118M BK   Yes rdy     1
  20 oneadmin oneadmin 35 26-Jan 00.45.32                                                                                      RBackups      118M BK   Yes rdy     1
  19 oneadmin oneadmin 24 26-Jan 00.45.12                                                                                      RBackups      118M BK   Yes rdy     1
  18 oneadmin oneadmin 36 06-Jan 14.07.58                                                                                      RBackups      116M BK   Yes rdy     1
  17 oneadmin oneadmin 24 06-Jan 02.51.57                                                                                      RBackups      117M BK   Yes rdy     1
  16 oneadmin oneadmin 24 06-Jan 01.54.06                                                                                      RBackups      117M BK   Yes rdy     1

6台すべてのバックアップが成功しました。


2. Backrestのインストール

2-1. Dockerのインストール

Backrestを動かすためにDockerが必要です。

oneadmin@nebula-f1:~$ docker --version
Command 'docker' not found, but can be installed with:
apt install docker.io

以下の手順でインストールします:

sudo apt-get update
sudo apt-get install -y docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker oneadmin
newgrp docker

確認:

oneadmin@nebula-f1:~$ docker --version
Docker version 28.2.2, build 28.2.2-0ubuntu1~24.04.1

oneadmin@nebula-f1:~$ docker-compose --version
docker-compose version 1.29.2, build unknown

2-2. Docker Composeで構築

作業ディレクトリを作成します:

mkdir -p /var/lib/one/work
cd /var/lib/one/work

docker-compose.yml:

version: '3.8'
services:
  backrest:
    image: garethgeorge/backrest:latest
    container_name: backrest
    ports:
      - "9898:9898"
    volumes:
      - ./backrest_data:/data
      - ./backrest_config:/config
      - /var/lib/one/datastores/112:/repos:rw
    environment:
      - TZ=Asia/Tokyo
    restart: unless-stopped

重要: /repos:rw(読み書き可能)でマウントします。:ro(読み取り専用)だとBackrestがロックファイルを作成できずエラーになります。

2-3. Backrestの起動

docker-compose down
docker-compose up -d
docker ps

起動確認:

CONTAINER ID   IMAGE                              STATUS         PORTS
cadc876b3010   garethgeorge/backrest:latest       Up 4 seconds   0.0.0.0:9898->9898/tcp

ブラウザで http://192.168.11.110:9898 にアクセスします。

2-5. 初回セットアップ

Web UIで以下を設定します:

  • 認証を無効化
  • インスタンスIDを入力(my-backrest-server)
  • Saveをクリック

image.png


3. リポジトリの登録

3-1. VM 24のリポジトリ登録例

Web UIで「Add Repo」をクリックし、以下を入力します:

  • Repository Name: vm-24
  • Repository Path: /repos/24
  • Password: opennebula-backup-2026

Submit後、リポジトリ詳細画面で「vm-24」をクリックします。

image.png

結果: 既存のバックアップスナップショットが認識されました!

[画面キャプチャ箇所]

3-2. 残りのVMも登録

同様の手順で以下を登録しました:

Repository Name Repository Path
vm-25 /repos/25
vm-30 /repos/30
vm-34 /repos/34
vm-35 /repos/35
vm-36 /repos/36

[画面キャプチャ: 6個のリポジトリの一覧表示]

image.png


4. スナップショットの確認

4-1. ダッシュボード

6つのリポジトリが一覧表示され、以下の情報が確認できます:

  • 最終バックアップ日時
  • スナップショット数
  • 容量

[画面キャプチャ:スナップショット状態]

image.png

4-2. VM 36の詳細

リポジトリ「vm-36」をクリックすると、スナップショット詳細が表示されます:

スナップショット ID: 90dd8f2c
日時: 2026/01/26 09:45:

Snapshot Browser:
/var/lib/one/datastores/109/36/backup/
  ├─ disk.0.0  (118.75MiBMB)
  └─ vm.xml    (8.47KiB)

[画面キャプチャ]

image.png


5. qcow2内部の確認を試みる

5-1. disk.0.0をクリック

disk.0.0をクリックすると…

結果: 「Download」ボタンのみが表示されました。

qcow2内部のファイルシステム(/root/persistent-backup-test.txtなど)は表示されません。

[画面キャプチャ]

image.png

5-2. なぜ見えないのか?

Backrest(およびRestic)が扱うのは、あくまでファイルツリーです:

Resticリポジトリの構造:
/repos/36/
  └─ snapshots/
      └─ 9b19efd9/
          └─ var/lib/one/datastores/109/36/backup/
              ├─ disk.0.0  ← qcow2ファイル(バイナリ)
              └─ vm.xml

disk.0.0はqcow2形式のディスクイメージファイルです。その内部には ext4ファイルシステムがありますが、Restic/Backrestはこれを解析しません。


6. 結論:libguestfsが必須

qcow2内部のファイルにアクセスするには、libguestfsguestfishvirt-copy-outなど)が必要です。

方法1: Backrestからダウンロード

  1. Backrestでdisk.0.0をダウンロード
  2. ローカルに保存(例: /tmp/disk.0.0
  3. libguestfsで抽出
virt-copy-out -a /tmp/disk.0.0 /root/persistent-backup-test.txt /tmp/

方法2: restic mount(推奨)

前回記事の手法が最もシンプルです:

export RESTIC_REPOSITORY=/var/lib/one/datastores/112/36
export RESTIC_PASSWORD=opennebula-backup-2026
restic mount ~/restic-mount &

virt-copy-out -a ~/restic-mount/snapshots/latest/var/lib/one/datastores/109/36/backup/disk.0.0 \
  /root/persistent-backup-test.txt /tmp/

詳細は前回記事を参照してください:
https://qiita.com/flathill/items/158c999bdef2c6fb5521


7. Backrestは有用か?

7-1. メリット

  • 複数VMの一覧性: 6台のバックアップ状況を一画面で確認できる
  • 監視・可視化: 最終バックアップ日時、容量、スナップショット数が一目瞭然
  • 非技術者向け: Web UIで直感的に操作可能

7-2. デメリット

  • qcow2内部は見えない: 結局libguestfsが必要
  • ファイル抽出の手間: 従来手法(restic mount + virt-copy-out)と変わらず
  • 追加の複雑性: Docker管理、設定ファイルメンテナンスが必要

7-3. 推奨運用

VM規模 Backrest導入 ファイル抽出
1〜4台 不要(Sunstoneで十分) restic mount + virt-copy-out
5台以上 検討(監視用途) restic mount + virt-copy-out

結論: Backrestは複数VMの監視・可視化には有効ですが、qcow2内部のファイル抽出は従来手法が必須です。


まとめ

  1. 6台のVMを一括バックアップ: スクリプトで自動化成功
  2. Backrestで一覧管理: Web UIで全VMの状況を可視化
  3. qcow2内部は見えない: Backrest単独では不可能
  4. libguestfsが必須: guestfishまたはvirt-copy-outを併用

Backrest導入の判断基準:

  • 単一VM → 不要
  • 複数VM(5台以上) → 監視用途として有効
  • ファイル抽出 → 従来手法(restic mount + virt-copy-out)を継続
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?