Proxmox VEで多くのLXCコンテナを稼働させており、毎日Proxmox Backup Server (PBS) にバックアップを取っています。 ストレージはCeph RBD (SSD)、ネットワークは2.5GbEとスペック的には十分なのに、バックアップに毎回約25分かかっていました。
調査と対策の結果、最終的に4分強まで短縮できたので、その過程を共有します。
| 項目 | 値 |
|---|---|
| Proxmox VE | 9.2.3 (8C16T CPU, 64GB RAM, 2.5GbE) |
| Proxmox Buackup Server | 4.1.4 (8C16T CPU, 32GB RAM, 2.5GbE) |
| バックアップ対象 | LXC 17台 |
| ストレージ | Ceph RBD (SSD) |
| /etc/vzdump.conf | 全デフォルト(最適化一切なし) |
まず、なぜデフォルト設定のままだと遅いのかを理解するために、PBSバックアップの内部動作を整理します。
vzdumpはコンテナのスナップショットを作成し、proxmox-backup-clientを使ってPBSに送信します。
このときファイルの変更検出には3つのモードがあります。
| モード | 変更検出方法 | 変わってないファイルの扱い |
|---|---|---|
| Default(初期値) | 全ファイルを読み込み、ハッシュ値で比較 | 読むが送らない |
| data | 全ファイル読み込み+メタデータ分離保存 | 読むが送らない |
| Metadata | メタデータ(サイズ・更新日時など)で比較 | 読まない、送らない |
PBSはチャンク(データの断片)単位で重複排除を行うため、Defaultモードでも「変わっていないチャンク」は再送信されません。 しかし変わっていないことを確認するために、全ファイルをディスクから読み込んでハッシュ計算する必要があります。
これが「読んでいるのに送っていない」という非効率の正体です。
Metadataモードは、前回バックアップのメタデータと比較し、ファイルサイズ、種類、所有者、パーミッション、ACL、拡張属性、mtimeなどが変わっていないファイルを再利用候補とします。未変更と判定できた場合は、ファイル内容をディスクから再読込せず、前回スナップショットのデータチャンクを再利用します。 なのでメタデータの比較だけで変更判定を行うため、ディスクI/Oが激減します。
変更のないファイルの読み取り自体をスキップする、これがMetadataモードの核心です。
QEMU VMはファイル単位ではなくブロックデバイス単位でバックアップされ、dirty-bitmap(変更ブロック追跡)による高速な増分バックアップがデフォルトで有効です。 VM側は既に最適化されているため、今回のボトルネックはLXCコンテナのファイル単位バックアップにあります。
バックアップログから各コンテナのpxarメトリクスを抽出しました。
| バックアップ対象 | 全体サイズ | 処理時間 | ファイル数 | 処理速度の目安 |
|---|---|---|---|---|
| 85 MiB | 7.9 GiB | 316秒 | 約60万 | 約1,898 ファイル/秒 |
| 92 MiB | 5.7 GiB | 124秒 | 約23万 | 約1,854 ファイル/秒 |
| 158 MiB | 4.4 GiB | 161秒 | 約13万 | 約807 ファイル/秒 |
| バックアップ対象 | 全体サイズ | 処理時間 | 状態 |
|---|---|---|---|
| 0 B | 3.9 GiB | 68秒 | 変更なし(メタデータ等スキャンのみ) |
| 0 B | 3.8 GiB | 63秒 | 変更なし(メタデータ等スキャンのみ) |
全コンテナに共通するのは、ファイルシステム全体のうち実際に変更されているのは1〜5%程度なのに、 Defaultモードでは残り95〜99%の変更のないファイルもすべてディスクから読み込んでいることです。
特に「変更ゼロ」のコンテナでさえ60秒以上かかっていることが、全ファイル読み取りのオーバーヘッドを如実に示しています。
17台のLXC合計で約150万ファイル、総ファイルシステムサイズは約80GiB。 この全量を毎回スキャンしていることが25分の主因でした。
/etc/vzdump.confに1行追加するだけです。
pbs-change-detection-mode: metadata
またはWebUI: Datacenter → Backup → ジョブ編集 → Advanced → Change Detection Mode → Metadata

Metadataモード設定後、短時間で連続2回実行して効果を測定しました。
| 実行 | 時間 | 備考 |
|---|---|---|
| 1回目 | 25分55秒 | Default→Metadataに変更 |
| 2回目 | 4分17秒 | Metadata本領発揮 |
下表は実際のバックアップログから抽出した各VM/CTの所要時間、ファイル数、再利用率です。 Defaultの値はMetadata導入前の直近数回の平均、Metadataの値は2回目実行時の実測値です。
| ID | 種別 | ファイル数 | FSサイズ | Default | Metadata | 改善率 | 再利用率 |
|---|---|---|---|---|---|---|---|
| 102 | LXC | 133,653 | 4.4 GiB | 69秒 | 11秒 | -84% | 99.1% |
| 103 | LXC | 77,852 | 3.4 GiB | 82秒 | 7秒 | -91% | 98.5% |
| 104 | LXC | 113,043 | 3.6 GiB | 74秒 | 9秒 | -88% | 98.7% |
| 105 | LXC | 77,020 | 8.1 GiB | 83秒 | 7秒 | -92% | 98.1% |
| 106 | LXC | 108,693 | 3.2 GiB | 62秒 | 15秒 | -76% | 97.4% |
| 107 | LXC | 76,913 | 3.0 GiB | 62秒 | 6秒 | -90% | 99.1% |
| 108 | LXC | 89,460 | 4.1 GiB | 135秒 | 7秒 | -95% | 99.0% |
| 109 | LXC | 228,453 | 5.7 GiB | 99秒 | 18秒 | -82% | 99.5% |
| 110 | LXC | 192,113 | 4.5 GiB | 57秒 | 15秒 | -74% | 99.2% |
| 111 | LXC | 83,463 | 3.5 GiB | 319秒 | 7秒 | -98% | 99.2% |
| 112 | LXC | 606,984 | 7.9 GiB | 316秒 | 52秒 | -84% | 99.6% |
| 113 | LXC | 109,506 | 3.9 GiB | 61秒 | 10秒 | -84% | 100% |
| 114 | LXC | 93,203 | 3.8 GiB | 63秒 | 9秒 | -86% | 100% |
| 115 | LXC | 101,238 | 3.5 GiB | 54秒 | 9秒 | -83% | 100% |
| 116 | LXC | 84,292 | 2.8 GiB | 72秒 | 7秒 | -90% | 99.5% |
| 117 | LXC | 124,237 | 3.3 GiB | 72秒 | 11秒 | -85% | 99.0% |
| 118 | LXC | 137,410 | 7.3 GiB | 92秒 | 11秒 | -88% | 99.8% |
変更ゼロのコンテナ(LXC 113, 114, 115)
Defaultモードでは「何も変わっていない」ことを確認するだけで約60秒かかっていましたが、 Metadataモードではメタデータ比較のみで完了するため10秒未満に。
Change detection summary:
109,165 unchanged, reusable files with 3.9 GiB data
0 changed or non-reusable files with 0 B data
root.ppxar: reused 3.9 GiB (100.0%)
Duration: 10s
最多ファイル数のコンテナ(LXC 112: 約61万ファイル)
全ファイル中、実際に変更があったのはわずか44ファイル。 99.6%を前回スナップショットから再利用し、316秒→52秒に。
LXC 111
7.9GiBのファイルシステムのうち変更は約267MiBでしたが、 Defaultモードでは全量スキャンのため319秒。Metadataモードでは7秒と約45倍高速化。
| フェーズ | 処理時間 |
|---|---|
| Metadata導入前(Default) | 約25分 |
| Metadata導入後(1回目) | 約26分 |
| Metadata導入後(2回目) | 約4分17秒 |
17台のLXCコンテナ、合計約150万ファイル・約80GiBのPBSバックアップが、
/etc/vzdump.confにたった1行追加するだけで25分→4分17秒になりました。
pbs-change-detection-mode: metadata