Dawan Proxmox VE — TSSR

Chapitre 5 — SDN, pare-feu et sauvegarde

4. PBS : déployer et connecter

Le principe est posé. Cette section installe PBS là où il doit être — jamais sur l'infrastructure qu'il protège — puis le relie aux nœuds Proxmox.

4.1 Architecture de déploiement PBS

PBS s'installe sur sa propre machine, séparée du cluster Proxmox VE. Cette séparation est indispensable : un serveur de backup ne doit jamais être hébergé sur l'infrastructure qu'il protège. Si un hyperviseur tombe en panne, PBS doit rester accessible pour restaurer les VMs.

Architecture recommandée : pve-node1 et pve-node2, sur le réseau de production (VLAN 10), sauvegardent vers PBS (Debian 13, port 8007, datastore ZFS pool). Ils passent par un réseau dédié séparé (VLAN 20). PBS est physiquement séparé du cluster, idéalement dans un autre datacenter.

L'installation de PBS sur Debian 13 :

Sur la machine Debian 13 qui deviendra le PBS :

# Sur la machine dédiée PBS
# 1. La clé qui signe les dépôts Proxmox : absente d'une Debian neuve
wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg \
  -O /usr/share/keyrings/proxmox-archive-keyring.gpg
sha256sum /usr/share/keyrings/proxmox-archive-keyring.gpg   # à comparer à la valeur de la documentation

# 2. Le dépôt PBS (format DEB822 pour Debian 13)
nano /etc/apt/sources.list.d/pbs.sources                  # un fichier neuf

Le contenu de pbs.sources, à taper dans nano, puis Ctrl + O, Entrée et Ctrl + X :

Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

Sur la machine dédiée PBS :

# 3. Installation
apt update                                                # la liste des paquets
apt install -y proxmox-backup-server                      # le serveur de sauvegarde

Résultat attendu — sur une VM Debian 13.7 neuve (image cloud officielle). Sans l'étape 1, apt update refuse le dépôt :

Err:7 http://download.proxmox.com/debian/pbs trixie InRelease
  Sub-process /usr/bin/sqv returned an error code (1), error message is: Error: Failed to parse keyring "/usr/share/keyrings/proxmox-archive-keyring.gpg" [...] No such file or directory (os error 2)
Error: The repository 'http://download.proxmox.com/debian/pbs trixie InRelease' is not signed.

Avec la clé :

136673be77aba35dcce385b28737689ad64fd785a797e57897589aed08db6e45  /usr/share/keyrings/proxmox-archive-keyring.gpg
Get:7 http://download.proxmox.com/debian/pbs trixie InRelease [2785 B]
Get:8 http://download.proxmox.com/debian/pbs trixie/pbs-no-subscription amd64 Packages [216 kB]
[...]
Setting up proxmox-backup-server (4.2.6-1) ...
Created symlink '/etc/systemd/system/multi-user.target.wants/proxmox-backup-proxy.service' → '/usr/lib/systemd/system/proxmox-backup-proxy.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/proxmox-backup.service' → '/usr/lib/systemd/system/proxmox-backup.service'.

Deux services sont installés, et leur distinction compte pour le diagnostic. proxmox-backup fait le travail de sauvegarde ; proxmox-backup-proxy sert l'interface web sur le port 8007. Une interface inaccessible alors que les sauvegardes fonctionnent désigne le second.

Le format DEB822 — le fichier .sources — est celui de Debian 13. L'ancien format sur une ligne, dans sources.list.d/*.list, fonctionne encore mais est déconseillé : il ne permet pas de désigner la clé de signature par dépôt, ce que fait ici Signed-By.

pbs-no-subscription est le composant sans abonnement, adapté au lab et aux tests. En production, pbs-enterprise donne accès aux paquets validés et au support.

Si PBS a été installé depuis l'ISO officielle, il arrive au contraire avec le dépôt enterprise actif. Il faut le basculer avant toute mise à jour : voir la capture ci-dessous.

PBS, onglet Repositories : le dépôt enterprise activé sans abonnement

L'onglet Administration → Repositories d'un PBS sortant d'installation. Le bandeau jaune ne laisse aucun doute : « The enterprise repository is enabled, but there is no active subscription! ». Trois dépôts déclarés, répartis en deux fichiers :

  • /etc/apt/sources.list.d/debian.sources — les deux dépôts Debian, trixie et trixie-security. Ils n'ont rien à voir avec l'abonnement et restent en place.
  • /etc/apt/sources.list.d/pbs-enterprise.sources — le dépôt pbs-enterprise, coché, d'origine Proxmox. C'est lui qui déclenche l'avertissement, et c'est lui qu'on désactive.

Regardez la colonne Components : elle affiche pbs-enterprise, et affichera pbs-no-subscription après la bascule. Le nom du composant n'est pas le même que sur Proxmox VE (pve-enterprise / pve-no-subscription) : c'est le même mécanisme, décliné produit par produit.

Administration → Repositories → sélectionner la ligne enterprise.proxmox.com → Disable, puis Add → No-Subscription. Enfin Administration → Updates → Refresh et Upgrade.

État après installation : Sur la machine Debian 13 qui deviendra le PBS :

# Le service de sauvegarde, puis le port de l'interface web
systemctl status proxmox-backup
ss -tlnp | grep 8007   # PBS doit écouter sur le port 8007

Résultat attendu :

● proxmox-backup.service - Proxmox Backup API Server
     Loaded: loaded (/usr/lib/systemd/system/proxmox-backup.service; enabled; preset: enabled)
     Active: active (running) since Tue 2026-09-29 13:56:53 CEST; 2s ago
 Invocation: 4f4e0acc43ac49dd8ff40cc80323f017
   Main PID: 548 (proxmox-backup-)
LISTEN 0      1024               *:8007            *:*    users:(("proxmox-backup-",pid=617,fd=17),("proxmox-backup-",pid=617,fd=16))

Sur pbs1, le PBS du lab. active (running) et un processus à l'écoute sur le port 8007 : le serveur est prêt. ss -tlnp est la vérification la plus directe — si rien n'écoute sur 8007, inutile d'essayer l'interface web.

L'accès web se fait en HTTPS sur le port 8007, avec un certificat auto-signé que le navigateur signale comme non fiable. C'est attendu à l'installation ; l'avertissement s'accepte en lab, et se remplace par un certificat Let's Encrypt en production.

Ne confondez pas les ports : 8006 pour Proxmox VE, 8007 pour Proxmox Backup Server. Ce sont deux machines distinctes ici.

L'identifiant est root@pam — le realm pam désigne l'authentification par les comptes Linux de la machine. Le mot de passe est donc celui du root système, pas un mot de passe propre à PBS.

Sur le serveur PBS, on crée ensuite un datastore — un répertoire local qui héberge les sauvegardes. C'est un objet côté PBS, et il doit exister avant que Proxmox VE puisse le désigner : dans la fenêtre d'ajout du stockage côté PVE, le champ Datastore propose une liste.

Cette liste est vide tant qu'aucun datastore n'a été créé ici. Par l'interface, c'est le bouton Add Datastore du panneau de gauche.

Dans le Shell de PBS (interface web de PBS → Administration → Shell) :

# Creer le datastore "demo-store" dans /mnt/backup-zfs/demo-store
proxmox-backup-manager datastore create demo-store /mnt/backup-zfs/demo-store

# Verifier
proxmox-backup-manager datastore list
# -> Name         Path                           Comment
# -> demo-store   /mnt/backup-zfs/demo-store

Résultat attendu — sur pbs1, le PBS du lab, avec un datastore d'essai essai-store (supprimé ensuite) ; la liste montre aussi les deux datastores des ateliers :

Chunkstore create: 1%
[...]
Chunkstore create: 99%
Access time update check successful.
TASK OK

┌──────────────┬───────────────────────────┬─────────┐
│ name         │ path                      │ comment │
╞══════════════╪═══════════════════════════╪═════════╡
│ backup-store │ /var/lib/backup-store     │         │
├──────────────┼───────────────────────────┼─────────┤
│ demo-store   │ /mnt/datastore/demo-store │         │
├──────────────┼───────────────────────────┼─────────┤
│ essai-store  │ /var/tmp/essai-store      │         │
└──────────────┴───────────────────────────┴─────────┘

La progression du chunkstore n'est pas décorative : PBS crée 65 536 sous-répertoires destinés à répartir les blocs de données. C'est ce qui évite d'avoir des millions de fichiers dans un seul répertoire, situation qu'aucun système de fichiers ne gère bien.

Access time update check successful : PBS a vérifié que le système de fichiers met bien à jour la date d'accès des fichiers ; le ramasse-miettes s'en sert pour savoir quels blocs sont encore utilisés. TASK OK est le vocabulaire des tâches Proxmox : la même mention apparaît dans l'interface web pour toute opération terminée avec succès.

Le répertoire doit exister et être vide, sur un système de fichiers dédié. Créer un datastore sur la partition racine remplit / au premier grand transfert et bloque le serveur.

ZFS est le socle recommandé, pour ses sommes de contrôle : une sauvegarde silencieusement corrompue est pire que pas de sauvegarde du tout, et c'est exactement ce que ZFS détecte.

ZFS comme système de fichiers pour PBS : ZFS est vivement recommandé pour les datastores PBS. Ses checksums natifs s'ajoutent aux checksums SHA-256 de PBS, créant une double couche de protection contre la corruption silencieuse. La commande zpool scrub + les verify jobs PBS offrent une couverture d'intégrité quasi complète.

4.2 Connexion PBS ↔ Proxmox VE

Pour que Proxmox VE puisse sauvegarder vers PBS, il faut l'ajouter comme stockage. Trois informations sont nécessaires avant de commencer.

1 — Le fingerprint TLS de PBS : PBS génère un certificat TLS auto-signé à l'installation. Son empreinte SHA-256 permet à PVE de vérifier l'identité de PBS sans autorité de certification externe.

Dans le Shell de PBS (interface web de PBS → Administration → Shell) :

# Sur le serveur PBS
proxmox-backup-manager cert info   # à lire : la ligne Fingerprint et les suivantes
# → Fingerprint (sha256):
# → AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:...

2 — Un token API PBS : évitez le compte root. Créez un utilisateur et un token dédiés :

Dans le Shell de PBS (interface web de PBS → Administration → Shell) :

# Sur PBS : créer un utilisateur de backup
proxmox-backup-manager user create backup@pbs --password 'BackupSecure2026!'

# Créer le token API — son secret ne s'affiche qu'une fois : copiez-le
proxmox-backup-manager user generate-token backup@pbs pve-token

# Accorder les droits sur le datastore AU JETON (un jeton n'hérite pas de son compte)
proxmox-backup-manager acl update /datastore/demo-store DatastoreBackup --auth-id 'backup@pbs!pve-token'

Résultat attendu de generate-token :

Result: {
  "tokenid": "backup@pbs!pve-token",
  "value": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Dans PBS, un jeton a toujours ses propres droits : l'ACL doit viser backup@pbs!pve-token, et non le compte backup@pbs. Oublier ce détail donne un stockage déclaré côté PVE, mais des sauvegardes refusées avec permission check failed. Le rôle DatastoreBackup autorise à créer des sauvegardes et à lire les siennes, sans pouvoir effacer celles des autres.

3 — Ajouter dans Proxmox VE :

Dans le Shell du nœud (interface web → votre nœud → Shell) :

# Déclarer le serveur PBS comme stockage de sauvegarde du cluster.
pvesm add pbs pbs-backup \
  --server <ip-du-serveur-pbs> \
  --datastore demo-store \
  --username 'backup@pbs!pve-token' \
  --password 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  --fingerprint 'AA:BB:CC:DD:...'
# --username : la forme utilisateur@realm!nom-du-jeton, entre apostrophes :
#   sans elles, bash interprète le « ! » comme un rappel d'historique.
# --password : pour un jeton, c'est son secret, affiché UNE SEULE FOIS à sa création.
# --fingerprint : empreinte du certificat auto-signé de PBS. Sans elle, la
#   connexion est refusée ; on la relève sur le serveur PBS par
#   « proxmox-backup-manager cert info | grep Fingerprint ».

Résultat attendu :

Name              Type     Status     Total (KiB)      Used (KiB) Available (KiB)        %
ceph-vm            rbd     active        68741579         1617667        67123912    2.35%
local              dir     active        14210064         9104968         4361468   64.07%
local-lvm      lvmthin     active       136179712        10009208       126170503    7.35%
pbs-backup         pbs     active       102625188         2529284        94836696    2.46%
zfs-vms        zfspool     active        50298076             160        50297916    0.00%

Sur pxe211 au chapitre 5 (le Ceph et le ZFS des chapitres précédents sont là aussi). Le statut active confirme trois choses d'un coup : le serveur PBS est joignable, l'empreinte du certificat a été acceptée, et les identifiants sont bons.

Les tailles sont en kibioctets, comme partout dans pvesm. La colonne Used reflète l'occupation après déduplication — c'est-à-dire l'espace réellement consommé sur le datastore, non le volume des sauvegardes.

Un statut inactive juste après l'ajout vient presque toujours de l'empreinte du certificat. PBS présente un certificat auto-signé. Proxmox VE refuse la connexion tant que son empreinte n'a pas été enregistrée avec le stockage : champ Fingerprint dans l'interface, ou --fingerprint en ligne de commande.

L'empreinte se relève sur le serveur PBS par proxmox-backup-manager cert info | grep Fingerprint.

Le stockage apparaît également dans Datacenter → Storage avec le type "Proxmox Backup Server".

▶ À pratiquer maintenant — Atelier 2

Déclarer le serveur de sauvegarde auprès de Proxmox et vérifier son empreinte : c'est le préalable de tout le reste du chapitre.

4.3 Les namespaces PBS

Un namespace est un dossier logique à l'intérieur d'un datastore. Il sert quand plusieurs clusters sauvegardent dans le même datastore : chacun a sa VM 101, et sans namespace leurs sauvegardes vm/101 se mélangent. Avec un namespace par cluster (pve1, pve2), chacun range les siennes à part.

Datastore PBS sans namespaces (collision de deux VM 211) et avec namespaces (un préfixe ns par cluster)

Deux clusters ont chacun leur VM 211 : sans namespace, leurs sauvegardes portent le même chemin vm/211/… et se mélangent. Avec un namespace par cluster, le préfixe ns/<nom>/ les sépare.

Dans PBS : Datastore → votre datastore → Content → Add Namespace. Dans Proxmox VE, le stockage PBS indique ensuite dans quel namespace écrire (champ Namespace). Un utilisateur PBS peut être limité à son seul namespace.

On les crée avant la première sauvegarde : un groupe de sauvegardes déjà écrit à la racine y reste. C'est aussi là qu'on range la copie d'un autre PBS (§ 6.1) : un namespace par source, et rien ne se mélange.

▶ À pratiquer maintenant — Atelier 3

Un namespace par nœud dans le même datastore, et un utilisateur PBS qui ne voit que le sien.

À retenir : PBS s'installe hors de l'infrastructure qu'il protège, avec un datastore sur un système de fichiers dédié. On le déclare dans Proxmox VE comme stockage, avec son adresse et un jeton dédié plutôt que root.

Il ne faut pas oublier l'empreinte de son certificat, dont l'absence est la première cause d'un statut inactive. Les namespaces rangent séparément les sauvegardes de plusieurs sources dans un même datastore : on les crée avant la première sauvegarde.