BackupZit

Proxmox VE 仮想マシンのバックアップ方法

空の Proxmox ノードから、すべての VM とコンテナーのスケジュール済み・暗号化・重複排除バックアップまでを解説する完全ガイドです。オフサイトコピー、自動復元テスト、そして必要なときに数秒でバックアップから直接起動できる VM までを扱います。

構築する内容

BackupZit は Proxmox VE の仮想マシン(QEMU)とコンテナー(LXC)を、ゲスト内に何もインストールせずにバックアップします。各 Proxmox ノードで小さなエージェントが動作し、ゲストごとに一時スナップショットを作成してディスクを読み取り、選択したストレージに保存します。Web コンソールがジョブのスケジュール、履歴の保持、復元を行います。

Proxmox VE には独自のバックアップツール vzdump と Proxmox Backup Server もあります。Proxmox だけを使うなら、どちらも優れた無料の選択肢です。BackupZit は、Proxmox と Windows・Linux サーバー、VMware、Hyper-V、データベース、Microsoft 365 を 1 つのコンソールで管理したい場合や、起動テスト済みバックアップや別クラスターへのレプリカといった機能が必要な場合に向いています。

必要なもの

  • Proxmox VE 7、8 または 9 のノード 1 台以上(Debian ベースなので、エージェントの Debian パッケージが使えます)。
  • BackupZit コンソールの設置場所:2 vCPU、2〜4 GB RAM、16〜20 GB ディスクの小さな Linux VM。コンソール自体はバックアップデータを保存しないため、同じクラスター内の VM として動かせます。
  • Proxmox ノードの外にあるバックアップ先ストレージ:SFTP で接続する Linux サーバーや NAS、SMB 共有、S3 互換バケット、BackupZit の堅牢化リポジトリ(hardened repository)など。エージェントが直接書き込みます。
  • ネットワーク:エージェントは TCP 8443 番ポートでコンソールに接続します。

手順 1 — コンソールをインストール

Proxmox では、ダウンロードページにある既成のアプライアンスイメージ backupzit-appliance.qcow2(Debian、PostgreSQL、コンソールを設定済み)を使うのが最も簡単です:

  1. ディスクなしの VM を作成します:2 vCPU、2〜4 GB RAM、VirtIO ネットワーク。
  2. backupzit-appliance.qcow2 をノードにコピーし、VM のディスクとしてインポートします(<vmid> を置き換えてください):
    qm importdisk <vmid> backupzit-appliance.qcow2 local-lvm
  3. インポートしたディスクを SCSI として接続して起動ディスクにし、VM のオプションで QEMU guest agent を有効にします。
  4. VM を起動します。画面に Web コンソールのアドレスとユーザー admin の初期パスワードが表示されます。https://<アドレス>:8443 を開いてサインインし、パスワードを変更します。

VM の画面で bzadmin としてサインインすると、固定アドレス、サーバー名、タイムゾーンを設定できます(アプライアンスは UTC で起動し、スケジュールはコンソールのタイムゾーンで動作します)。既存の Debian、Ubuntu、AlmaLinux、Rocky Linux サーバーを使いたい場合は、ダウンロードページの 1 行インストールスクリプトで同じことができます。

手順 2 — ストレージを追加

コンソールでストレージを開き、保存先を追加します。Proxmox バックアップでよく使われる選択肢:

種類用途
SFTPSSH が使える任意の Linux サーバーや NAS。サーバーのホスト鍵は固定されます。
SMB 共有Windows ファイルサーバー、Synology や QNAP の NAS(SMB 2/3)。
S3 互換オフサイトコピー:AWS S3、Wasabi、Backblaze B2、MinIO、Ceph。Object Lock で変更不可にできます。
堅牢化リポジトリbackupzit-repo を動かす Linux サーバー:変更不可期間が終わるまでバックアップを削除できません。

バックアップを暗号化(AES-256)はオンのままにしてください(既定)。すべてのデータはノードを出る前にノード上で AES-256-GCM で暗号化されます。その後コンソールにリカバリーキーが表示されます。リカバリーシートを印刷するか、バックアップとは別の場所のパスワードマネージャーにキーを保管してください。キーとストレージの場所、その認証情報があれば、コンソールを失っても復元できます。キーがなければ誰もバックアップを読めません。

手順 3 — 各ノードにエージェントをインストール

  1. コンソールでエージェントを開き、登録トークンを作成をクリックします。7 日間有効で、何台のマシンにも使える登録コード(BZ1-…)が発行されます。
  2. エージェントページから Linux エージェント — Debian / Ubuntu パッケージをノードにダウンロードし、次を実行します:
    apt install ./backupzit-agent_*.deb
    backupzit-agent enroll --code "BZ1-..."
    systemctl enable --now backupzit-agent
  3. 1 分以内に、ノードが Proxmox VE · N guests のバッジ付きでエージェントページに表示されます。

エージェントはノード自身のツール(qm、pct、pvesm、LVM、ZFS、Ceph)を使用します。コンソールには Proxmox API トークンも root パスワードも保存されません。クラスターではすべてのノードにエージェントをインストールしてください。

手順 4 — バックアップ ジョブを作成

  1. バックアップ ジョブを開いてジョブを作成し、ノードのエージェントを選択します。
  2. 仮想マシン(Proxmox VE、Hyper-V、VMware)を選び、ホスト上のすべての VM(およびコンテナー)を選択します(後から作成したゲストも自動的に含まれます)。または個々のゲストにチェックを入れます。
  3. 手順 2 のストレージを選択します。
  4. スケジュールを設定します。例:平日毎日 22:00。15 分〜12 時間ごとの繰り返し、月 1 回、別のジョブの後に開始することもできます。
  5. 保持を設定します。例:最新 3、日次 7、週次 4、月次 6 で、約半年分の履歴と約 20 の復元ポイントを保持できます。

実行のたびに行われること:

  1. 一時的な Proxmox スナップショット(backupzit_…)が作成されます。ゲストは動作し続けます。
  2. 各ディスクはスナップショットから 1 MiB ブロック単位で読み取られます。空のブロックは保存されず、リポジトリにすでにあるブロックは再送されません。初回以降は変更されたデータだけがネットワークを流れます。それでも各バックアップは完全な復元ポイントです。
  3. スナップショットが削除されます。ゲストの構成(CPU、メモリ、ネットワーク、ディスク)はバックアップと一緒に保存されます。

変更のないデータは 1 回しか保存されないため、長期保持でも追加容量はわずかです。

稼働中にバックアップできるディスク

Proxmox ストレージ稼働中のゲストのバックアップ
LVM-thin(local-lvm)可(スナップショットから)
ZFS(VM ディスク / zvol)可(スナップショットから)
Ceph RBD可(スナップショットから)
ディレクトリ、NFS、CIFS 上の qcow2可(スナップショットから)
ディレクトリ、NFS、CIFS 上の raw、シック LVM不可 — ゲストを停止するかディスクを移動してください

停止中のゲストはこれらすべてでバックアップできます。Backup: no(backup=0)のディスク、パススルーした物理ディスク、bind mount はスキップされ、警告として報告されます。

手順 5 — アプリケーション整合性のあるバックアップ

VM 内で QEMU guest agent が動作し、オプションで有効になっていれば、Proxmox はスナップショットのために VM のファイルシステムをフリーズし、データベースなどのアプリケーションをクリーンな状態で取得します。ない場合、バックアップはクラッシュ整合性になります(停電後と同じ状態)。

Debian または Ubuntu の VM では:

apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent

Windows の VM には VirtIO guest tools をインストールします。その後、ノードで VM のエージェントを有効にします(次回 VM を完全に停止して起動した後に有効):

qm set <vmid> --agent enabled=1

各バックアップの実行ページには、ゲストごとに読み取ったディスクと取得方法が表示されます。

手順 6 — オフサイトコピーを保持(3-2-1)

3-2-1 ルール:データのコピーを 3 つ、2 種類の媒体に、そのうち 1 つを別の場所に。種類がバックアップ コピーの 2 つ目のジョブを追加し、Proxmox ジョブをソースに、Object Lock 付きの S3 バケットや別の建物にある堅牢化リポジトリなどのオフサイトを保存先にします。

  • エージェントは既存のバックアップをコピーします。VM を再読み取りすることはありません。
  • 保存先にまだないデータだけが、保存先の鍵で暗号化されて送信されます。
  • 既定ではソースジョブの各バックアップ後にコピーが実行されます。回線が遅い場合は夜 1 回など、任意のスケジュールも可能です。
  • コピーには独自の保持があります。例:NAS に日次 7、クラウドに月次 12。

コピーからも元のバックアップと同様に VM を復元できます(VM 全体、個別ファイル、インスタントリカバリー)。変更不可のコピーについてはランサムウェア対策をご覧ください。

手順 7 — バックアップが起動することを証明

ブロックが読めても、VM が起動するとは限りません。設定 → 復元テストで Proxmox VM バックアップの起動テストをオンにします。復元テストは、最新バックアップの各 VM をジョブのノード上で 1 台ずつ、バックアップから直接、新しい ID と切断したネットワークカードで起動し(元の VM と競合しないように)、その後削除します。

  • VM の QEMU guest agent が時間内に応答すれば(OS が起動すれば)合格です。guest agent のない VM は 1 分間動作し続ければ合格し、「起動済み」ではなく「実行中」と表示されます。
  • テスト中、ノードには VM をもう 1 台動かせる空きメモリが必要です。
  • さらにデータチェック(既定は毎月)が保存済みの全データを読み取り、チェックサムと照合して、バックアップが必要になる前にストレージ自体の損傷を見つけます。

復元

バックアップの実行(ジョブページまたはアクティビティから)を開き、VM またはコンテナーを復元を選択します。

VM またはコンテナー全体

  • エージェントがある任意のノードに復元できます(別クラスターのノードも可)。
  • 次の空き ID の新しいゲストとして(既定)復元すると、元のゲストは動作したままで、コピーには新しい MAC アドレスが付きます。または、ゲストを削除した後に元の ID で復元し、必要に応じて既存のゲストを置き換えます。
  • ディスクの名前とストレージ、復元後にゲストを起動するかどうかを選択します。
  • 復元のたびに VM に新しい世代 ID(vmgenid)が付与されるため、Windows のドメインコントローラーはロールバックを安全に検出できます。

インスタントリカバリー:VM が数秒で動く

通常の復元はディスクのコピーと同じだけ時間がかかります。すぐに、バックアップから実行を使うと、エージェントがバックアップのディスクを読み取り専用で提供し、書き込みがローカルのオーバーレイに入る新しい VM を起動します。問題なければ、完了するで VM を動かしたままディスクを選択したストレージに移動します(qm disk move)。VM を破棄は VM とその変更を削除します。VM の速度はバックアップストレージ次第なので、ローカルディスクや高速なネットワーク共有上のリポジトリが最適です。インスタントリカバリーは VM 用で、コンテナーには使えません。

個別ファイル

バックアップ実行のゲスト表でファイルを参照をクリックします。コンソールはバックアップから直接ディスクを読み取り(事前の復元は不要)、LVM 内も含めて NTFS、ext2/3/4、XFS を参照できます。ファイルをダウンロードする(複数なら ZIP)か、任意のエージェント上のフォルダーに復元します。コンソールでの参照には、ネットワークストレージ(SFTP、S3、SMB、Azure、堅牢化リポジトリ)上のバックアップが必要です。

重要なゲストのレプリカ

ジョブの詳細設定にある VM のレプリカを維持を使うと、バックアップのたびに各ゲストの停止状態のコピーを別のノードやクラスター上で最新に保ちます。書き込むのは変更されたブロックだけで、通常はバックアップごとに数秒です。ゲストを失った場合は、レプリカを起動で最新バックアップのデータのまま、復元なしで起動できます。

コマンドラインから

コンソールがなくてもすべて操作できます。たとえば障害後にノードを再構築する場合:

backupzit-agent pve list
backupzit-agent pve show    --repo ... latest
backupzit-agent pve restore --repo ... --vmid 100 --new-vmid -1 --storage local-lvm --start latest

Proxmox ホスト自体のバックアップ

ゲストはノードの半分にすぎません。ストレージ定義、ネットワーク、ユーザー、ファイアウォール、証明書、各 VM とコンテナーの設定はノードの構成に含まれています。ノードのエージェントで通常のファイルとフォルダー ジョブを使い、たとえば毎日、パス /etc(/etc/pve、ネットワーク、/etc/hosts を含む)と /var/lib/pve-cluster(構成データベース config.db)をバックアップします。ノードの稼働中にデータベースの完全に整合したコピーを取るには、次をバックアップ前のコマンドに追加し、/root/pve-config.db もバックアップ対象に含めます:

# one-time: apt install sqlite3
sqlite3 /var/lib/pve-cluster/config.db ".backup /root/pve-config.db"

故障したノードを再構築するには:同じホスト名とアドレスで同じバージョンの Proxmox VE をインストールし、エージェントをインストールして、/etc/network/interfaces と /etc/hosts を復元します。クラスター サービスを停止し(systemctl stop pve-cluster)、config.db を /var/lib/pve-cluster に復元してサービスを再起動し、その後ゲストを復元します。クラスターでは config.db を復元する代わりに、再インストールしたノードをクラスターに再参加させます。

知っておくべき制限

  • サポート対象は Proxmox VE 7、8、9 です。XCP-ng はサポートしていません。
  • ZFS サブボリューム上のコンテナーディスクはまだサポートしていません。
  • ディレクトリ、NFS、CIFS ストレージ上の raw ディスクとシック LVM 上のディスクは、ゲスト停止中のみバックアップできます。
  • クラスターでは、ジョブは自分のノード上のゲストをバックアップします。別ノードに移行したゲストは警告として報告されます。移行したゲストも保護し続けるには、各ノードでホスト上のすべての VM(およびコンテナー)を使ってください。
  • cloud-init ドライブは保存されません。復元時に構成から再作成されます。

次のステップ

BackupZit は無料のオープンソース(AGPLv3)で、VM やノードの数に制限はありません。ダウンロードして、すべての Proxmox 機能を確認するか、コンソール内蔵ガイドの Proxmox VE の章をお読みください。質問は GitHub Discussions で歓迎しています。企業向けには MaxZit が有償サポートを提供しています(英語のみ)。