diff --git a/content/de/developer/integration/backup/images/veeam-backup-job-success.png b/content/de/developer/integration/backup/images/veeam-backup-job-success.png new file mode 100644 index 000000000..3ce6b6e15 Binary files /dev/null and b/content/de/developer/integration/backup/images/veeam-backup-job-success.png differ diff --git a/content/de/developer/integration/backup/images/veeam-repository-added.png b/content/de/developer/integration/backup/images/veeam-repository-added.png new file mode 100644 index 000000000..2934003e0 Binary files /dev/null and b/content/de/developer/integration/backup/images/veeam-repository-added.png differ diff --git a/content/de/developer/integration/backup/images/veeam-repository-bucket.png b/content/de/developer/integration/backup/images/veeam-repository-bucket.png new file mode 100644 index 000000000..8665824bb Binary files /dev/null and b/content/de/developer/integration/backup/images/veeam-repository-bucket.png differ diff --git a/content/de/developer/integration/backup/images/veeam-restore-complete.png b/content/de/developer/integration/backup/images/veeam-restore-complete.png new file mode 100644 index 000000000..734e19434 Binary files /dev/null and b/content/de/developer/integration/backup/images/veeam-restore-complete.png differ diff --git a/content/de/developer/integration/backup/index.md b/content/de/developer/integration/backup/index.md index 1eef57c41..8c7323814 100644 --- a/content/de/developer/integration/backup/index.md +++ b/content/de/developer/integration/backup/index.md @@ -11,5 +11,6 @@ Verwenden Sie **RustFS** als Objektspeicher-Backend für Backup-Tools, die Repos - [Velero](./velero.md) - [Kopia](./kopia.md) - [Longhorn](./longhorn.md) +- [Veeam](./veeam.md) Halten Sie Backup-Jobs in einem eigenen Bucket und Präfix und verwenden Sie Zugangsdaten, die auf die erforderlichen Bucket-Operationen beschränkt sind. \ No newline at end of file diff --git a/content/de/developer/integration/backup/meta.json b/content/de/developer/integration/backup/meta.json index dac5156cd..f09cf9599 100644 --- a/content/de/developer/integration/backup/meta.json +++ b/content/de/developer/integration/backup/meta.json @@ -4,6 +4,7 @@ "kopia", "longhorn", "restic", - "velero" + "velero", + "veeam" ] } diff --git a/content/de/developer/integration/backup/veeam.md b/content/de/developer/integration/backup/veeam.md new file mode 100644 index 000000000..c33a58d56 --- /dev/null +++ b/content/de/developer/integration/backup/veeam.md @@ -0,0 +1,144 @@ +--- +title: "Veeam" +description: "Nutzen Sie RustFS als S3-kompatibles Backup-Repository für Veeam Backup & Replication, sichern Sie einen gesamten Computer und stellen Sie Dateien aus dem Backup wieder her." +--- + +Veeam Backup & Replication (VBR) ist eine Enterprise-Backup-Plattform, die Sicherungsdaten in S3-kompatiblem Objektspeicher ablegt. Diese Anleitung zeigt, wie Sie RustFS als VBR-Objektspeicher-Repository registrieren, mit dem Veeam Agent einen gesamten Windows-Computer sichern und eine Datei aus dem gespeicherten Backup wiederherstellen. + +Sie benötigen eine laufende RustFS-Instanz, die über HTTPS erreichbar ist, einen für Backups vorgesehenen Bucket, eine Windows-Maschine mit installiertem VBR 13 (praktisch mindestens 4 vCPU und 8 GB RAM) sowie eine Veeam-Lizenz, die Backup auf Objektspeicher umfasst. + +:::note[Lizenzanforderung] + +Backup auf Objektspeicher ist eine Veeam-Funktion der Enterprise-Stufe. VBR Community Edition kann ein S3-Repository hinzufügen und validieren, aber das Ausführen eines Backup-Jobs darauf erfordert eine Enterprise-Lizenz oder den kostenlosen 30-Tage-Evaluierungsschlüssel (Veeam Data Platform Trial Key). + +::: + +## Architektur + +```mermaid +flowchart LR + Computer["Windows-Computer + (Veeam Agent)"] -->|SigV4 HTTPS| VBR["VBR-Server"] + VBR -->|S3 API| Traefik["Ingress / TLS"] + Traefik --> RustFS["RustFS"] + RustFS --> Bucket["veeam-repo + (Versioning + Object Lock)"] +``` + +Während des Backups schreibt Veeam etwa 1 MiB große Backup-Blöcke über die S3-API in den Bucket; bei einer Wiederherstellung werden nur die Blöcke zurückgelesen, die die angeforderten Daten enthalten. Das Bucket-Präfix in dieser Anleitung ist `veeam`, der Bucket ist `veeam-repo`. + +## 1. Bucket und Anmeldedaten vorbereiten + +Erstellen Sie einen dedizierten Bucket mit aktiviertem Versioning und Object Lock. Versioning ist Voraussetzung für das Object Lock, auf dem die Veeam-Immutability basiert: + +```bash +rc bucket create /veeam-repo --with-lock +rc bucket version info /veeam-repo +``` + +Erstellen Sie eine Richtlinie mit minimalen Rechten, die auf den Bucket beschränkt ist. Die Richtlinie lässt `s3:CreateBucket` bewusst aus: Veeam bietet das automatische Anlegen von Buckets an, und abzulehnen ist der empfohlene Weg, wenn der Bucket bereits existiert. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject", + "s3:GetObjectVersion","s3:DeleteObjectVersion", + "s3:AbortMultipartUpload","s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:PutObjectRetention","s3:GetObjectRetention", + "s3:PutObjectLegalHold","s3:GetObjectLegalHold", + "s3:BypassGovernanceRetention"], + "Resource": ["arn:aws:s3:::veeam-repo/*"] + }, + { + "Effect": "Allow", + "Action": ["s3:ListBucket","s3:ListBucketVersions","s3:GetBucketLocation", + "s3:GetBucketVersioning"], + "Resource": ["arn:aws:s3:::veeam-repo"] + } + ] +} +``` + +```bash +rc admin policy create veeam-repo-rw +rc admin user add veeam +rc admin policy attach veeam-repo-rw --user veeam +``` + +Veeam verlangt HTTPS für den Objektspeicher. Beenden Sie TLS vor RustFS (z. B. mit Traefik oder Nginx) mit einem Zertifikat, dessen SAN den Endpunkt-Hostnamen abdeckt, und importieren Sie dieses Zertifikat in den Speicher **Trusted Root Certification Authorities** des Veeam-Servers. + +## 2. RustFS-Repository in VBR hinzufügen + +Gehen Sie in der VBR-Konsole zu **Backup Infrastructure → Backup Repositories → Add Repository → Object storage → S3 Compatible**: + +1. Service point: Ihr RustFS-HTTPS-Endpunkt, Region: `us-east-1`. +2. Credentials: Access Key und Secret Key des Benutzers `veeam`. +3. Bucket: `veeam-repo`, Folder: `veeam`. +4. Optional: **Make backups immutable** aktivieren (das Object Lock des Buckets ist bereits aktiviert). + +![Repository-Assistent: Bucket veeam-repo mit erkanntem Versioning und Object Lock](./images/veeam-repository-bucket.png) + +Wenn Veeam meldet, dass die automatische Bucket-Bereitstellung mit Access Denied fehlschlägt, wählen Sie **Yes**, um sie zu deaktivieren und fortzufahren — der Bucket existiert bereits, und der IAM-Benutzer kann absichtlich keine Buckets anlegen. + +Bei Erfolg wird das Repository als **S3-compatible** aufgeführt, und der belegte Speicherplatz entspricht dem Bucket-Inhalt: + +![RustFS-Repository unter Backup Repositories als S3-compatible aufgeführt](./images/veeam-repository-added.png) + +## 3. Geschützten Computer registrieren + +Der Backup-Job allein installiert den Veeam Agent nicht. Verwenden Sie eine Protection Group: + +1. **Inventory → Physical and Cloud Infrastructure → Add protection group…** +2. Typ **Individual computers**, fügen Sie die Maschine mit ihrem echten Hostnamen und lokalen Administrator-Anmeldedaten in der Form `HOSTNAME\user` hinzu. +3. Lassen Sie **Install Veeam Backup & Replication Agent** aktiviert und klicken Sie auf Apply. + +:::note[Windows UAC] + +Wenn der Agent-Push mit einem Zugriffsfehler fehlschlägt, setzen Sie `LocalAccountTokenFilterPolicy` auf dem Zielcomputer unter `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` auf `1` und führen Sie erneut einen Rescan durch. Nach der Agent-Installation starten Sie die Maschine neu, sobald die Spalte Backup agent **Reboot required** anzeigt. + +::: + +## 4. Backup-Job ausführen + +1. **Home → Backup Job → Windows computer…** +2. Computers: **From protection group**, Backup Mode: **Entire computer**. +3. Storage: Backup repository = **RustFS**, Aufbewahrung nach Bedarf. +4. Finish, dann klicken Sie mit der rechten Maustaste auf den Job und wählen **Start**. + +Nach Abschluss des Jobs zeigt die Jobliste **Last Result: Success**, und der Restore Point erscheint unter **Home → Backups → Object Storage → RustFS Veeam Backup**: + +![Job erfolgreich, Restore Point unter dem RustFS-Repository aufgeführt](./images/veeam-backup-job-success.png) + +Prüfen Sie die Objekte in RustFS: + +```bash +rc object find /veeam-repo/ | tail -1 +``` + +Veeam speichert etwa 1 MiB große Datenblöcke unter `Veeam/Backup/veeam/Clients/{agent-id}/…`, jedes Objekt mit ETag und Version. + +## 5. Dateien wiederherstellen + +1. **Home → Backups → Object Storage → RustFS Veeam Backup → **. +2. Klicken Sie mit der rechten Maustaste auf den Restore Point → **Restore guest files…** → Browse. +3. Wählen Sie im Backup Browser eine Datei aus, stellen Sie sie in einen Zielordner wieder her und prüfen Sie den Inhalt. + +![Dateiwiederherstellung aus dem RustFS-Backup über den Backup Browser](./images/veeam-restore-complete.png) + +Die Wiederherstellung liest nur die Blöcke zurück, die die ausgewählte Datei enthalten — damit ist der gesamte Lesepfad gegen RustFS validiert. + +## Fehlerbehebung + +| Symptom | Lösung | +|---|---| +| "Backup to object storage requires a valid Enterprise edition license" | Installieren Sie eine Lizenz mit Objektspeicher-Backup (Trial oder kostenpflichtig); Community Edition kann solche Jobs nicht ausführen | +| "backup agent is missing" während des Jobs | Registrieren Sie die Maschine über eine Protection Group (Schritt 3); der Job-Assistent installiert keine Agents | +| Agent-Push schlägt mit Access Denied fehl | Setzen Sie `LocalAccountTokenFilterPolicy=1` auf dem Ziel; verwenden Sie den echten Hostnamen, nicht `localhost` | +| Spalte Backup agent zeigt "Reboot required" | Starten Sie die Maschine neu, um die Agent-Installation abzuschließen | +| Konsole zeigt HTTP 502 direkt nach dem Boot | Die Veeam-Dienste starten noch; wiederholen Sie, wenn `VeeamBackupSvc` und der PostgreSQL-Dienst Running sind | +| Folder-Liste im Assistenten ist leer | Die Folder-Auswahl listet bestehende Präfixe; legen Sie zuerst ein Platzhalter-Objekt unter dem Präfix an, dann Browse | +| Repository-Kapazität zeigt N/A | SOSAPI-Berichte sind für das Backup nicht erforderlich; der Support wird in [rustfs#1511](https://github.com/rustfs/rustfs/issues/1511) verfolgt | diff --git a/content/en/developer/integration/backup/images/veeam-backup-job-success.png b/content/en/developer/integration/backup/images/veeam-backup-job-success.png new file mode 100644 index 000000000..3ce6b6e15 Binary files /dev/null and b/content/en/developer/integration/backup/images/veeam-backup-job-success.png differ diff --git a/content/en/developer/integration/backup/images/veeam-repository-added.png b/content/en/developer/integration/backup/images/veeam-repository-added.png new file mode 100644 index 000000000..2934003e0 Binary files /dev/null and b/content/en/developer/integration/backup/images/veeam-repository-added.png differ diff --git a/content/en/developer/integration/backup/images/veeam-repository-bucket.png b/content/en/developer/integration/backup/images/veeam-repository-bucket.png new file mode 100644 index 000000000..8665824bb Binary files /dev/null and b/content/en/developer/integration/backup/images/veeam-repository-bucket.png differ diff --git a/content/en/developer/integration/backup/images/veeam-restore-complete.png b/content/en/developer/integration/backup/images/veeam-restore-complete.png new file mode 100644 index 000000000..734e19434 Binary files /dev/null and b/content/en/developer/integration/backup/images/veeam-restore-complete.png differ diff --git a/content/en/developer/integration/backup/index.md b/content/en/developer/integration/backup/index.md index b4208b6e8..dc926997d 100644 --- a/content/en/developer/integration/backup/index.md +++ b/content/en/developer/integration/backup/index.md @@ -11,5 +11,6 @@ Use **RustFS** as the object storage backend for backup tools that store reposit - [Velero](./velero.md) - [Kopia](./kopia.md) - [Longhorn](./longhorn.md) +- [Veeam](./veeam.md) Keep backup jobs in a dedicated bucket and prefix, and use credentials scoped to the required bucket operations. \ No newline at end of file diff --git a/content/en/developer/integration/backup/meta.json b/content/en/developer/integration/backup/meta.json index dac5156cd..f09cf9599 100644 --- a/content/en/developer/integration/backup/meta.json +++ b/content/en/developer/integration/backup/meta.json @@ -4,6 +4,7 @@ "kopia", "longhorn", "restic", - "velero" + "velero", + "veeam" ] } diff --git a/content/en/developer/integration/backup/veeam.md b/content/en/developer/integration/backup/veeam.md new file mode 100644 index 000000000..c06373031 --- /dev/null +++ b/content/en/developer/integration/backup/veeam.md @@ -0,0 +1,144 @@ +--- +title: "Veeam" +description: "Use RustFS as an S3-compatible backup repository for Veeam Backup & Replication, back up an entire computer, and restore files from the stored backup." +--- + +Veeam Backup & Replication (VBR) is an enterprise backup platform that stores backup data in S3-compatible object storage. This guide shows how to register RustFS as a VBR object storage repository, back up an entire Windows computer with the Veeam Agent, and restore a file from the stored backup. + +You need a running RustFS instance reachable over HTTPS, a bucket dedicated to backups, a Windows machine with VBR 13 installed (4 vCPU and 8 GB RAM are a practical minimum), and a Veeam license that includes object storage backup. + +:::note[License requirement] + +Backup to object storage is an Enterprise-tier Veeam feature. VBR Community Edition can add and validate an S3 repository, but running a backup job to it requires an Enterprise license or the free 30-day evaluation key (Veeam Data Platform Trial Key). + +::: + +## Architecture + +```mermaid +flowchart LR + Computer["Windows computer + (Veeam Agent)"] -->|SigV4 HTTPS| VBR["VBR server"] + VBR -->|S3 API| Traefik["Ingress / TLS"] + Traefik --> RustFS["RustFS"] + RustFS --> Bucket["veeam-repo + (versioning + Object Lock)"] +``` + +Veeam writes roughly 1 MiB backup blocks into the bucket through the S3 API during backup and reads back only the blocks that contain the requested data during a restore. The bucket prefix in this guide is `veeam`, and the bucket is `veeam-repo`. + +## 1. Prepare the bucket and credentials + +Create a dedicated bucket with versioning and Object Lock enabled. Versioning is a prerequisite for the Object Lock that Veeam immutability relies on: + +```bash +rc bucket create /veeam-repo --with-lock +rc bucket version info /veeam-repo +``` + +Create a least-privilege policy scoped to the bucket. The policy intentionally omits `s3:CreateBucket`: Veeam offers automatic bucket provisioning, and declining it is the recommended posture when the bucket already exists. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject", + "s3:GetObjectVersion","s3:DeleteObjectVersion", + "s3:AbortMultipartUpload","s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:PutObjectRetention","s3:GetObjectRetention", + "s3:PutObjectLegalHold","s3:GetObjectLegalHold", + "s3:BypassGovernanceRetention"], + "Resource": ["arn:aws:s3:::veeam-repo/*"] + }, + { + "Effect": "Allow", + "Action": ["s3:ListBucket","s3:ListBucketVersions","s3:GetBucketLocation", + "s3:GetBucketVersioning"], + "Resource": ["arn:aws:s3:::veeam-repo"] + } + ] +} +``` + +```bash +rc admin policy create veeam-repo-rw +rc admin user add veeam +rc admin policy attach veeam-repo-rw --user veeam +``` + +Veeam requires HTTPS for object storage. Terminate TLS in front of RustFS (for example with Traefik or Nginx) using a certificate whose SAN covers the endpoint hostname, and import that certificate into the Veeam server's **Trusted Root Certification Authorities** store. + +## 2. Add the RustFS repository in VBR + +In the VBR console, go to **Backup Infrastructure → Backup Repositories → Add Repository → Object storage → S3 Compatible**: + +1. Service point: your RustFS HTTPS endpoint, Region: `us-east-1`. +2. Credentials: the `veeam` access key and secret key. +3. Bucket: `veeam-repo`, Folder: `veeam`. +4. Optionally enable **Make backups immutable** (the bucket's Object Lock is already enabled). + +![Repository wizard: bucket veeam-repo with versioning and Object Lock detected](./images/veeam-repository-bucket.png) + +When Veeam reports that automatic bucket provisioning fails with Access Denied, choose **Yes** to disable it and proceed — the bucket exists and the IAM user intentionally cannot create buckets. + +On success, the repository is listed as **S3-compatible** with the used space matching the bucket contents: + +![RustFS repository listed under Backup Repositories as S3-compatible](./images/veeam-repository-added.png) + +## 3. Enroll the protected computer + +The backup job alone does not install the Veeam agent. Use a protection group: + +1. **Inventory → Physical and Cloud Infrastructure → Add protection group…** +2. Type **Individual computers**, add the machine with its real hostname and local administrator credentials in `HOSTNAME\user` form. +3. Keep **Install Veeam Backup & Replication Agent** enabled, then Apply. + +:::note[Windows UAC] + +If the agent push fails with an access error, set `LocalAccountTokenFilterPolicy` to `1` under `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` on the target machine and rescan. After the agent installs, reboot the machine when the Backup agent column shows **Reboot required**. + +::: + +## 4. Run the backup job + +1. **Home → Backup Job → Windows computer…** +2. Computers: **From protection group**, Backup Mode: **Entire computer**. +3. Storage: Backup repository = **RustFS**, retention as needed. +4. Finish, then right-click the job and select **Start**. + +After the job completes, the job list shows **Last Result: Success** and the restore point appears under **Home → Backups → Object Storage → RustFS Veeam Backup**: + +![Job success and the restore point listed with repository RustFS](./images/veeam-backup-job-success.png) + +Verify the objects in RustFS: + +```bash +rc object find /veeam-repo/ | tail -1 +``` + +Veeam stores roughly 1 MiB data blocks under `Veeam/Backup/veeam/Clients/{agent-id}/…` with an ETag and a version on every object. + +## 5. Restore files + +1. **Home → Backups → Object Storage → RustFS Veeam Backup → **. +2. Right-click the restore point → **Restore guest files…** → Browse. +3. Pick a file in the Backup Browser, restore it to a target folder, and verify its content. + +![File-level restore from the RustFS-backed backup via the Backup Browser](./images/veeam-restore-complete.png) + +Restoring reads back only the blocks containing the selected file, which validates the full read path against RustFS. + +## Troubleshooting + +| Symptom | Fix | +|---|---| +| "Backup to object storage requires a valid Enterprise edition license" | Install a license that includes object storage (trial or paid); Community Edition cannot run object storage jobs | +| "backup agent is missing" during the job | Enroll the machine through a protection group (step 3); the job wizard does not push-install agents | +| Agent push fails with access denied | Set `LocalAccountTokenFilterPolicy=1` on the target; use the real hostname, not `localhost` | +| Backup agent column shows "Reboot required" | Reboot the machine to complete the agent installation | +| Console shows HTTP 502 right after boot | Veeam services are still starting; retry after `VeeamBackupSvc` and the PostgreSQL service are Running | +| Folder list is empty in the wizard | The folder picker lists existing prefixes; create a placeholder object under the prefix first, then Browse | +| Repository capacity shows N/A | SOSAPI reporting is not required for backup; support is tracked in [rustfs#1511](https://github.com/rustfs/rustfs/issues/1511) | diff --git a/content/fr/developer/integration/backup/images/veeam-backup-job-success.png b/content/fr/developer/integration/backup/images/veeam-backup-job-success.png new file mode 100644 index 000000000..3ce6b6e15 Binary files /dev/null and b/content/fr/developer/integration/backup/images/veeam-backup-job-success.png differ diff --git a/content/fr/developer/integration/backup/images/veeam-repository-added.png b/content/fr/developer/integration/backup/images/veeam-repository-added.png new file mode 100644 index 000000000..2934003e0 Binary files /dev/null and b/content/fr/developer/integration/backup/images/veeam-repository-added.png differ diff --git a/content/fr/developer/integration/backup/images/veeam-repository-bucket.png b/content/fr/developer/integration/backup/images/veeam-repository-bucket.png new file mode 100644 index 000000000..8665824bb Binary files /dev/null and b/content/fr/developer/integration/backup/images/veeam-repository-bucket.png differ diff --git a/content/fr/developer/integration/backup/images/veeam-restore-complete.png b/content/fr/developer/integration/backup/images/veeam-restore-complete.png new file mode 100644 index 000000000..734e19434 Binary files /dev/null and b/content/fr/developer/integration/backup/images/veeam-restore-complete.png differ diff --git a/content/fr/developer/integration/backup/index.md b/content/fr/developer/integration/backup/index.md index 6b837c021..7bf2d4c9a 100644 --- a/content/fr/developer/integration/backup/index.md +++ b/content/fr/developer/integration/backup/index.md @@ -11,5 +11,6 @@ Utilisez **RustFS** comme backend de stockage objet pour les outils de sauvegard - [Velero](./velero.md) - [Kopia](./kopia.md) - [Longhorn](./longhorn.md) +- [Veeam](./veeam.md) Conservez les tâches de sauvegarde dans un compartiment et un préfixe dédiés, et utilisez des identifiants limités aux opérations de compartiment nécessaires. \ No newline at end of file diff --git a/content/fr/developer/integration/backup/meta.json b/content/fr/developer/integration/backup/meta.json index 6634f8368..add260c1a 100644 --- a/content/fr/developer/integration/backup/meta.json +++ b/content/fr/developer/integration/backup/meta.json @@ -4,6 +4,7 @@ "kopia", "longhorn", "restic", - "velero" + "velero", + "veeam" ] } diff --git a/content/fr/developer/integration/backup/veeam.md b/content/fr/developer/integration/backup/veeam.md new file mode 100644 index 000000000..fafeea4bc --- /dev/null +++ b/content/fr/developer/integration/backup/veeam.md @@ -0,0 +1,144 @@ +--- +title: "Veeam" +description: "Utilisez RustFS comme dépôt de sauvegarde compatible S3 pour Veeam Backup & Replication, sauvegardez un ordinateur entier et restaurez des fichiers depuis la sauvegarde." +--- + +Veeam Backup & Replication (VBR) est une plateforme de sauvegarde entreprise qui stocke les données de sauvegarde dans un stockage objet compatible S3. Ce guide montre comment enregistrer RustFS comme dépôt de stockage objet VBR, sauvegarder un ordinateur Windows entier avec l’agent Veeam et restaurer un fichier depuis la sauvegarde. + +Vous avez besoin d’une instance RustFS en cours d’exécution accessible via HTTPS, d’un compartiment dédié aux sauvegardes, d’une machine Windows avec VBR 13 installé (4 vCPU et 8 Go de RAM constituent un minimum pratique) et d’une licence Veeam incluant la sauvegarde vers stockage objet. + +:::note[Exigence de licence] + +La sauvegarde vers stockage objet est une fonctionnalité Veeam de niveau Enterprise. VBR Community Edition peut ajouter et valider un dépôt S3, mais l’exécution d’un job de sauvegarde vers celui-ci nécessite une licence Enterprise ou la clé d’évaluation gratuite de 30 jours (Veeam Data Platform Trial Key). + +::: + +## Architecture + +```mermaid +flowchart LR + Computer["Ordinateur Windows + (agent Veeam)"] -->|SigV4 HTTPS| VBR["Serveur VBR"] + VBR -->|S3 API| Traefik["Ingress / TLS"] + Traefik --> RustFS["RustFS"] + RustFS --> Bucket["veeam-repo + (versioning + Object Lock)"] +``` + +Pendant la sauvegarde, Veeam écrit des blocs d’environ 1 Mio dans le compartiment via l’API S3 ; lors d’une restauration, seuls les blocs contenant les données demandées sont relus. Le préfixe dans ce guide est `veeam` et le compartiment est `veeam-repo`. + +## 1. Préparer le compartiment et les identifiants + +Créez un compartiment dédié avec le versioning et l’Object Lock activés. Le versioning est un prérequis de l’Object Lock dont dépend l’immuabilité Veeam : + +```bash +rc bucket create /veeam-repo --with-lock +rc bucket version info /veeam-repo +``` + +Créez une politique à privilèges minimaux limitée au compartiment. Cette politique omet volontairement `s3:CreateBucket` : Veeam propose la création automatique de compartiments, et la refuser est l’attitude recommandée lorsque le compartiment existe déjà. + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject", + "s3:GetObjectVersion","s3:DeleteObjectVersion", + "s3:AbortMultipartUpload","s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:PutObjectRetention","s3:GetObjectRetention", + "s3:PutObjectLegalHold","s3:GetObjectLegalHold", + "s3:BypassGovernanceRetention"], + "Resource": ["arn:aws:s3:::veeam-repo/*"] + }, + { + "Effect": "Allow", + "Action": ["s3:ListBucket","s3:ListBucketVersions","s3:GetBucketLocation", + "s3:GetBucketVersioning"], + "Resource": ["arn:aws:s3:::veeam-repo"] + } + ] +} +``` + +```bash +rc admin policy create veeam-repo-rw +rc admin user add veeam +rc admin policy attach veeam-repo-rw --user veeam +``` + +Veeam exige HTTPS pour le stockage objet. Terminez TLS devant RustFS (par exemple avec Traefik ou Nginx) avec un certificat dont le SAN couvre le nom d’hôte du point de terminaison, puis importez ce certificat dans le magasin **Trusted Root Certification Authorities** du serveur Veeam. + +## 2. Ajouter le dépôt RustFS dans VBR + +Dans la console VBR, allez dans **Backup Infrastructure → Backup Repositories → Add Repository → Object storage → S3 Compatible** : + +1. Service point : votre point de terminaison HTTPS RustFS, Region : `us-east-1`. +2. Credentials : la clé d’accès et la clé secrète de `veeam`. +3. Bucket : `veeam-repo`, Folder : `veeam`. +4. Optionnel : activez **Make backups immutable** (l’Object Lock du compartiment est déjà activé). + +![Assistant de dépôt : compartiment veeam-repo avec versioning et Object Lock détectés](./images/veeam-repository-bucket.png) + +Lorsque Veeam signale que le provisionnement automatique du compartiment échoue avec Access Denied, choisissez **Yes** pour le désactiver et continuer — le compartiment existe déjà et l’utilisateur IAM ne peut volontairement pas en créer. + +En cas de succès, le dépôt est listé comme **S3-compatible** avec l’espace utilisé correspondant au contenu du compartiment : + +![Dépôt RustFS listé sous Backup Repositories comme S3-compatible](./images/veeam-repository-added.png) + +## 3. Enregistrer l’ordinateur protégé + +Le job de sauvegarde seul n’installe pas l’agent Veeam. Utilisez un groupe de protection : + +1. **Inventory → Physical and Cloud Infrastructure → Add protection group…** +2. Type **Individual computers**, ajoutez la machine avec son vrai nom d’hôte et des identifiants d’administrateur local sous la forme `HOSTNAME\user`. +3. Laissez **Install Veeam Backup & Replication Agent** coché, puis Apply. + +:::note[UAC Windows] + +Si l’installation de l’agent échoue avec une erreur d’accès, définissez `LocalAccountTokenFilterPolicy` à `1` sous `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` sur la machine cible et relancez un rescan. Après l’installation de l’agent, redémarrez la machine lorsque la colonne Backup agent affiche **Reboot required**. + +::: + +## 4. Exécuter le job de sauvegarde + +1. **Home → Backup Job → Windows computer…** +2. Computers : **From protection group**, Backup Mode : **Entire computer**. +3. Storage : Backup repository = **RustFS**, rétention selon les besoins. +4. Finish, puis faites un clic droit sur le job et sélectionnez **Start**. + +Une fois le job terminé, la liste des jobs affiche **Last Result: Success** et le point de restauration apparaît sous **Home → Backups → Object Storage → RustFS Veeam Backup** : + +![Job réussi et point de restauration listé avec le dépôt RustFS](./images/veeam-backup-job-success.png) + +Vérifiez les objets dans RustFS : + +```bash +rc object find /veeam-repo/ | tail -1 +``` + +Veeam stocke des blocs d’environ 1 Mio sous `Veeam/Backup/veeam/Clients/{agent-id}/…`, chaque objet portant un ETag et une version. + +## 5. Restaurer des fichiers + +1. **Home → Backups → Object Storage → RustFS Veeam Backup → **. +2. Clic droit sur le point de restauration → **Restore guest files…** → Browse. +3. Choisissez un fichier dans le Backup Browser, restaurez-le vers un dossier cible et vérifiez son contenu. + +![Restauration au niveau fichier depuis la sauvegarde RustFS via le Backup Browser](./images/veeam-restore-complete.png) + +La restauration ne relit que les blocs contenant le fichier sélectionné, ce qui valide le chemin de lecture complet contre RustFS. + +## Dépannage + +| Symptôme | Solution | +|---|---| +| "Backup to object storage requires a valid Enterprise edition license" | Installez une licence incluant la sauvegarde vers stockage objet (essai ou payante) ; Community Edition ne peut pas exécuter de jobs vers le stockage objet | +| "backup agent is missing" pendant le job | Enregistrez la machine via un groupe de protection (étape 3) ; l’assistant de job n’installe pas les agents | +| L’installation de l’agent échoue avec une erreur d’accès | Définissez `LocalAccountTokenFilterPolicy=1` sur la cible ; utilisez le vrai nom d’hôte, pas `localhost` | +| La colonne Backup agent affiche "Reboot required" | Redémarrez la machine pour terminer l’installation de l’agent | +| La console affiche HTTP 502 juste après le démarrage | Les services Veeam démarrent encore ; réessayez lorsque `VeeamBackupSvc` et le service PostgreSQL sont Running | +| La liste des dossiers est vide dans l’assistant | Le sélecteur liste les préfixes existants ; créez d’abord un objet placeholder sous le préfixe, puis Browse | +| La capacité du dépôt affiche N/A | Le reporting SOSAPI n’est pas requis pour la sauvegarde ; le support est suivi dans [rustfs#1511](https://github.com/rustfs/rustfs/issues/1511) | diff --git a/content/ja/developer/integration/backup/images/veeam-backup-job-success.png b/content/ja/developer/integration/backup/images/veeam-backup-job-success.png new file mode 100644 index 000000000..3ce6b6e15 Binary files /dev/null and b/content/ja/developer/integration/backup/images/veeam-backup-job-success.png differ diff --git a/content/ja/developer/integration/backup/images/veeam-repository-added.png b/content/ja/developer/integration/backup/images/veeam-repository-added.png new file mode 100644 index 000000000..2934003e0 Binary files /dev/null and b/content/ja/developer/integration/backup/images/veeam-repository-added.png differ diff --git a/content/ja/developer/integration/backup/images/veeam-repository-bucket.png b/content/ja/developer/integration/backup/images/veeam-repository-bucket.png new file mode 100644 index 000000000..8665824bb Binary files /dev/null and b/content/ja/developer/integration/backup/images/veeam-repository-bucket.png differ diff --git a/content/ja/developer/integration/backup/images/veeam-restore-complete.png b/content/ja/developer/integration/backup/images/veeam-restore-complete.png new file mode 100644 index 000000000..734e19434 Binary files /dev/null and b/content/ja/developer/integration/backup/images/veeam-restore-complete.png differ diff --git a/content/ja/developer/integration/backup/index.md b/content/ja/developer/integration/backup/index.md index 4b3e717f3..f487ae168 100644 --- a/content/ja/developer/integration/backup/index.md +++ b/content/ja/developer/integration/backup/index.md @@ -11,5 +11,6 @@ description: "S3 互換のオブジェクトストレージ経由でバックア - [Velero](./velero.md) - [Kopia](./kopia.md) - [Longhorn](./longhorn.md) +- [Veeam](./veeam.md) バックアップジョブは専用のバケットとプレフィックスにまとめ、必要なバケット操作だけに絞った認証情報を使用します。 \ No newline at end of file diff --git a/content/ja/developer/integration/backup/meta.json b/content/ja/developer/integration/backup/meta.json index e7421b9ca..1fc9431c7 100644 --- a/content/ja/developer/integration/backup/meta.json +++ b/content/ja/developer/integration/backup/meta.json @@ -4,6 +4,7 @@ "kopia", "longhorn", "restic", - "velero" + "velero", + "veeam" ] } diff --git a/content/ja/developer/integration/backup/veeam.md b/content/ja/developer/integration/backup/veeam.md new file mode 100644 index 000000000..6323d3c20 --- /dev/null +++ b/content/ja/developer/integration/backup/veeam.md @@ -0,0 +1,144 @@ +--- +title: "Veeam" +description: "RustFS を Veeam Backup & Replication の S3 互換バックアップリポジトリとして使用し、コンピューター全体をバックアップし、保存されたバックアップからファイルを復元します。" +--- + +Veeam Backup & Replication(VBR)は、バックアップデータを S3 互換オブジェクトストレージに保存するエンタープライズ向けバックアッププラットフォームです。このページでは、RustFS を VBR のオブジェクトストレージリポジトリとして登録し、Veeam Agent で Windows コンピューター全体をバックアップし、保存されたバックアップからファイルを復元する方法を説明します。 + +HTTPS でアクセスできる稼働中の RustFS インスタンス、バックアップ専用のバケット、VBR 13 がインストールされた Windows マシン(実用上は 4 vCPU・8 GB RAM 以上)、オブジェクトストレージバックアップを含む Veeam ライセンスが必要です。 + +:::note[ライセンス要件] + +オブジェクトストレージへのバックアップは Veeam の Enterprise 階層の機能です。VBR Community Edition は S3 リポジトリの追加と検証はできますが、そこへバックアップジョブを実行するには Enterprise ライセンスまたは 30 日間の無料評価キー(Veeam Data Platform Trial Key)が必要です。 + +::: + +## アーキテクチャ + +```mermaid +flowchart LR + Computer["Windows コンピューター + (Veeam Agent)"] -->|SigV4 HTTPS| VBR["VBR サーバー"] + VBR -->|S3 API| Traefik["Ingress / TLS"] + Traefik --> RustFS["RustFS"] + RustFS --> Bucket["veeam-repo + (バージョニング + Object Lock)"] +``` + +バックアップ中、Veeam は S3 API を通じて約 1 MiB のバックアップブロックをバケットに書き込みます。復元時には、要求されたデータを含むブロックだけを読み戻します。このページのプレフィックスは `veeam`、バケットは `veeam-repo` です。 + +## 1. バケットと認証情報を準備する + +バージョニングと Object Lock を有効にした専用バケットを作成します。バージョニングは、Veeam のイミュータビリティが依存する Object Lock の前提条件です。 + +```bash +rc bucket create /veeam-repo --with-lock +rc bucket version info /veeam-repo +``` + +バケットにスコープされた最小権限のポリシーを作成します。このポリシーは意図的に `s3:CreateBucket` を省略しています。バケットが既に存在する場合、Veeam の自動プロビジョニングを拒否するのが推奨されます。 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject", + "s3:GetObjectVersion","s3:DeleteObjectVersion", + "s3:AbortMultipartUpload","s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:PutObjectRetention","s3:GetObjectRetention", + "s3:PutObjectLegalHold","s3:GetObjectLegalHold", + "s3:BypassGovernanceRetention"], + "Resource": ["arn:aws:s3:::veeam-repo/*"] + }, + { + "Effect": "Allow", + "Action": ["s3:ListBucket","s3:ListBucketVersions","s3:GetBucketLocation", + "s3:GetBucketVersioning"], + "Resource": ["arn:aws:s3:::veeam-repo"] + } + ] +} +``` + +```bash +rc admin policy create veeam-repo-rw +rc admin user add veeam +rc admin policy attach veeam-repo-rw --user veeam +``` + +Veeam はオブジェクトストレージに HTTPS を要求します。RustFS の前で TLS を終端し(Traefik や Nginx など)、エンドポイントのホスト名を SAN に含む証明書を使用してください。その証明書を Veeam サーバーの **Trusted Root Certification Authorities** ストアにインポートします。 + +## 2. VBR に RustFS リポジトリを追加する + +VBR コンソールで **Backup Infrastructure → Backup Repositories → Add Repository → Object storage → S3 Compatible** に進みます: + +1. Service point: RustFS の HTTPS エンドポイント、Region: `us-east-1`。 +2. Credentials: `veeam` のアクセスキーとシークレットキー。 +3. Bucket: `veeam-repo`、Folder: `veeam`。 +4. 必要に応じて **Make backups immutable** を有効化(バケットの Object Lock は既に有効)。 + +![リポジトリウィザード: バージョニングと Object Lock が検出された veeam-repo](./images/veeam-repository-bucket.png) + +自動バケットプロビジョニングが Access Denied で失敗したというメッセージが表示された場合は、**Yes** を選んで無効化して先へ進みます。バケットは既に存在し、IAM ユーザーは意図的にバケットを作成できません。 + +成功すると、リポジトリは **S3-compatible** として一覧表示され、使用容量はバケットの内容と一致します。 + +![Backup Repositories に S3-compatible として表示された RustFS リポジトリ](./images/veeam-repository-added.png) + +## 3. 保護対象コンピューターを登録する + +バックアップジョブだけでは Veeam Agent はインストールされません。プロテクショングループを使用します: + +1. **Inventory → Physical and Cloud Infrastructure → Add protection group…** +2. タイプは **Individual computers** を選び、実際のホスト名と `HOSTNAME\user` 形式のローカル管理者資格情報でマシンを追加します。 +3. **Install Veeam Backup & Replication Agent** を有効のままにして Apply をクリックします。 + +:::note[Windows UAC] + +エージェントのプッシュがアクセスエラーで失敗する場合は、対象マシンの `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` にある `LocalAccountTokenFilterPolicy` を `1` に設定して再スキャンしてください。エージェントのインストール後、Backup agent 列に **Reboot required** と表示されたらマシンを再起動します。 + +::: + +## 4. バックアップジョブを実行する + +1. **Home → Backup Job → Windows computer…** +2. Computers: **From protection group**、Backup Mode: **Entire computer**。 +3. Storage: Backup repository = **RustFS**、保持期間は必要に応じて設定。 +4. Finish の後、ジョブを右クリックして **Start** を選択します。 + +ジョブ完了後、ジョブ一覧には **Last Result: Success** が表示され、復元ポイントは **Home → Backups → Object Storage → RustFS Veeam Backup** の下に現れます。 + +![ジョブ成功と RustFS リポジトリに表示された復元ポイント](./images/veeam-backup-job-success.png) + +RustFS 内のオブジェクトを確認します: + +```bash +rc object find /veeam-repo/ | tail -1 +``` + +Veeam は約 1 MiB のデータブロックを `Veeam/Backup/veeam/Clients/{agent-id}/…` の下に保存し、各オブジェクトには ETag とバージョンが付きます。 + +## 5. ファイルを復元する + +1. **Home → Backups → Object Storage → RustFS Veeam Backup → **。 +2. 復元ポイントを右クリック → **Restore guest files…** → Browse。 +3. Backup Browser でファイルを選択し、目標フォルダーに復元して内容を確認します。 + +![Backup Browser による RustFS バックアップからのファイルレベル復元](./images/veeam-restore-complete.png) + +復元では選択したファイルを含むブロックだけが読み戻されます。これにより、RustFS への読み取りパス全体が検証されます。 + +## トラブルシューティング + +| 症状 | 対処 | +|---|---| +| "Backup to object storage requires a valid Enterprise edition license" | オブジェクトストレージバックアップを含むライセンス(試用または有料)をインストールしてください。Community Edition では実行できません | +| ジョブ中に "backup agent is missing" | プロテクショングループでマシンを登録してください(ステップ 3)。ジョブウィザードはエージェントをプッシュインストールしません | +| エージェントのプッシュがアクセス拒否で失敗する | 対象で `LocalAccountTokenFilterPolicy=1` を設定し、`localhost` ではなく実際のホスト名を使用してください | +| Backup agent 列に "Reboot required" と表示される | エージェントのインストールを完了するためにマシンを再起動します | +| 起動直後にコンソールが HTTP 502 を表示 | Veeam サービスがまだ起動中です。`VeeamBackupSvc` と PostgreSQL サービスが Running になってから再試行します | +| ウィザードの Folder 一覧が空 | フォルダーの選択肢には既存のプレフィックスのみ表示されます。先にプレフィックス配下にプレースホルダーオブジェクトを作成してから Browse してください | +| リポジトリの容量が N/A と表示される | SOSAPI レポートはバックアップに必須ではありません。対応状況は [rustfs#1511](https://github.com/rustfs/rustfs/issues/1511) で追跡されています | diff --git a/content/zh/developer/integration/backup/images/veeam-backup-job-success.png b/content/zh/developer/integration/backup/images/veeam-backup-job-success.png new file mode 100644 index 000000000..3ce6b6e15 Binary files /dev/null and b/content/zh/developer/integration/backup/images/veeam-backup-job-success.png differ diff --git a/content/zh/developer/integration/backup/images/veeam-repository-added.png b/content/zh/developer/integration/backup/images/veeam-repository-added.png new file mode 100644 index 000000000..2934003e0 Binary files /dev/null and b/content/zh/developer/integration/backup/images/veeam-repository-added.png differ diff --git a/content/zh/developer/integration/backup/images/veeam-repository-bucket.png b/content/zh/developer/integration/backup/images/veeam-repository-bucket.png new file mode 100644 index 000000000..8665824bb Binary files /dev/null and b/content/zh/developer/integration/backup/images/veeam-repository-bucket.png differ diff --git a/content/zh/developer/integration/backup/images/veeam-restore-complete.png b/content/zh/developer/integration/backup/images/veeam-restore-complete.png new file mode 100644 index 000000000..734e19434 Binary files /dev/null and b/content/zh/developer/integration/backup/images/veeam-restore-complete.png differ diff --git a/content/zh/developer/integration/backup/index.md b/content/zh/developer/integration/backup/index.md index 4b8779616..2d7ca70fe 100644 --- a/content/zh/developer/integration/backup/index.md +++ b/content/zh/developer/integration/backup/index.md @@ -11,5 +11,6 @@ description: "通过兼容 S3 的对象存储接口将备份工具连接到 Rust - [Velero](./velero.md) - [Kopia](./kopia.md) - [Longhorn](./longhorn.md) +- [Veeam](./veeam.md) 请将备份作业放在专用的存储桶和前缀中,并使用仅限所需存储桶操作的凭据。 \ No newline at end of file diff --git a/content/zh/developer/integration/backup/meta.json b/content/zh/developer/integration/backup/meta.json index 0fb87d00d..37358859d 100644 --- a/content/zh/developer/integration/backup/meta.json +++ b/content/zh/developer/integration/backup/meta.json @@ -4,6 +4,7 @@ "kopia", "longhorn", "restic", - "velero" + "velero", + "veeam" ] } diff --git a/content/zh/developer/integration/backup/veeam.md b/content/zh/developer/integration/backup/veeam.md new file mode 100644 index 000000000..760f41dca --- /dev/null +++ b/content/zh/developer/integration/backup/veeam.md @@ -0,0 +1,144 @@ +--- +title: "Veeam" +description: "将 RustFS 用作 Veeam Backup & Replication 的 S3 兼容备份仓库,备份整台计算机,并从备份中恢复文件。" +--- + +Veeam Backup & Replication(VBR)是一个企业级备份平台,可将备份数据存储在 S3 兼容的对象存储中。本页演示如何将 RustFS 注册为 VBR 对象存储仓库、使用 Veeam Agent 备份整台 Windows 计算机,并从备份中恢复文件。 + +你需要一个可以通过 HTTPS 访问的 RustFS 实例、一个专用于备份的存储桶、一台安装了 VBR 13 的 Windows 机器(实践上至少 4 vCPU、8 GB 内存),以及一个包含对象存储备份功能的 Veeam 许可证。 + +:::note[许可证要求] + +备份到对象存储是 Veeam 的 Enterprise 层级功能。VBR Community Edition 可以添加并校验 S3 仓库,但向其运行备份作业需要 Enterprise 许可证或免费的 30 天评估密钥(Veeam Data Platform Trial Key)。 + +::: + +## 架构 + +```mermaid +flowchart LR + Computer["Windows 计算机 + (Veeam Agent)"] -->|SigV4 HTTPS| VBR["VBR 服务器"] + VBR -->|S3 API| Traefik["Ingress / TLS"] + Traefik --> RustFS["RustFS"] + RustFS --> Bucket["veeam-repo + (版本化 + Object Lock)"] +``` + +备份期间,Veeam 通过 S3 API 将约 1 MiB 的备份块写入存储桶;恢复时只读回包含请求数据的块。本页使用的桶前缀为 `veeam`,存储桶为 `veeam-repo`。 + +## 1. 准备存储桶和凭据 + +创建一个启用版本化和 Object Lock 的专用存储桶。版本化是 Veeam 不可变备份所依赖的 Object Lock 的前提: + +```bash +rc bucket create /veeam-repo --with-lock +rc bucket version info /veeam-repo +``` + +创建一个仅限该存储桶的最小权限策略。该策略有意省略了 `s3:CreateBucket`:Veeam 会提供自动创建存储桶的功能,当存储桶已经存在时,拒绝该功能是推荐的做法。 + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject", + "s3:GetObjectVersion","s3:DeleteObjectVersion", + "s3:AbortMultipartUpload","s3:ListMultipartUploadParts", + "s3:ListBucketMultipartUploads", + "s3:PutObjectRetention","s3:GetObjectRetention", + "s3:PutObjectLegalHold","s3:GetObjectLegalHold", + "s3:BypassGovernanceRetention"], + "Resource": ["arn:aws:s3:::veeam-repo/*"] + }, + { + "Effect": "Allow", + "Action": ["s3:ListBucket","s3:ListBucketVersions","s3:GetBucketLocation", + "s3:GetBucketVersioning"], + "Resource": ["arn:aws:s3:::veeam-repo"] + } + ] +} +``` + +```bash +rc admin policy create veeam-repo-rw +rc admin user add veeam +rc admin policy attach veeam-repo-rw --user veeam +``` + +Veeam 要求对象存储通过 HTTPS 访问。在 RustFS 前面终结 TLS(例如使用 Traefik 或 Nginx),证书的 SAN 需覆盖端点主机名,并将该证书导入 Veeam 服务器的**受信任的根证书颁发机构**存储区。 + +## 2. 在 VBR 中添加 RustFS 仓库 + +在 VBR 控制台中,进入 **Backup Infrastructure → Backup Repositories → Add Repository → Object storage → S3 Compatible**: + +1. Service point:你的 RustFS HTTPS 端点,Region:`us-east-1`。 +2. Credentials:`veeam` 访问密钥和秘密密钥。 +3. Bucket:`veeam-repo`,Folder:`veeam`。 +4. 可选:启用 **Make backups immutable**(存储桶的 Object Lock 已启用)。 + +![仓库向导:检测到存储桶 veeam-repo 已启用版本化和 Object Lock](./images/veeam-repository-bucket.png) + +当 Veeam 提示自动创建存储桶因 Access Denied 失败时,选择 **Yes** 禁用该功能并继续——存储桶已经存在,且 IAM 用户有意无法创建存储桶。 + +成功后,仓库将以 **S3-compatible** 类型列出,已用空间与存储桶内容一致: + +![RustFS 仓库以 S3-compatible 类型列于 Backup Repositories](./images/veeam-repository-added.png) + +## 3. 登记受保护的计算机 + +仅创建备份作业不会安装 Veeam Agent。请使用保护组: + +1. **Inventory → Physical and Cloud Infrastructure → Add protection group…** +2. 类型选择 **Individual computers**,使用真实主机名和 `HOSTNAME\user` 形式的本地管理员凭据添加机器。 +3. 保持 **Install Veeam Backup & Replication Agent** 勾选,然后 Apply。 + +:::note[Windows UAC] + +如果 Agent 推送失败并报访问错误,请在目标机器上将 `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` 下的 `LocalAccountTokenFilterPolicy` 设置为 `1` 并重新扫描。Agent 安装完成后,当 Backup agent 列显示 **Reboot required** 时,重启该机器。 + +::: + +## 4. 运行备份作业 + +1. **Home → Backup Job → Windows computer…** +2. Computers:**From protection group**,Backup Mode:**Entire computer**。 +3. Storage:Backup repository = **RustFS**,保留策略按需设置。 +4. Finish 后,右键作业选择 **Start**。 + +作业完成后,作业列表显示 **Last Result: Success**,还原点出现在 **Home → Backups → Object Storage → RustFS Veeam Backup** 下: + +![作业成功,还原点列于 RustFS 仓库下](./images/veeam-backup-job-success.png) + +验证 RustFS 中的对象: + +```bash +rc object find /veeam-repo/ | tail -1 +``` + +Veeam 将约 1 MiB 的数据块存储在 `Veeam/Backup/veeam/Clients/{agent-id}/…` 下,每个对象都带有 ETag 和版本。 + +## 5. 恢复文件 + +1. **Home → Backups → Object Storage → RustFS Veeam Backup → **。 +2. 右键还原点 → **Restore guest files…** → Browse。 +3. 在 Backup Browser 中选择一个文件,将其恢复到目标文件夹,并核对内容。 + +![通过 Backup Browser 从 RustFS 备份中进行文件级恢复](./images/veeam-restore-complete.png) + +恢复只会读回包含所选文件的块,这也验证了针对 RustFS 的完整读取路径。 + +## 故障排查 + +| 现象 | 处理方法 | +|---|---| +| "Backup to object storage requires a valid Enterprise edition license" | 安装包含对象存储功能的许可证(试用或付费);Community Edition 无法运行对象存储作业 | +| 作业报 "backup agent is missing" | 通过保护组登记机器(步骤 3);作业向导不会推送安装 Agent | +| Agent 推送失败并报访问被拒 | 在目标机器设置 `LocalAccountTokenFilterPolicy=1`;使用真实主机名,不要用 `localhost` | +| Backup agent 列显示 "Reboot required" | 重启机器以完成 Agent 安装 | +| 控制台在开机后显示 HTTP 502 | Veeam 服务仍在启动;待 `VeeamBackupSvc` 和 PostgreSQL 服务处于 Running 后重试 | +| 向导中 Folder 列表为空 | Folder 选择器只列出现有前缀;先在前缀下创建一个占位对象,再 Browse | +| 仓库容量显示 N/A | SOSAPI 报告并非备份所必需;支持情况见 [rustfs#1511](https://github.com/rustfs/rustfs/issues/1511) |