本文へ移動
購読
GUIDE#infra更新 2026.10.02

Proxmoxのバックアップ戦略:Proxmox Backup Serverで3-2-1ルールを実現する

PBSのインストールからDatastoreBackup権限での登録、保持ポリシー、verify・GC、VM丸ごととファイル単位の復元、リモート同期と暗号化鍵の保管まで、自宅の3-2-1を組み立てます。

level
中級
time
約30分
stack
Proxmox VE 9 / Proxmox Backup Server 4
author
@ryoma_t
// 前提条件
Proxmox VEが稼働していること / PBS用の別マシン(またはVMと外付けディスク)

Proxmox Backup Server(PBS)とは、Proxmox VEのVM・コンテナと物理ホストを、ブロック単位の重複排除と増分転送でバックアップする専用サーバーで、Web UIはポート8007、ライセンスはAGPLv3です。3-2-1ルール(3つのコピー、2種類の媒体、1つはオフサイト)を自宅の機材で成立させるうえで、もっとも手数の少ない道具です。

構成は、Proxmox VE 9のホストから別マシンのPBS 4へ毎晩バックアップし、週次でverify、日次でGC、離れた場所の2台目PBSへ同期し、暗号化鍵を紙でも保管する、というものです。

この記事でわかること

  • 3-2-1ルールを自宅の機材に当てはめたときの具体的な配置
  • vzdumpの単一ファイル方式とPBSのチャンク方式(重複排除・増分・verify)の違い
  • PBSのインストール、データストア作成、DatastoreBackup権限でのPVE登録
  • keep-daily/weekly/monthlyの保持設計と、prune・GC・verifyがそれぞれ何をするか
  • VM丸ごと・ファイル単位の復元、リモートPBSへの同期、暗号化鍵の保管

3-2-1ルールとは:自宅の機材に当てはめる

3-2-1ルールは「データのコピーを3つ、2種類の媒体に、うち1つは別の場所に」という配置の原則です。数字の根拠は故障モードの分離にあります。同じSSDにVMとバックアップを置けば1回の故障で両方消え、同じ部屋に2台置けば火災や盗難で両方消えます。ランサムウェア対策として1つをオフライン(または書き換え不能)にし、verifyでエラーゼロを確認する「3-2-1-1-0」まで伸ばす考え方はランサムウェア対策の実践で扱っています。

要件自宅での実装例守れる障害
3つのコピー稼働中のVM + 自宅PBS + オフサイトPBS(または外付けHDD)誤削除、VM破損
2種類の媒体PVEのNVMe SSD と PBSのHDD(ZFSミラー)同一ロットSSDの同時故障、ファームウェア不具合
1つはオフサイト実家や職場のPBSへTailscale経由で同期、またはUSB HDDの持ち出し火災、盗難、落雷

PBSは別の物理マシンに置くのが原則です。理由は単純で、PVEホストが死んだときにバックアップサーバーまで一緒に落ちると復元の起点がなくなるからです。別機がない場合の妥協案は、PVE上のVMにPBSを入れてデータストアだけUSB HDDやNASに置く構成で、ホスト故障後にそのVMのディスクと外付けHDDを新しいPVEに移せば復元できます。

PVE標準バックアップ(vzdump)とPBSの違い

vzdumpはVMのディスク全体を毎回読み、.vma.zst という1ファイルにまとめて書き出します。VM 5台・合計200GBなら毎晩200GB近く読み書きし、世代を3つ持てば600GBです。PBSはディスクを固定長(VMは4MiB)のチャンクに分割してSHA-256でハッシュし、すでに持っているチャンクは送りません。2日目以降は変更分だけがネットワークを流れ、世代を10持っても消費は「初回 + 差分」で済みます。

項目vzdump(local/NFS)PBS
保存形式.vma.zst 単一ファイル4MiBチャンク + インデックス
毎回の転送量フル増分(QEMUのdirty bitmapで変更ブロックのみ読む)
重複排除・検証なしチャンク共有、verifyジョブ
ファイル単位の復元不可(VM丸ごと)Web UIから可
暗号化・オフサイト同期手作業クライアント側暗号化、Syncジョブ

dirty bitmapはVMが動いている間だけQEMUが保持する「前回以降に書かれたブロックの地図」で、VMを停止すると失われます。翌日はディスク全体を読み直しますが、ハッシュが一致するチャンクは送られないので、遅くなるのは読み取りだけです。

PBSのインストール:別マシンかVMか

公式サイトのISO(proxmox-backup-server_4.0-1.iso のような名前)をUSBに書き、インストーラーを起動します。手順はPVEと同じで、対象ディスク・地域・rootパスワード・固定IPを指定するだけです。OS用には小容量のSSDを1本、データストア用には別のディスクを用意してください。インストール先に大容量HDDを選ぶと、OSとデータストアが同じディスクになり、後で分けるのが面倒です。USBメディアの作り方はProxmox VEの構築ガイドと同じです。

再起動後 https://192.168.10.20:8007 に root(Realm: Linux PAM)でログインし、PVEと同じくリポジトリを切り替えます。執筆時点のPBS 4はDebian 13ベースで、設定ファイルはdeb822形式です。

/etc/apt/sources.list.d/pbs-no-subscription.sources
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
terminal (PBS)
echo "Enabled: false" >> /etc/apt/sources.list.d/pbs-enterprise.sources
apt update && apt dist-upgrade -y

データストアはSSDに置くのが快適です。verifyとGCはチャンクを1つずつ開くランダムI/Oで、HDDだと2TBのデータストアのverifyに数時間かかります。HDDにする場合はZFSミラーにして、verifyは週末にまとめて回してください。

データストアの作成とPVEへの登録

Administration → Storage/Disks → ZFS → Create: ZFS でデータストア用ディスクからプール(2本ならmirror)を作り、「Add as Datastore」にチェックします。1本なら Directory → Create: Directory(ext4)でも同じです。既存のパスから作るなら次のコマンドです。

terminal (PBS)
proxmox-backup-manager datastore create backup /mnt/datastore/backup
proxmox-backup-manager datastore list

次にPVEから使う専用ユーザーを作ります。Configuration → Access Control → User Management → Add でユーザーを追加し(この記事では pve@pbs としました。@ より前の名前は自分で決められます)、Permissions → Add User Permission で Path /datastore/backup、Role DatastoreBackup を付けます。rootや DatastoreAdmin を渡さないのは、PVEホストが乗っ取られてもその資格情報ではデータストア全体を消せないようにするためです。フィンガープリントは Dashboard → Show Fingerprint で表示されます。

terminal (PBS)
proxmox-backup-manager acl update /datastore/backup DatastoreBackup --auth-id pve@pbs
proxmox-backup-manager cert info | grep Fingerprint

PVE側は Datacenter → Storage → Add → Proxmox Backup Server で、ID に任意の名前(例では pbs-main)、Server にPBSのIPアドレス(例では 192.168.10.20)、Username に先ほど作ったユーザー(例では pve@pbs)、Password、Datastore にデータストア名(例では backup)、Fingerprint を入れます。設定は /etc/pve/storage.cfg に書かれます。

terminal (PVE)
pvesm add pbs pbs-main --server 192.168.10.20 --datastore backup \
  --username pve@pbs --fingerprint "aa:bb:cc:...:ff" --password
pvesm status    # pbs-main が active になる

バックアップジョブ:スケジュールと保持ポリシー

PVE側のジョブ

Datacenter → Backup → Add で Storage pbs-main、Schedule 21:00、Selection mode All、Mode Snapshot、Notification は失敗時のみ、にします。Retention タブは「Keep all backups」のままにし、保持はPBS側のPruneジョブに一本化します。2か所に保持設定があると、どちらが消したのか追えなくなります。スケジュールはsystemdのカレンダー式です。

書き方意味
21:00毎日21時
mon..fri 22:30平日22時30分
sat 03:00毎週土曜3時
*:0/3030分ごと

PBS側の保持(Prune)

Datastore → backup → Prune & GC → Prune Jobs → Add で、Schedule daily、keep-last 3、keep-daily 7、keep-weekly 4、keep-monthly 6 にします。keep-* は「その期間ごとに最新の1つを残す」という意味で、上の設定なら直近3世代、日次7日分、週次4週分、月次6か月分が残り、家庭用途でも「先月の状態に戻したい」に応えられます。同じ画面の Garbage Collection は 03:00 の日次にします。

復元手順:VM丸ごととファイル単位

VM丸ごとの復元は、PVEで pbs-main → Backups → 対象スナップショット → Restore です。VM IDを新しい番号(例: 900)にして、Storage を選び、「Unique」にチェックしてMACアドレスを再生成すると、元のVMと同じLANで並走させられます。動作を確認してから元VMを消し、必要ならIDを付け替えます。

terminal (PVE)
pvesm list pbs-main | grep vm/100
qmrestore pbs-main:backup/vm/100/2026-09-20T12:00:00Z 900 --storage local-lvm --unique 1

ファイル単位の復元は、同じ Backups 画面の「File Restore」です。VMのバックアップでは、PVEが小さな復元専用VMを一時的に起動してディスクイメージを読み取り専用でマウントし、ブラウザでディレクトリを辿ってダウンロードできます。コンテナのバックアップは直接開きます。物理ホストや他のLinux機は proxmox-backup-client でディレクトリ単位(pxar形式)にバックアップし、同じコマンドで戻します。

terminal (Linuxホスト)
export PBS_REPOSITORY=pve@[email protected]:backup
proxmox-backup-client backup etc.pxar:/etc home.pxar:/home
proxmox-backup-client snapshot list
proxmox-backup-client restore host/nas01/2026-09-20T12:00:00Z etc.pxar /tmp/etc-restore

元と同じVM IDに復元すると、稼働中のVMのディスクが上書きされます。必ず別IDに復元して確認してから入れ替えてください。「Unique」を外すとMACアドレスが重複し、元VMと同時に起動した瞬間にIPが取り合いになります。

検証(verify)・プルーニング・ガベージコレクションの役割

この3つは混同されやすいので、何を消し、何を確かめるかを分けて押さえます。Pruneはスナップショット(インデックス)を保持ポリシーに従って削除しますが、チャンク本体は消しません。GCがデータストアを走査し、どのインデックスからも参照されなくなったチャンクを、最終アクセスから24時間5分の猶予を過ぎたものだけ削除します。Pruneの直後に容量が減らないのはこの猶予のためです。

Verifyは各チャンクを読み直してSHA-256を再計算し、保存後に壊れたもの(ディスクの不良セクタ、メモリ化けによるビット腐れ)を見つけます。Datastore → Verify Jobs → Add で Schedule sat 02:00、「Skip verified」にチェック、「Re-verify after」30 日にすると、毎週新しいスナップショットだけを検証し、古いものも月1回は読み直します。検証済みのスナップショットには一覧に緑のチェックが付き、失敗すると復元前に気づけます。

オフサイトコピー:リモートPBS・リムーバブル・クラウド

リモートPBSへの同期(Syncジョブ)

2台目のPBSを実家や職場に置き、オフサイト側から自宅側を「引く(pull)」構成にします。オフサイト側で Configuration → Remotes → Add に自宅PBSのアドレス・ユーザー(DatastoreReader 権限で十分)・フィンガープリントを登録し、Datastore → Sync Jobs → Add で Remote と Remote Datastore、Schedule 04:00 を指定します。pullにする理由は、自宅側が侵害されてもオフサイトの削除権限を持たないからです。執筆時点ではpush方向も選べますが、同じ理由で権限は最小にします。2拠点の経路はTailscaleで結べば、ポート開放なしで済みます。

方法オフライン性復元の速さ向く人
リモートPBS(pull同期)常時接続。権限分離で代替速い(LAN/VPN経由)2拠点に機材を置ける人
リムーバブルデータストア(USB HDD)抜けば完全オフライン持ち帰れば速い2本を交互に持ち出せる人
S3互換ストレージ(執筆時点はテクニカルプレビュー)または rclone でデータストアを同期ストレージ側の削除保護に依存遅い(回線次第)機材を増やせない人

リムーバブルデータストアは執筆時点のPBSで正式機能になっていて、USB HDDを差したときだけマウントされる専用のデータストアにSyncジョブで書き、抜けばランサムウェアからも物理的に切り離せます。2本を1週間ごとに交互に持ち出す運用が、家庭で成立するオフライン保管の現実解です。

暗号化と鍵の保管

PBSの暗号化はクライアント側で行われ、PVEがチャンクをAES-256-GCMで暗号化してから送るため、PBS本体には平文が一切残りません。鍵はPVEの /etc/pve/priv/storage/pbs-main.enc に置かれ、ストレージ追加画面の Encryption タブで「Auto-generate a client encryption key」を選ぶと生成とダウンロードができます。同じ鍵で暗号化したチャンク同士は重複排除も効きます。

terminal (PVE)
proxmox-backup-client key show /etc/pve/priv/storage/pbs-main.enc
proxmox-backup-client key paperkey /etc/pve/priv/storage/pbs-main.enc --output-format text

鍵を失うと、PBS上のバックアップは誰にも復元できません。PVEホストが壊れて鍵ごと消える事故が典型です。paperkey の出力を印刷して封筒に入れ、パスワードマネージャーにも鍵ファイルを保存し、PVE以外の2か所に必ず置いてください。

暗号化はデータが自分の手を離れるとき、つまりクラウドや他人の家にオフサイトを置くときには必須です。自宅LAN内のPBSだけで完結するなら、鍵管理の手間と引き換えに得るものは少なく、無効のままで構いません。後から有効化すると既存のバックアップとは重複排除が効かなくなる点だけ覚えておいてください。

動作確認

PVEのバックアップジョブで「Run now」を2回続けて実行し、2回目のタスクログを読みます。増分が効いていれば次のような行が出ます。

タスクログ(2回目)
INFO: scsi0: dirty-bitmap status: OK (drive clean)
INFO: backup was done incrementally, reused 32.00 GiB (100%)
INFO: Finished Backup of VM 100 (00:00:04)
terminal
# PVE側
pvesm list pbs-main                 # vm/100 のスナップショットが並ぶ
# PBS側
proxmox-backup-manager task list    # backup / verify / prune / gc が OK で終わっている
df -h /mnt/datastore/backup         # GC後に使用量が落ち着いている

最後に別IDへの復元を実際に1回やって起動まで確かめます。復元テストを月1回カレンダーに入れておくと、鍵の紛失や権限の変更に本番で気づく事故がなくなります。

つまずきポイント

  • PVEのストレージ一覧で pbs-main が「?」になり、ログに permission check failed(HTTP 403): PVE用のユーザー(例では pve@pbs)に /datastore/backup のACLが付いていません。proxmox-backup-manager acl list で確認します。
  • PBSを再インストールした後、接続が証明書エラー(fingerprint不一致)で失敗する: 自己署名証明書が作り直されています。PVEの /etc/pve/storage.cfg の fingerprint 行を新しい値に更新します。
  • Pruneを実行しても使用量が減らない: チャンクを消すのはGCで、しかも最終アクセスから24時間5分経ったものだけです。翌日のGC後に df を見てください。
  • 毎晩バックアップが遅く、ログに dirty-bitmap status: created new: VMが再起動やマイグレーションでbitmapを失い、ディスク全体を読み直しています。転送量は重複排除で抑えられるので異常ではありません。毎回出るなら、VMが夜間に停止していないか確認します。

よくある質問

PBSは無料ですか?

はい。Proxmox VEと同じくAGPLv3で、重複排除・増分・verify・暗号化・同期の全機能が無償です。有償サブスクリプションはエンタープライズリポジトリとサポートの対価で、自宅では pbs-no-subscription に切り替えれば更新も受け取れます。

バックアップはどのくらいの頻度が適切?

「失ってよいのは何時間分か」で決めます。家庭のVMなら毎晩1回で十分で、PBSは増分なので毎晩でも数分で終わります。Nextcloudや家計簿DBのように日中も書き込みがあるVMは *:0/30 や 08..22:00 のような日中の追加スケジュールを別ジョブで足します。

復元テストはなぜ必要?

ジョブが成功していても、鍵の紛失、権限の変更、復元先ストレージの容量不足、verify未実施のチャンク破損は、復元して初めて分かるからです。別VM IDに復元して起動する作業は10分で終わるので、月1回の定例にしておきます。

まとめ

PBSを別マシンに置き、PVE用の専用ユーザーに DatastoreBackup だけを与えて毎晩21時に増分を取り、保持はPBSのPruneジョブに一本化し、GCは日次、verifyは週次で回す。これで自宅の3-2-1のうち「3つ・2媒体」までが自動になります。残る「1つはオフサイト」はpull同期のリモートPBSか、USB HDDのリムーバブルデータストアで埋め、クラウドや他人の家に置くなら暗号化して鍵を紙とパスワードマネージャーに分けて保管してください。バックアップ先のNASを自前で組むならTrueNAS SCALEでNASを構築するが対になります。

次に読む

$ subscribe --weekly
毎週月曜、企業ITとホームラボの要点を5分で。