diff --git a/web/messages/de/docs/backup-restore/creating-backups.json b/web/messages/de/docs/backup-restore/creating-backups.json index 90c9ad28..0b9d3c22 100644 --- a/web/messages/de/docs/backup-restore/creating-backups.json +++ b/web/messages/de/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Dialogbasierter Flow, SSH-freundlich. Das Hauptmenü präsentiert die sechs Optionen direkt. Verwendet backup_menu in backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Dialogbasierter Flow, SSH-freundlich. Der Hauptmenüeintrag öffnet Host Config Backup / Restore; Backup host configuration führt zu den sechs Optionen. Verwendet backup_menu in backup_host.sh." }, { "entry": "ProxMenux Monitor (Weboberfläche)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Standardprofil und benutzerdefiniertes Profil", "defaultTitle": "Standardprofil", - "defaultBody": "Das Standardprofil ist die kuratierte Liste aus hb_default_profile_paths (dokumentiert in Funktionsweise unter Pfadkategorien) sowie jeder Eintrag in der persistenten Extras-Datei /usr/local/share/proxmenux/backup-extra-paths.txt. Der Benutzer bestätigt die Ziel- und Verschlüsselungsoptionen und das Backup verläuft ohne weitere Pfadauswahl.", + "defaultBody": "Das Standardprofil ist die kuratierte Liste aus hb_default_profile_paths (dokumentiert in Funktionsweise unter Pfadkategorien) sowie jeder Eintrag in der persistenten Extras-Datei /usr/local/share/proxmenux/backup-extra-paths.txt. Der Benutzer wählt das Ziel und die Verschlüsselungsoptionen aus und das Backup verläuft ohne weitere Pfadauswahl.", "customTitle": "Benutzerdefiniertes Profil", "customBody": "Das benutzerdefinierte Profil öffnet eine Checkliste mit allen Pfaden des Standardprofils (nicht markiert) und allen persistenten Extras (vormarkiert, mit dem Präfix [+]). Der Benutzer markiert die Pfade für diesen Durchlauf und kann über Benutzerdefinierten Pfad hinzufügen einen neuen absoluten Pfad ergänzen. Jeder dabei hinzugefügte Pfad wird in backup-extra-paths.txt gespeichert, damit künftige Backups ihn automatisch berücksichtigen. Das Abwählen eines persistenten Extras gilt nur für diesen Durchlauf und löscht es nicht aus der Datei — dafür gibt es außerhalb des Backup-Ablaufs die separate Aktion Benutzerdefinierte Pfade verwalten.", "customPickerAlt": "Benutzerdefinierte Profil-Checkliste mit den Standard-Profilpfaden (nicht markiert) und persistenten Extras (vormarkiert mit einem [+]-Präfix) sowie Schaltflächen, um einen neuen Pfad hinzuzufügen oder die Auswahl zu bestätigen.", @@ -124,7 +124,7 @@ }, "included": { "heading": "Was reingeht und was draußen bleibt", - "intro": "Jeder Pfad im aufgelösten Profil (Standard + persistente Extras + Custom-Mode-Auswahl) wird mit rsync -aAXH --numeric-ids kopiert. Eine gemeinsame Ausschlussliste gilt für jeden Pfad, und zwei Verzeichnisse tragen zusätzliche pfadspezifische Ausschlüsse.", + "intro": "Jeder Pfad im aufgelösten Profil (Standard + persistente Extras + Custom-Mode-Auswahl) wird mit rsync -aAXH --numeric-ids kopiert. Es gibt keine globale Ausschlussliste; einige Verzeichnisse tragen pfadspezifische Ausschlüsse.", "rootTitle": "/root/ Ausschlüsse", "rootBody": "/root/ ist Teil des Standardprofils, sodass Benutzerskripte und Konfigurationen im Archiv landen. Flüchtige Subpfade werden fallen gelassen:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER — nicht im Standardprofil. Fügen Sie es als benutzerdefinierten Pfad hinzu, wenn ein System Heimverzeichnisse des Benutzers trägt, die eine Wiederherstellung überleben müssen." ], "customPathsTitle": "Wie benutzerdefinierte Pfade gehandhabt werden", - "customPathsBody": "Ein benutzerdefinierter Pfad, der im benutzerdefinierten Modus hinzugefügt wurde oder in backup-extra-paths.txt persistiert wurde, durchläuft dieselbe rsync-Pipeline wie Standardprofilpfade. Globale Ausschlüsse gelten. Wenn der benutzerdefinierte Pfad unter /root/ oder /usr/local/share/proxmenux/ liegt, gelten die oben genannten pfadspezifischen Ausschlüsse weiterhin. Jeder archivierte Pfad – standardmäßig oder benutzerdefiniert – wird in metadata/paths_archived.txt aufgezeichnet. Pfade, die in der Quelle nicht vorhanden sind, werden in metadata/missing_paths.txt aufgezeichnet, ohne das Backup zu stoppen." + "customPathsBody": "Ein benutzerdefinierter Pfad, der im benutzerdefinierten Modus hinzugefügt wurde oder in backup-extra-paths.txt persistiert wurde, durchläuft dieselbe rsync-Pipeline wie Standardprofilpfade. Wenn der benutzerdefinierte Pfad unter /root/ oder /usr/local/share/proxmenux/ liegt, gelten die oben genannten pfadspezifischen Ausschlüsse weiterhin. Jeder archivierte Pfad – standardmäßig oder benutzerdefiniert – wird in metadata/selected_paths.txt aufgezeichnet. Pfade, die in der Quelle nicht vorhanden sind, werden in metadata/missing_paths.txt aufgezeichnet, ohne das Backup zu stoppen, und Pfade, deren Kopieren fehlschlägt, in metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Archivstruktur", "intro": "Das von jedem Backend erstellte Staging-Verzeichnis folgt unabhängig vom Ziel dem gleichen Layout. Das Tarball-, PBS .pxar oder Borg-Archiv speichert diesen Baum wortwörtlich.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Bestätigungszusammenfassung", - "body": "Bevor das Backend etwas an das Ziel schreibt, zeigt ProxMenux einen zusammenfassenden Dialog mit dem Ziel, der Backup-ID oder dem Archivnamen, dem Verschlüsselungsstatus und der Liste der zu kopierenden Pfade an. Das Abbrechen hier bricht das Backup sauber ab - das Staging-Verzeichnis wird durch den trap-Hook entfernt, der auf der Backend-Funktion eingestellt ist, und keine Teildaten erreichen das Ziel." + "body": "Bevor das Backend etwas an das Ziel schreibt, gibt ProxMenux im Terminal eine Zusammenfassung mit dem Ziel, der Backup-ID oder dem Archivnamen, dem Verschlüsselungsstatus und der Liste der zu kopierenden Pfade aus. An dieser Stelle gibt es keinen Bestätigungs- oder Abbruchschritt; das Kopieren beginnt unmittelbar danach. Wenn das Backup fehlschlägt oder unterbrochen wird, wird das Staging-Verzeichnis durch den trap-Hook entfernt, der auf der Backend-Funktion eingestellt ist, und keine Teildaten erreichen das Ziel." }, "writing": { "heading": "Schreiben an den Bestimmungsort", diff --git a/web/messages/de/docs/backup-restore/destinations/local.json b/web/messages/de/docs/backup-restore/destinations/local.json index eff0a73d..32cae493 100644 --- a/web/messages/de/docs/backup-restore/destinations/local.json +++ b/web/messages/de/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Konfiguration des Zielverzeichnisses", - "intro": "Das lokale Ziel ist ein einziges dauerhaft gespeichertes Zielverzeichnis – keine Liste. ProxMenux speichert die Auswahl des Betreibers bei /usr/local/share/proxmenux/local-target.conf und liest sie bei jedem Backup. Wenn kein Ziel konfiguriert wurde, wird der Standard-HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump verwendet (das gleiche Verzeichnis, das Proxmox für seine eigenen vzdump-Ausgänge verwendet). Das Ziel wird unter Backup-Ziele konfigurieren → Lokale Ziele konfiguriert:", + "intro": "Das lokale Ziel ist ein einziges dauerhaft gespeichertes Zielverzeichnis – keine Liste. ProxMenux speichert die Auswahl des Betreibers bei /usr/local/share/proxmenux/local-target.conf und liest sie bei jedem Backup. Wenn kein Ziel konfiguriert wurde, wird der Standard-HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump verwendet (das gleiche Verzeichnis, das Proxmox für seine eigenen vzdump-Ausgänge verwendet). Das Ziel wird unter Backup-Ziele konfigurieren → Lokale Archivziele → Lokales Backup-Ziel verwalten konfiguriert:", "options": [ "Standard verwenden (/var/lib/vz/dump). Der lokale Proxmox-Speicher. Bei jeder Proxmox-Installation vorhanden; das Archiv befindet sich neben den vzdump-Ausgaben und wird automatisch von der Registerkarte Backups des Monitors aufgenommen.", - "Benutzerdefinierten Pfad eingeben. Jeder absolute Dateisystempfad kann verwendet werden: ein NFS-Mount, eine über fstab eingebundene SMB-Freigabe, ein eigenes ZFS-Dataset oder eine zweite interne Festplatte. ProxMenux prüft vor dem Speichern, ob der Pfad existiert und ein Verzeichnis ist.", - "Wählen Sie ein USB-Laufwerk. Öffnet das USB-Untermenü (unten), das Wechselgeräte erkennt und ein Gerät montieren oder formatieren kann." + "Benutzerdefinierten Pfad verwenden. Jeder absolute Dateisystempfad kann verwendet werden: ein NFS-Mount, eine über fstab eingebundene SMB-Freigabe, ein eigenes ZFS-Dataset oder eine zweite interne Festplatte. ProxMenux prüft vor dem Speichern, ob der Pfad existiert und ein Verzeichnis ist.", + "Ein USB-Laufwerk verwenden. Öffnet das USB-Untermenü (unten), das Wechselgeräte erkennt und ein Gerät montieren oder formatieren kann." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "nicht montiert", "shown": "Größe · Etikett · [fstype] · (nicht montiert — wird montiert)", - "action": "Ein Dateisystem ist vorhanden, aber nicht montiert. Bei Bestätigung führt ProxMenux hb_mount_usb_partition aus: erstellt /mnt/backup-LABEL (oder einen UUID-basierten Pfad, wenn kein Label vorhanden ist), mountet die Partition und speichert den Einhängepunkt als lokales Ziel." + "action": "Ein Dateisystem ist vorhanden, aber nicht montiert. Bei Bestätigung führt ProxMenux hb_mount_usb_partition aus: erstellt /mnt/proxmenux-backup-LABEL (UUID oder Gerätename, wenn kein Label vorhanden ist), mountet die Partition und speichert den Einhängepunkt als lokales Ziel." }, { "state": "leer", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "Die JSON-Begleitdatei", - "intro": "Jedes erfolgreiche lokale Backup erzeugt eine Begleitdatei: HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, geschrieben neben dem Archiv von hb_write_archive_sidecar. Diese kleine JSON-Datei ermöglicht es dem ProxMenux Monitor, das Archiv als ProxMenux-Host-Backup zu identifizieren, auch wenn es später an anderer Stelle verschoben, umbenannt oder archiviert wird.", + "intro": "Jedes erfolgreiche lokale Backup erzeugt eine Begleitdatei: hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, geschrieben neben dem Archiv von hb_write_archive_sidecar. Diese kleine JSON-Datei ermöglicht es dem ProxMenux Monitor, das Archiv als ProxMenux-Host-Backup zu identifizieren, auch wenn es später an anderer Stelle verschoben, umbenannt oder archiviert wird.", "contentTitle": "Inhalt der Begleitdatei", "contentBody": "Das Sidecar speichert die Schemaversion, ob das Backup von einem interaktiven Lauf oder einem geplanten Job (kind) stammt, die Job-ID für geplante Läufe, den verwendeten Profilmodus (default oder custom), den Quellhostnamen, den ursprünglichen Archivbasisnamen, einen ISO-8601-Erstellungszeitstempel und die Archivgröße in Bytes.", "whyBody": "Die Registerkarte Backups des Monitors scannt konfigurierte lokale Verzeichnisse für *.proxmenux.json-Begleitdateien - nicht für *.tar.zst-Dateien -, da ein .tar.zst ohne Sidecar möglicherweise überhaupt kein ProxMenux-Backup ist. Der Scan ist schnell (JSON-Dateien sind winzig) und die Paarung ist stabil bei Umbenennungen des Archivs, solange das Sidecar entsprechend umbenannt wird." diff --git a/web/messages/de/docs/backup-restore/destinations/pbs.json b/web/messages/de/docs/backup-restore/destinations/pbs.json index cd954e2c..d09feec8 100644 --- a/web/messages/de/docs/backup-restore/destinations/pbs.json +++ b/web/messages/de/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "ProxMenux manuelle Konfiguration", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Zusätzlich von Backup-Ziele konfigurieren → PBS Ziele → PBS hinzufügen. Prompts für einen Namen, Benutzernamen (root@pam oder user@pbs!token), Host oder IP, Datenspeicher und Passwort. Das Passwort wird bei leeren Eingaben erneut angezeigt - ein leeres Speichern würde ansonsten still bleiben und jedes nachfolgende Backup würde mit einem undurchsichtigen Authentifizierungsfehler fehlschlagen. Dieser Pfad wird verwendet, wenn das Ziel PBS nicht als Proxmox-Speicher registriert ist." + "content": "Hinzugefügt unter Backup-Ziele konfigurieren → Proxmox Backup Server (PBS) Ziele → + Neuen PBS manuell hinzufügen. Fragt nach einem Namen, Benutzernamen (root@pam oder user@pbs!token), Host oder IP, Datenspeicher und Passwort. Das Passwort wird bei leeren Eingaben erneut abgefragt - ein leeres Speichern würde ansonsten still bleiben und jedes nachfolgende Backup würde mit einem undurchsichtigen Authentifizierungsfehler fehlschlagen. Dieser Pfad wird verwendet, wenn das Ziel PBS nicht als Proxmox-Speicher registriert ist." } ], "menuTitle": "Auswahlmenü", diff --git a/web/messages/de/docs/backup-restore/how-it-works.json b/web/messages/de/docs/backup-restore/how-it-works.json index f6f2d198..b2aed60d 100644 --- a/web/messages/de/docs/backup-restore/how-it-works.json +++ b/web/messages/de/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Archivlayout", "intro": "Jedes Archiv folgt dem gleichen Baumlayout, unabhängig vom Zielort. Das metadata/-Unterverzeichnis enthält die strukturierten Nutzlasten; das rootfs/-Unterverzeichnis enthält die Dateisystemkopie.", "treeCaption": "Das beim Backup angelegte Vorbereitungsverzeichnis. Alle Ziele erhalten denselben Verzeichnisbaum in ihrem nativen Format: tar bei lokalen Zielen, PBS-Blöcke bei PBS und Borg-Segmente bei Borg.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "Die Rootfs Nutzlast", @@ -176,7 +176,7 @@ "stage": "3", "name": "Ausstehende Vorbereitung", "reads": "rootfs/ (Reboot + gefährliche Pfade)", - "action": "_rs_prepare_pending_restore bereitet riskante Pfade unter /var/lib/proxmenux/pending-restore/ vor, schreibt plan.env, apply-on-boot.list und rs-skip-paths.txt und aktiviert proxmenux-restore-onboot.service für den nächsten Start." + "action": "_rs_prepare_pending_restore bereitet riskante Pfade unter /var/lib/proxmenux/restore-pending/<restore_id>/ (verlinkt als current) vor, schreibt plan.env, apply-on-boot.list und rs-skip-paths.txt und aktiviert proxmenux-restore-onboot.service für den nächsten Start." }, { "stage": "3b", diff --git a/web/messages/de/docs/backup-restore/index.json b/web/messages/de/docs/backup-restore/index.json index fa7bac95..9eb2700e 100644 --- a/web/messages/de/docs/backup-restore/index.json +++ b/web/messages/de/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Zwei Schnittstellen, ein Backend", "intro": "Alle Schritte der Sicherung und Wiederherstellung sind über zwei Oberflächen erreichbar. Beide rufen dieselbe Shell-Bibliothek auf, erstellen identische Archive und verwenden dasselbe Auftragsverzeichnis.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "Menü → Dienstprogramme →\nHost-Sicherung/Wiederherstellung\n\nDialogbasierter Ablauf,\nSSH-freundlich, skriptfähig\nzur unbeaufsichtigten Nutzung.", + "cliDetail": "Menü →\nHost-Sicherung/Wiederherstellung\n\nDialogbasierter Ablauf,\nSSH-freundlich, skriptfähig\nzur unbeaufsichtigten Nutzung.", "webLabel": "ProxMenux Monitor (Web UI)", "webDetail": "Registerkarte Backups in der\nWeboberfläche von Monitor.\n\nWiederherstellung mit einem Klick,\nlaufende Protokollanzeige, integriert\nmit Benachrichtigungen und der\nAnzeige von Rollback-Differenzen." }, diff --git a/web/messages/de/docs/backup-restore/restoring.json b/web/messages/de/docs/backup-restore/restoring.json index 0804b2dd..837ee4f4 100644 --- a/web/messages/de/docs/backup-restore/restoring.json +++ b/web/messages/de/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "Der vollständige Wiederherstellungsworkflow", "intro": "Die komplette Pipeline von der Archivauswahl bis zu einem funktionierenden wiederhergestellten Host. Jede Stufe füttert die nächste; der von früheren Stufen geschriebene Zustand wird von späteren verbraucht.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "Die Mechanik der vorgemerkten Wiederherstellung", - "intro": "Pfade, die als reboot oder dangerous klassifiziert sind, und Hydratationsschreiben, werden für den nächsten Boot inszeniert, anstatt live angewendet zu werden. Dies geschieht durch einen kleinen, in sich geschlossenen Satz von Dateien unter /var/lib/proxmenux/pending-restore/:", + "intro": "Pfade, die als reboot oder dangerous klassifiziert sind, und Hydratationsschreiben, werden für den nächsten Boot inszeniert, anstatt live angewendet zu werden. Dies geschieht durch einen kleinen, in sich geschlossenen Satz von Dateien unter /var/lib/proxmenux/restore-pending/<restore_id>/:", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "Die inszenierten Dateien selbst - die genauen Bytes, die festgelegt werden. Behielt auf dem gleichen Dateisystem wie /, so dass der On-Boot rsync schnell ist und nicht davon abhängt, dass externer Speicher beim Booten noch erreichbar ist." } ], - "unitBody": "Die systemd-Einheit proxmenux-restore-onboot.service wird am Ende des interaktiven Schritts aktiviert. Der einmalige Dienst startet früh beim nächsten Boot, ruft apply_pending_restore.sh auf und deaktiviert sich anschließend. Die Bedingung ConditionPathExists=/var/lib/proxmenux/pending-restore/state sorgt dafür, dass er bei Starts ohne vorgemerkte Wiederherstellung nichts ausführt." + "unitBody": "Die systemd-Einheit proxmenux-restore-onboot.service wird am Ende des interaktiven Schritts aktiviert. Der einmalige Dienst startet früh beim nächsten Boot (vor dem Netzwerk), ruft apply_pending_restore.sh auf und deaktiviert sich anschließend. Die Einheit hat keine Pfadbedingung: Das Skript selbst beendet sich, wenn /var/lib/proxmenux/restore-pending/current nicht existiert, sodass sie bei Starts ohne vorgemerkte Wiederherstellung nichts ausführt. Der separate proxmenux-apply-cluster-postboot.service wird durch ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending gesteuert." }, "postbootDispatcher": { "heading": "Der Postboot-Dispatcher — apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Speicherorte der Protokolle", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Vom interaktiven Schritt geschrieben. Enthält Kompatibilitätsergebnisse, Filter für Abweichungen, Anpassungsplan, Ausgabe der direkten Anwendung und Vorbereitung vorgemerkter Änderungen sowie Paketinstallation." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Vom interaktiven Schritt geschrieben (pbs, borg oder local). Paketneuinstallationen und Schritte für Datenpools werden außerdem in /var/log/proxmenux/restore-apt-*.log und restore-datapools-*.log protokolliert." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Von apply_pending_restore.sh beim frühen Start geschrieben. Enthält das Einlesen von plan.env, das Abarbeiten von apply-on-boot und die Pfadausschlüsse." }, { diff --git a/web/messages/de/docs/backup-restore/scheduled-jobs.json b/web/messages/de/docs/backup-restore/scheduled-jobs.json index 7f540cc3..88339fe0 100644 --- a/web/messages/de/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/de/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Aufträge verwalten", - "intro": "Das Scheduler-Menü (Scripts TUI) und die Registerkarte Monitor Backups zeigen die gleichen Aktionen bei jedem Job.", + "intro": "Das Scheduler-Menü im Scripts TUI (Backup scheduler and retention) bietet Run now, Enable / Disable und Delete sowie eine Liste der Jobs mit ihrem letzten Ausführungsstatus. Edit und View log sind nur in der Registerkarte Monitor Backups verfügbar.", "rows": [ { "action": "Jetzt ausführen", @@ -112,7 +112,7 @@ "detail": "Neuer Modus: systemctl enable/disable --now der Timer. Attach-Modus: Dreht das ENABLED-Flag im Job Env um — das Hook-Skript berücksichtigt es beim nächsten PVE-Aufruf." }, { - "action": "Bearbeiten", + "action": "Bearbeiten (nur Monitor)", "detail": "Öffnet Ziel, Zeitplan, Profil und Aufbewahrungsaufforderungen neu und schreibt die Jobdateien neu. Bewahrt die Job ID auf." }, { @@ -120,7 +120,7 @@ "detail": "Entfernt die Job env, Pfaddatei, systemd Timer + Service (Neuer Modus) und deaktiviert die Hakenbindung (Attach-Modus). Berührt keine Archive bereits am Zielort." }, { - "action": "Protokoll anzeigen", + "action": "Protokoll anzeigen (nur Monitor)", "detail": "Zeigt laufend an: /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log – eine Protokolldatei pro Lauf. Der Runner gibt außerdem eine kompakte Statuszeile an journald unter dem Dienst systemd aus." } ] diff --git a/web/messages/es/docs/backup-restore/creating-backups.json b/web/messages/es/docs/backup-restore/creating-backups.json index 3b1f43bd..58660f0f 100644 --- a/web/messages/es/docs/backup-restore/creating-backups.json +++ b/web/messages/es/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Flujo basado en diálogos, amigable por SSH. El menú principal presenta las seis opciones directamente. Usa backup_menu en backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Flujo basado en diálogos, amigable por SSH. La entrada del menú principal abre Host Config Backup / Restore; Backup host configuration lleva a las seis opciones. Usa backup_menu en backup_host.sh." }, { "entry": "ProxMenux Monitor (UI Web)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Perfil Default vs Custom", "defaultTitle": "Perfil Default", - "defaultBody": "El perfil por defecto es la lista curada de hb_default_profile_paths (documentada en Cómo funciona bajo Categorías de rutas) más cada entrada del fichero de extras persistentes /usr/local/share/proxmenux/backup-extra-paths.txt. El usuario confirma el destino y las opciones de cifrado y el backup continúa sin más selección de rutas.", + "defaultBody": "El perfil por defecto es la lista curada de hb_default_profile_paths (documentada en Cómo funciona bajo Categorías de rutas) más cada entrada del fichero de extras persistentes /usr/local/share/proxmenux/backup-extra-paths.txt. El usuario elige el destino y las opciones de cifrado y el backup continúa sin más selección de rutas.", "customTitle": "Perfil Custom", "customBody": "El perfil Custom abre un checklist mostrando cada ruta del perfil por defecto (sin marcar) y cada extra persistente (premarcado, prefijado con [+]). El usuario marca el conjunto para esa ejecución y puede pulsar Add custom path para añadir una nueva ruta absoluta. Cualquier ruta añadida en línea se persiste en backup-extra-paths.txt para que futuros backups la recojan automáticamente sin volver a añadirla. Quitar la marca a un extra persistente lo desmarca para esa ejecución pero no lo elimina del fichero — la eliminación es una acción Manage custom paths separada, fuera del flujo de backup.", "customPickerAlt": "Checklist del perfil Custom mostrando las rutas del perfil por defecto (sin marcar) y los extras persistentes (premarcados con prefijo [+]), más botones para añadir una ruta nueva o confirmar la selección.", @@ -124,7 +124,7 @@ }, "included": { "heading": "Qué entra y qué se excluye", - "intro": "Cada ruta del perfil resuelto (default + extras persistentes + selección en modo Custom) se copia con rsync -aAXH --numeric-ids. Una lista de exclusiones compartida aplica a cada ruta, y dos directorios llevan exclusiones específicas adicionales.", + "intro": "Cada ruta del perfil resuelto (default + extras persistentes + selección en modo Custom) se copia con rsync -aAXH --numeric-ids. No hay una lista de exclusiones global; unos pocos directorios llevan exclusiones específicas.", "rootTitle": "Exclusiones de /root/", "rootBody": "/root/ forma parte del perfil por defecto para que los scripts y config del usuario entren en el archivo. Se descartan los subpaths volátiles:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER — no está en el perfil por defecto. Añadirlo como ruta custom cuando un sistema tenga directorios home de usuario que deban sobrevivir a una restauración." ], "customPathsTitle": "Cómo se tratan las rutas custom", - "customPathsBody": "Una ruta custom añadida en línea en modo Custom o persistida en backup-extra-paths.txt pasa por el mismo pipeline de rsync que las rutas del perfil por defecto. Se aplican las exclusiones globales. Si la ruta custom está bajo /root/ o /usr/local/share/proxmenux/, siguen aplicando las exclusiones específicas de arriba. Cada ruta archivada — default o custom — queda registrada en metadata/paths_archived.txt. Las rutas que no existen en el origen se registran en metadata/missing_paths.txt sin detener el backup." + "customPathsBody": "Una ruta custom añadida en línea en modo Custom o persistida en backup-extra-paths.txt pasa por el mismo pipeline de rsync que las rutas del perfil por defecto. Si la ruta custom está bajo /root/ o /usr/local/share/proxmenux/, siguen aplicando las exclusiones específicas de arriba. Cada ruta archivada — default o custom — queda registrada en metadata/selected_paths.txt. Las rutas que no existen en el origen se registran en metadata/missing_paths.txt sin detener el backup, y las que fallan al copiarse en metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Estructura del archivo", "intro": "El directorio de staging que produce cada backend sigue el mismo layout con independencia del destino. El tarball, el .pxar de PBS o el archivo Borg almacenan este árbol verbatim.", - "tree": "backup-[timestamp]/\n├── manifest.json # estado estructurado del host (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # salida de apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, versión del kernel, método pmxcfs\n│ ├── paths_archived.txt # lista exacta de rutas que llegaron a rootfs/\n│ └── missing_paths.txt # rutas del perfil ausentes en el origen\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root sin subpaths volátiles\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (sólo estado)\n └── var/ # /var/lib/pve-cluster (config.db vía sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # estado estructurado del host (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # salida de apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, versión del kernel, método pmxcfs\n│ ├── selected_paths.txt # lista exacta de rutas que llegaron a rootfs/\n│ └── missing_paths.txt # rutas del perfil ausentes en el origen\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root sin subpaths volátiles\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (sólo estado)\n └── var/ # /var/lib/pve-cluster (config.db vía sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Resumen de confirmación", - "body": "Antes de que el backend escriba nada en el destino, ProxMenux muestra un diálogo resumen con el destino, el backup ID o nombre del archivo, el estado del cifrado y la lista de rutas que se copian. Cancelar aquí aborta el backup limpiamente — el directorio de staging se elimina por el hook trap definido en la función backend y ningún dato parcial llega al destino." + "body": "Antes de que el backend escriba nada en el destino, ProxMenux imprime en la terminal un resumen con el destino, el backup ID o nombre del archivo, el estado del cifrado y la lista de rutas que se copian. En este punto no hay paso de confirmar o cancelar; la copia empieza justo después. Si el backup falla o se interrumpe, el directorio de staging se elimina por el hook trap definido en la función backend y ningún dato parcial llega al destino." }, "writing": { "heading": "Escritura en el destino", diff --git a/web/messages/es/docs/backup-restore/destinations/local.json b/web/messages/es/docs/backup-restore/destinations/local.json index 79d75136..5eb444f4 100644 --- a/web/messages/es/docs/backup-restore/destinations/local.json +++ b/web/messages/es/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Configurar el directorio de destino", - "intro": "El destino local es un único directorio de destino persistido — no una lista. ProxMenux guarda la elección del usuario en /usr/local/share/proxmenux/local-target.conf y la lee en cada backup. Cuando no hay ningún destino configurado, se usa el valor por defecto HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump (el mismo directorio que Proxmox utiliza para las salidas de vzdump). El destino se configura desde Configure backup destinations → Local destinations:", + "intro": "El destino local es un único directorio de destino persistido — no una lista. ProxMenux guarda la elección del usuario en /usr/local/share/proxmenux/local-target.conf y la lee en cada backup. Cuando no hay ningún destino configurado, se usa el valor por defecto HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump (el mismo directorio que Proxmox utiliza para las salidas de vzdump). El destino se configura desde Configure backup destinations → Local archive targets → Manage local backup target:", "options": [ "Usar el valor por defecto (/var/lib/vz/dump). El almacenamiento local de Proxmox. Está presente en cualquier instalación de Proxmox; el archivo queda junto a las salidas de vzdump y lo detecta automáticamente la pestaña Backups del Monitor.", - "Introducir una ruta personalizada. Cualquier ruta absoluta del sistema de ficheros vale: un montaje NFS, un share SMB montado por fstab, un dataset ZFS dedicado, un segundo disco interno. ProxMenux valida que la ruta existe y es un directorio antes de persistirla.", - "Elegir una unidad USB. Abre el submenú USB (más abajo), que detecta los dispositivos extraíbles y ofrece montar o formatear uno." + "Usar una ruta personalizada. Cualquier ruta absoluta del sistema de ficheros vale: un montaje NFS, un share SMB montado por fstab, un dataset ZFS dedicado, un segundo disco interno. ProxMenux valida que la ruta existe y es un directorio antes de persistirla.", + "Usar un disco USB. Abre el submenú USB (más abajo), que detecta los dispositivos extraíbles y ofrece montar o formatear uno." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "unmounted", "shown": "Tamaño · label · [fstype] · (no montada — se montará)", - "action": "Hay un filesystem pero no está montado. Al confirmar, ProxMenux ejecuta hb_mount_usb_partition: crea /mnt/backup-LABEL (o una ruta basada en UUID si no hay label), monta la partición y persiste el punto de montaje como destino local." + "action": "Hay un filesystem pero no está montado. Al confirmar, ProxMenux ejecuta hb_mount_usb_partition: crea /mnt/proxmenux-backup-LABEL (UUID o nombre del dispositivo si no hay label), monta la partición y persiste el punto de montaje como destino local." }, { "state": "empty", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "El sidecar JSON", - "intro": "Cada backup local con éxito produce un fichero compañero: HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, escrito junto al archivo por hb_write_archive_sidecar. Este pequeño fichero JSON permite al Monitor de ProxMenux identificar el archivo como un backup de host de ProxMenux incluso si posteriormente se mueve, renombra o archiva en otro lugar.", + "intro": "Cada backup local con éxito produce un fichero compañero: hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, escrito junto al archivo por hb_write_archive_sidecar. Este pequeño fichero JSON permite al Monitor de ProxMenux identificar el archivo como un backup de host de ProxMenux incluso si posteriormente se mueve, renombra o archiva en otro lugar.", "contentTitle": "Contenido del sidecar", "contentBody": "El sidecar almacena la versión de schema, si el backup viene de una ejecución interactiva o de un trabajo programado (kind), el ID de trabajo para las ejecuciones programadas, el modo de perfil usado (default o custom), el hostname del origen, el basename original del archivo, un timestamp de creación en ISO-8601 y el tamaño del archivo en bytes.", "whyBody": "La pestaña Backups del Monitor escanea los directorios locales configurados buscando sidecars *.proxmenux.json — no ficheros *.tar.zst — porque un .tar.zst sin sidecar podría no ser un backup de ProxMenux en absoluto. El escaneo es rápido (los JSON son diminutos) y el emparejamiento es estable frente a renombrados del archivo mientras el sidecar se renombre en paralelo." diff --git a/web/messages/es/docs/backup-restore/destinations/pbs.json b/web/messages/es/docs/backup-restore/destinations/pbs.json index 5a209e6b..2f3bbe8f 100644 --- a/web/messages/es/docs/backup-restore/destinations/pbs.json +++ b/web/messages/es/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "Configuración manual de ProxMenux", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Se añade desde Configure backup destinations → PBS destinations → Add PBS. Pregunta por un nombre, usuario (root@pam o user@pbs!token), host o IP, datastore y contraseña. La contraseña se re-pregunta ante entrada vacía — un guardado vacío persistiría silenciosamente y cada backup posterior fallaría con un error de autenticación opaco. Este camino se usa cuando el PBS objetivo no está registrado como storage de Proxmox." + "content": "Se añade desde Configure backup destinations → Proxmox Backup Server (PBS) destinations → + Add new PBS manually. Pregunta por un nombre, usuario (root@pam o user@pbs!token), host o IP, datastore y contraseña. La contraseña se re-pregunta ante entrada vacía — un guardado vacío persistiría silenciosamente y cada backup posterior fallaría con un error de autenticación opaco. Este camino se usa cuando el PBS objetivo no está registrado como storage de Proxmox." } ], "menuTitle": "Menú de selección", diff --git a/web/messages/es/docs/backup-restore/how-it-works.json b/web/messages/es/docs/backup-restore/how-it-works.json index 7cfe2eaa..71322949 100644 --- a/web/messages/es/docs/backup-restore/how-it-works.json +++ b/web/messages/es/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Layout del archivo", "intro": "Cada archivo respeta el mismo layout con independencia del destino. El subdirectorio metadata/ contiene los bloques estructurados; el subdirectorio rootfs/ contiene el backup del sistema de ficheros.", "treeCaption": "El directorio de staging generado durante un backup. Todos los destinos reciben el mismo árbol (adaptado a su formato nativo: tar para local, chunks PBS para PBS, segmentos borg para Borg).", - "tree": "backup-[timestamp]/\n├── manifest.json # estado estructurado del host\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # identidad de la ejecución + versión del kernel + método pmxcfs\n│ ├── paths_archived.txt # lista exacta de rutas que llegaron a rootfs/\n│ └── missing_paths.txt # rutas del perfil ausentes en el origen\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (con subdirs volátiles excluidos)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db vía sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # estado estructurado del host\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # identidad de la ejecución + versión del kernel + método pmxcfs\n│ ├── selected_paths.txt # lista exacta de rutas que llegaron a rootfs/\n│ └── missing_paths.txt # rutas del perfil ausentes en el origen\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (con subdirs volátiles excluidos)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db vía sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "El bloque rootfs", @@ -176,7 +176,7 @@ "stage": "3", "name": "Preparación de pending", "reads": "rootfs/ (rutas reboot + dangerous)", - "action": "_rs_prepare_pending_restore deja las rutas de riesgo preparadas bajo /var/lib/proxmenux/pending-restore/, escribe plan.env, apply-on-boot.list y rs-skip-paths.txt, y habilita proxmenux-restore-onboot.service para que dispare en el siguiente arranque." + "action": "_rs_prepare_pending_restore deja las rutas de riesgo preparadas bajo /var/lib/proxmenux/restore-pending/<restore_id>/ (enlazado como current), escribe plan.env, apply-on-boot.list y rs-skip-paths.txt, y habilita proxmenux-restore-onboot.service para que dispare en el siguiente arranque." }, { "stage": "3b", diff --git a/web/messages/es/docs/backup-restore/index.json b/web/messages/es/docs/backup-restore/index.json index dc1c3451..f216d571 100644 --- a/web/messages/es/docs/backup-restore/index.json +++ b/web/messages/es/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Dos interfaces, un único backend", "intro": "Cada paso del flujo de backup y restauración está disponible desde dos puntos de entrada. Ambos invocan la misma librería de shell, producen archivos idénticos y leen el mismo registro de trabajos.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "menu → Utilities →\nHost Backup / Restore\n\nFlujo basado en diálogos,\namigable por SSH, admite\nejecución desatendida\ndesde scripts.", + "cliDetail": "menu →\nHost Backup & Restore\n\nFlujo basado en diálogos,\namigable por SSH, admite\nejecución desatendida\ndesde scripts.", "webLabel": "ProxMenux Monitor (Web UI)", "webDetail": "Pestaña Backups en la\ninterfaz Web del Monitor.\n\nRestauración con un clic,\nlog en vivo, integrado con\nlas notificaciones y con\nel visor de rollback." }, diff --git a/web/messages/es/docs/backup-restore/restoring.json b/web/messages/es/docs/backup-restore/restoring.json index 5f3ea69c..dc4aab3f 100644 --- a/web/messages/es/docs/backup-restore/restoring.json +++ b/web/messages/es/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "El flujo completo de restauración", "intro": "El pipeline completo desde la selección del archivo hasta un host restaurado y operativo. Cada etapa alimenta a la siguiente; el estado escrito por etapas anteriores lo consumen las posteriores.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archivo → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · drift de hardware → RS_SKIP_PATHS │\n │ · dirección kernel → same / bk_newer / bk_older │\n │ · plan de remapeo NIC │\n │ · plan de hidratación (sólo bk_older) │\n │ · plan de rollback │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Diálogo de confirmación │\n │ Muestra: rutas hot, rutas pending, drift, │\n │ hidratación, remapeo NIC, nota cross-kernel, │\n │ preview de reinstalaciones │\n └──────────────────────────────┬──────────────────────────┘\n │ (aceptado)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Aplicar rutas hot → EN VIVO │\n │ _rs_apply rsyncea cada ruta hot │\n │ desde staging_root/rootfs a / │\n │ (salta rutas en RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (rutas diferidas) │\n │ Habilita proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Importa pools ZFS no-raíz cuyos discos │\n │ están todos presentes; retry con -f en │\n │ foreign hostid; skip con warning si faltan discos. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → filtro cascade-safe │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REINICIO │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (arranque temprano) │\n │ Lee plan.env │\n │ Aplica apply-on-boot.list (filtrado) │\n │ Instala la unit systemd de postboot │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutos) │\n │ Corre cuando pve-cluster está arriba │\n │ · Aplica entradas de /etc/pve a pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Comprobación de sanidad de arranque │\n │ · Notificación: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archivo → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · drift de hardware → RS_SKIP_PATHS │\n │ · dirección kernel → same / bk_newer / bk_older │\n │ · plan de remapeo NIC │\n │ · plan de hidratación (sólo bk_older) │\n │ · plan de rollback │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Diálogo de confirmación │\n │ Muestra: rutas hot, rutas pending, drift, │\n │ hidratación, remapeo NIC, nota cross-kernel, │\n │ preview de reinstalaciones │\n └──────────────────────────────┬──────────────────────────┘\n │ (aceptado)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Aplicar rutas hot → EN VIVO │\n │ _rs_apply rsyncea cada ruta hot │\n │ desde staging_root/rootfs a / │\n │ (salta rutas en RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (rutas diferidas) │\n │ Habilita proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Importa pools ZFS no-raíz cuyos discos │\n │ están todos presentes; retry con -f en │\n │ foreign hostid; skip con warning si faltan discos. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → filtro cascade-safe │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REINICIO │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (arranque temprano) │\n │ Lee plan.env │\n │ Aplica apply-on-boot.list (filtrado) │\n │ Instala la unit systemd de postboot │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutos) │\n │ Corre cuando pve-cluster está arriba │\n │ · Aplica entradas de /etc/pve a pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Comprobación de sanidad de arranque │\n │ · Notificación: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "La maquinaria del pending-restore", - "intro": "Las rutas clasificadas como reboot o dangerous, y las escrituras de hidratación, se preparan para el siguiente arranque en lugar de aplicarse en vivo. Esto se hace mediante un pequeño conjunto autocontenido de ficheros bajo /var/lib/proxmenux/pending-restore/:", + "intro": "Las rutas clasificadas como reboot o dangerous, y las escrituras de hidratación, se preparan para el siguiente arranque en lugar de aplicarse en vivo. Esto se hace mediante un pequeño conjunto autocontenido de ficheros bajo /var/lib/proxmenux/restore-pending/<restore_id>/:", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "Los ficheros preparados en sí — los bytes exactos que se colocarán. Se mantienen en el mismo sistema de ficheros que / para que el rsync de arranque sea rápido y no dependa de almacenamiento externo alcanzable en el arranque." } ], - "unitBody": "La unit systemd proxmenux-restore-onboot.service se habilita al final del paso interactivo. Es un servicio oneshot que dispara temprano en el siguiente arranque, invoca apply_pending_restore.sh, y después se autodeshabilita. La unit está protegida por la condición ConditionPathExists=/var/lib/proxmenux/pending-restore/state, por lo que en cualquier arranque sin restauración pendiente es un no-op." + "unitBody": "La unit systemd proxmenux-restore-onboot.service se habilita al final del paso interactivo. Es un servicio oneshot que dispara temprano en el siguiente arranque (antes de la red), invoca apply_pending_restore.sh, y después se autodeshabilita. La unit no tiene condición de ruta: es el propio script el que termina cuando /var/lib/proxmenux/restore-pending/current no existe, por lo que en cualquier arranque sin restauración pendiente es un no-op. El servicio separado proxmenux-apply-cluster-postboot.service está protegido por ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending." }, "postbootDispatcher": { "heading": "El dispatcher post-arranque — apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Dónde viven los logs", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Lo escribe el paso interactivo. Contiene: resultados de compatibilidad, filtro de drift, plan de hidratación, salida de aplicación hot, salida de preparación pending, instalación de paquetes." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Lo escribe el paso interactivo (pbs, borg o local). Las reinstalaciones de paquetes y los pasos de data pools también registran en /var/log/proxmenux/restore-apt-*.log y restore-datapools-*.log." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Lo escribe apply_pending_restore.sh en el arranque temprano. Contiene: plan.env sourceado, iteración de apply-on-boot, filtrado por skip-paths." }, { diff --git a/web/messages/es/docs/backup-restore/scheduled-jobs.json b/web/messages/es/docs/backup-restore/scheduled-jobs.json index 692d60dc..c3b738dd 100644 --- a/web/messages/es/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/es/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Gestión de trabajos", - "intro": "El menú del scheduler (TUI de Scripts) y la pestaña Backups del Monitor exponen las mismas acciones sobre cualquier trabajo.", + "intro": "El menú del scheduler en la TUI de Scripts (Backup scheduler and retention) ofrece Run now, Enable / Disable y Delete, además de una lista de trabajos con el estado de su última ejecución. Edit y View log solo están disponibles en la pestaña Backups del Monitor.", "rows": [ { "action": "Run now", @@ -112,7 +112,7 @@ "detail": "Modo Nuevo: systemctl enable/disable --now sobre el timer. Modo adjunto: cambia el flag ENABLED en el env del trabajo — el script-hook lo respeta en el siguiente disparo de PVE." }, { - "action": "Edit", + "action": "Edit (solo en Monitor)", "detail": "Reabre los prompts de destino, horario, perfil y retención y reescribe los ficheros del trabajo. Preserva el ID del trabajo." }, { @@ -120,7 +120,7 @@ "detail": "Elimina el env del trabajo, el fichero de rutas, el timer + service systemd (modo Nuevo) y desactiva el binding del hook (modo adjunto). No toca los archivos ya presentes en el destino." }, { - "action": "View log", + "action": "View log (solo en Monitor)", "detail": "Muestra en streaming /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log — un fichero de log por ejecución. El runner también emite una línea de estado compacta a journald bajo el service systemd." } ] diff --git a/web/messages/fr/docs/backup-restore/creating-backups.json b/web/messages/fr/docs/backup-restore/creating-backups.json index 981af1ce..6ee37487 100644 --- a/web/messages/fr/docs/backup-restore/creating-backups.json +++ b/web/messages/fr/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Processus fondé sur des boîtes de dialogue, adapté à SSH. Le menu principal présente directement les six options. Utilise backup_menu dans backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Processus fondé sur des boîtes de dialogue, adapté à SSH. L’entrée du menu principal ouvre Host Config Backup / Restore ; Backup host configuration mène aux six options. Utilise backup_menu dans backup_host.sh." }, { "entry": "ProxMenux Monitor (interface utilisateur Web)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Profil par défaut vs personnalisé", "defaultTitle": "Profil par défaut", - "defaultBody": "Le profil par défaut est la liste prédéfinie de hb_default_profile_paths (documentée dans Comment ça marche sous Catégories de chemins) plus chaque entrée dans le fichier supplémentaire persistant /usr/local/share/proxmenux/backup-extra-paths.txt. L'utilisateur confirme les options de destination et de chiffrement et la sauvegarde se déroule sans autre sélection de chemin.", + "defaultBody": "Le profil par défaut est la liste prédéfinie de hb_default_profile_paths (documentée dans Comment ça marche sous Catégories de chemins) plus chaque entrée dans le fichier supplémentaire persistant /usr/local/share/proxmenux/backup-extra-paths.txt. L’utilisateur choisit les options de destination et de chiffrement et la sauvegarde se déroule sans autre sélection de chemin.", "customTitle": "Profil personnalisé", "customBody": "Le profil personnalisé ouvre une liste à cocher avec tous les chemins du profil par défaut (décochés) et tous les ajouts persistants (précochés, avec le préfixe [+]). L’utilisateur coche les chemins pour cette exécution et peut cliquer sur Ajouter un chemin personnalisé pour ajouter un chemin absolu. Tout chemin ainsi ajouté est enregistré dans backup-extra-paths.txt afin que les sauvegardes suivantes l’incluent automatiquement. Décocher un ajout persistant l’exclut de cette exécution sans le supprimer du fichier — la suppression se fait séparément par Gérer les chemins personnalisés, en dehors du processus de sauvegarde.", "customPickerAlt": "Liste de contrôle de profil personnalisé montrant les chemins de profil par défaut (non coché) et les extras persistants (pré coché avec un préfixe [+]), ainsi que des boutons pour ajouter un nouveau chemin ou confirmer la sélection.", @@ -124,7 +124,7 @@ }, "included": { "heading": "Ce qui entre et ce qui reste en dehors", - "intro": "Chaque chemin dans le profil résolu (par défaut + suppléments persistants + sélection en mode personnalisé) est copié avec rsync -aAXH --numeric-ids. Une liste d'exclusion partagée s'applique à chaque chemin, et deux répertoires comportent d'autres exclusions spécifiques au chemin.", + "intro": "Chaque chemin dans le profil résolu (par défaut + suppléments persistants + sélection en mode personnalisé) est copié avec rsync -aAXH --numeric-ids. Il n’y a pas de liste d’exclusion globale ; quelques répertoires comportent des exclusions spécifiques au chemin.", "rootTitle": "Exclusions de /root/", "rootBody": "/root/ fait partie du profil par défaut, de sorte que les scripts utilisateur et la configuration se trouvent dans l'archive. Les sous-chemins volatils sont abandonnés:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER — pas dans le profil par défaut. Ajoutez-le comme un chemin personnalisé lorsqu'un système transporte des répertoires d'utilisateur qui doivent survivre à une restauration." ], "customPathsTitle": "Comment les chemins personnalisés sont gérés", - "customPathsBody": "Un chemin personnalisé ajouté en ligne en mode personnalisé ou maintenu dans backup-extra-paths.txt passe par le même pipeline rsync que les chemins de profil par défaut. Les exclusions globales s'appliquent. Si le chemin personnalisé se trouve sous /root/ ou /usr/local/share/proxmenux/, les exclusions spécifiques au chemin ci-dessus s'appliquent toujours. Chaque chemin archivé — par défaut ou personnalisé — est enregistré dans metadata/paths_archived.txt. Les chemins qui n'existent pas sur la source sont enregistrés dans metadata/missing_paths.txt sans arrêter la sauvegarde." + "customPathsBody": "Un chemin personnalisé ajouté en ligne en mode personnalisé ou maintenu dans backup-extra-paths.txt passe par le même pipeline rsync que les chemins de profil par défaut. Si le chemin personnalisé se trouve sous /root/ ou /usr/local/share/proxmenux/, les exclusions spécifiques au chemin ci-dessus s’appliquent toujours. Chaque chemin archivé — par défaut ou personnalisé — est enregistré dans metadata/selected_paths.txt. Les chemins qui n’existent pas sur la source sont enregistrés dans metadata/missing_paths.txt sans arrêter la sauvegarde, et les chemins dont la copie échoue dans metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Structure des archives", "intro": "Le répertoire de préparation temporaire produit par chaque moteur suit la même disposition quelle que soit la destination. L'archive tarball, PBS .pxar ou Borg stocke cet arbre dans son intégralité.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Résumé de la confirmation", - "body": "Avant que le moteur n'écrive quoi que ce soit à la destination, ProxMenux affiche une boîte de dialogue de résumé avec la destination, l’identifiant de sauvegarde ou le nom de l’archive, l'état de chiffrement et la liste des chemins copiés. Annuler ici avorte la sauvegarde proprement — le répertoire temporaire est supprimé par le gestionnaire trap défini dans la fonction backend et aucune donnée partielle n'arrive à destination." + "body": "Avant que le moteur n’écrive quoi que ce soit à la destination, ProxMenux affiche dans le terminal un résumé avec la destination, l’identifiant de sauvegarde ou le nom de l’archive, l’état de chiffrement et la liste des chemins copiés. Il n’y a ni étape de confirmation ni d’annulation à ce stade ; la copie démarre juste après. Si la sauvegarde échoue ou est interrompue, le répertoire temporaire est supprimé par le gestionnaire trap défini dans la fonction backend et aucune donnée partielle n’arrive à destination." }, "writing": { "heading": "Écrire à la destination", diff --git a/web/messages/fr/docs/backup-restore/destinations/local.json b/web/messages/fr/docs/backup-restore/destinations/local.json index 0a89acf8..af8eb495 100644 --- a/web/messages/fr/docs/backup-restore/destinations/local.json +++ b/web/messages/fr/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Configuration du répertoire cible", - "intro": "La destination locale est un unique répertoire cible enregistré durablement — pas une liste. ProxMenux stocke le choix de l'opérateur chez /usr/local/share/proxmenux/local-target.conf et le lit sur chaque sauvegarde. Lorsqu'aucune cible n'a été configurée, le HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump par défaut est utilisé (le même répertoire que Proxmox utilise pour ses propres sorties vzdump). La cible est configurée à partir de Configurer les destinations de sauvegarde → Destinations locales:", + "intro": "La destination locale est un unique répertoire cible enregistré durablement — pas une liste. ProxMenux stocke le choix de l’opérateur chez /usr/local/share/proxmenux/local-target.conf et le lit sur chaque sauvegarde. Lorsqu’aucune cible n’a été configurée, le HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump par défaut est utilisé (le même répertoire que Proxmox utilise pour ses propres sorties vzdump). La cible est configurée à partir de Configurer les destinations de sauvegarde → Local archive targets → Manage local backup target:", "options": [ "Utilisez par défaut (/var/lib/vz/dump). Le stockage local Proxmox. Présent sur chaque install Proxmox ; l'archive se trouve à côté des sorties vzdump et est captée automatiquement par l'onglet Sauvegardes du moniteur.", - "Entrez un chemin personnalisé. Tout chemin absolu du système de fichiers peut être utilisé : un montage NFS, un partage SMB monté via fstab, un jeu de données ZFS dédié, un deuxième disque interne. ProxMenux valide que le chemin existe et est un répertoire avant de l’enregistrer.", - "Choisissez un lecteur USB. Ouvre le sous-menu USB (ci-dessous), qui détecte les appareils amovibles et propose de monter ou de formater un périphérique." + "Utilisez un chemin personnalisé. Tout chemin absolu du système de fichiers peut être utilisé : un montage NFS, un partage SMB monté via fstab, un jeu de données ZFS dédié, un deuxième disque interne. ProxMenux valide que le chemin existe et est un répertoire avant de l’enregistrer.", + "Utilisez un disque USB. Ouvre le sous-menu USB (ci-dessous), qui détecte les appareils amovibles et propose de monter ou de formater un périphérique." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "non monté", "shown": "Taille · étiquette · [fstype] · (non monté — sera monté)", - "action": "Un système de fichiers est présent mais n'est pas monté. Lors de la confirmation, ProxMenux exécute hb_mount_usb_partition : crée /mnt/backup-LABEL (ou un chemin basé sur UUID s'il n'y a pas d'étiquette), monte la partition et persiste le point de montage comme cible locale." + "action": "Un système de fichiers est présent mais n’est pas monté. Lors de la confirmation, ProxMenux exécute hb_mount_usb_partition : crée /mnt/proxmenux-backup-LABEL (UUID ou nom du périphérique s’il n’y a pas d’étiquette), monte la partition et persiste le point de montage comme cible locale." }, { "state": "vide", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "Le sidecar JSON", - "intro": "Chaque sauvegarde locale réussie produit un fichier compagnon : HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, écrit à côté de l'archive par hb_write_archive_sidecar. Ce petit fichier JSON permet au ProxMenux Monitor d'identifier l'archive comme une sauvegarde d'hôte ProxMenux même s'il est déplacé, rebaptisé ou archivé ailleurs.", + "intro": "Chaque sauvegarde locale réussie produit un fichier compagnon : hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, écrit à côté de l’archive par hb_write_archive_sidecar. Ce petit fichier JSON permet au ProxMenux Monitor d’identifier l’archive comme une sauvegarde d’hôte ProxMenux même s’il est déplacé, rebaptisé ou archivé ailleurs.", "contentTitle": "Contenu du sidecar", "contentBody": "Le sidecar stocke la version du schéma, que la sauvegarde soit issue d'une opération interactive ou d'un travail programmé (kind), l'ID de travail pour les opérations programmées, le mode de profil utilisé (default ou custom), le nom d'hôte source, le nom de base d'archive original, un horodatage de création ISO-8601 et la taille des archives en octets.", "whyBody": "L'onglet Sauvegardes du moniteur scanne les répertoires locaux configurés pour les sidecars *.proxmenux.json — pas pour les fichiers *.tar.zst — parce qu'un .tar.zst sans sidecar pourrait ne pas être une sauvegarde ProxMenux du tout. Le scan est rapide (les fichiers JSON sont minuscules) et l'appariement est stable à travers les renoms de l'archive aussi longtemps que le sidecar est renommé pour correspondre." diff --git a/web/messages/fr/docs/backup-restore/destinations/pbs.json b/web/messages/fr/docs/backup-restore/destinations/pbs.json index dc0139b8..c72921b5 100644 --- a/web/messages/fr/docs/backup-restore/destinations/pbs.json +++ b/web/messages/fr/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "Configuration manuelle ProxMenux", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Ajouté de Configurer les destinations de sauvegarde → PBS destinations → Ajouter PBS. Prompts pour un nom, nom d'utilisateur (root@pam ou user@pbs!token), hôte ou IP, datastore et mot de passe. Le mot de passe reprend sur l'entrée vide — une sauvegarde vide persisterait silencieusement et chaque sauvegarde ultérieure échouerait avec une erreur d'authentification opaque. Ce chemin est utilisé lorsque la cible PBS n'est pas enregistrée comme stockage Proxmox." + "content": "Ajouté depuis Configurer les destinations de sauvegarde → Proxmox Backup Server (PBS) destinations → + Add new PBS manually. Prompts pour un nom, nom d’utilisateur (root@pam ou user@pbs!token), hôte ou IP, datastore et mot de passe. Le mot de passe est redemandé si l’entrée est vide — une sauvegarde vide persisterait silencieusement et chaque sauvegarde ultérieure échouerait avec une erreur d’authentification opaque. Ce chemin est utilisé lorsque la cible PBS n’est pas enregistrée comme stockage Proxmox." } ], "menuTitle": "Menu de sélection", diff --git a/web/messages/fr/docs/backup-restore/how-it-works.json b/web/messages/fr/docs/backup-restore/how-it-works.json index 4bec322e..75ced147 100644 --- a/web/messages/fr/docs/backup-restore/how-it-works.json +++ b/web/messages/fr/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Mise en page des archives", "intro": "Chaque archive suit la même disposition de l'arbre, quelle que soit la destination. Le sous-répertoire metadata/ détient les charges utiles structurées; le sous-répertoire rootfs/ détient la copie du système de fichiers.", "treeCaption": "Le répertoire de mise en scène a été établi lors d'une sauvegarde. Chaque destination reçoit le même arbre (adapté à son format natif: tar pour local, PBS morceaux pour PBS, segments borg pour Borg).", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "La partie rootfs", @@ -176,7 +176,7 @@ "stage": "3", "name": "En attente de préparation", "reads": "rootfs/ (redémarrage + chemins dangereux)", - "action": "_rs_prepare_pending_restore prépare les chemins à risque dans /var/lib/proxmenux/pending-restore/, écrit plan.env, apply-on-boot.list et rs-skip-paths.txt, puis active proxmenux-restore-onboot.service pour le prochain démarrage." + "action": "_rs_prepare_pending_restore prépare les chemins à risque dans /var/lib/proxmenux/restore-pending/<restore_id>/ (lié en tant que current), écrit plan.env, apply-on-boot.list et rs-skip-paths.txt, puis active proxmenux-restore-onboot.service pour le prochain démarrage." }, { "stage": "3b", diff --git a/web/messages/fr/docs/backup-restore/index.json b/web/messages/fr/docs/backup-restore/index.json index 2b40cfc2..b567eb4f 100644 --- a/web/messages/fr/docs/backup-restore/index.json +++ b/web/messages/fr/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Deux interfaces, un backend", "intro": "Chaque étape du workflow de sauvegarde et de restauration est disponible à partir de deux points d'entrée. Les deux appellent la même bibliothèque shell, produisent des archives identiques et lisent le même registre de tâches.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "menu → Utilitaires →\nSauvegarde / Restauration de l'hôte\n\nFlux basé sur le dialogue,\nCompatible avec SSH, scriptable\npour une utilisation sans surveillance.", + "cliDetail": "menu →\nSauvegarde et restauration de l’hôte\n\nFlux basé sur le dialogue,\nCompatible avec SSH, scriptable\npour une utilisation sans surveillance.", "webLabel": "ProxMenux Monitor (Web UI)", "webDetail": "Onglet Sauvegardes dans\nl’interface web de Monitor.\n\nRestauration en un clic, suivi\ndes journaux en direct, intégré\naux notifications et à la vue\ndes différences de retour arrière." }, diff --git a/web/messages/fr/docs/backup-restore/restoring.json b/web/messages/fr/docs/backup-restore/restoring.json index fcd555cf..fc577b0a 100644 --- a/web/messages/fr/docs/backup-restore/restoring.json +++ b/web/messages/fr/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "Le workflow complet de restauration", "intro": "Le pipeline complet de la sélection des archives à un hôte opérationnel restauré. Chaque étape alimente la suivante; l'état écrit par les étapes précédentes est consommé par les suivantes.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "Mécanisme de restauration différée", - "intro": "Les chemins classés comme reboot ou dangerous, et l'hydratation écrit, sont mis en scène pour le prochain démarrage au lieu d'être appliqués en direct. Cela se fait par le biais d'un petit ensemble autonome de fichiers sous /var/lib/proxmenux/pending-restore/ :", + "intro": "Les chemins classés comme reboot ou dangerous, et l’hydratation écrit, sont mis en scène pour le prochain démarrage au lieu d’être appliqués en direct. Cela se fait par le biais d’un petit ensemble autonome de fichiers sous /var/lib/proxmenux/restore-pending/<restore_id>/ :", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "Les fichiers mis en scène eux-mêmes — les octets exacts qui seront établis. Conservé sur le même système de fichiers que / de sorte que le rsync on-boot est rapide et ne dépend pas du stockage externe encore accessible au démarrage." } ], - "unitBody": "L’unité systemd proxmenux-restore-onboot.service est activée à la fin de l’étape interactive. Ce service ponctuel démarre tôt au prochain démarrage, appelle apply_pending_restore.sh puis se désactive. La condition ConditionPathExists=/var/lib/proxmenux/pending-restore/state empêche toute exécution lorsqu’aucune restauration n’est en attente." + "unitBody": "L’unité systemd proxmenux-restore-onboot.service est activée à la fin de l’étape interactive. Ce service ponctuel démarre tôt au prochain démarrage (avant le réseau), appelle apply_pending_restore.sh puis se désactive. L’unité n’a aucune condition de chemin : c’est le script lui-même qui se termine lorsque /var/lib/proxmenux/restore-pending/current n’existe pas, ce qui en fait une opération vide à tout démarrage sans restauration en attente. Le service distinct proxmenux-apply-cluster-postboot.service est conditionné par ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending." }, "postbootDispatcher": { "heading": "Le répartiteur après démarrage — apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Emplacement des journaux", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Écrit lors de l’étape interactive : résultats de compatibilité, filtre des différences, plan d’adaptation, sorties de l’application à chaud et de la préparation différée, installation des paquets." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Écrit lors de l’étape interactive (pbs, borg ou local). Les réinstallations de paquets et les étapes des pools de données écrivent aussi dans /var/log/proxmenux/restore-apt-*.log et restore-datapools-*.log." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Écrit par apply_pending_restore.sh au début du démarrage : chargement de plan.env, parcours de apply-on-boot et filtrage des chemins exclus." }, { diff --git a/web/messages/fr/docs/backup-restore/scheduled-jobs.json b/web/messages/fr/docs/backup-restore/scheduled-jobs.json index 384fbe2c..a5e99cf8 100644 --- a/web/messages/fr/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/fr/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Gestion des tâches", - "intro": "Le menu planificateur (Scripts TUI) et l'onglet Sauvegardes Monitor exposent les mêmes actions sur n'importe quel travail.", + "intro": "Le menu planificateur du Scripts TUI (Backup scheduler and retention) propose Run now, Enable / Disable et Delete, ainsi qu’une liste des travaux avec l’état de leur dernière exécution. Edit et View log ne sont disponibles que dans l’onglet Sauvegardes de Monitor.", "rows": [ { "action": "Exécuter maintenant", @@ -112,7 +112,7 @@ "detail": "Nouveau mode : systemctl enable/disable --now la minuterie. Attache le mode : retourne le drapeau ENABLED dans le travail env — le script hook l'honore au prochain déclenchement PVE." }, { - "action": "Modifier", + "action": "Modifier (Monitor uniquement)", "detail": "Rouvre les champs de destination, calendrier, profil et rétention et réécrit les fichiers de la tâche. Conserve son identifiant." }, { @@ -120,7 +120,7 @@ "detail": "Supprime le fichier env, la liste des chemins et le minuteur et service systemd (nouvelle tâche), et désactive l’association au hook (mode d’association). Les archives déjà présentes à destination restent intactes." }, { - "action": "Voir le journal", + "action": "Voir le journal (Monitor uniquement)", "detail": "Affiche en continu /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log : un fichier journal par exécution. Le programme d'exécution émet également une ligne d'état compacte à journald sous le service systemd." } ] diff --git a/web/messages/it/docs/backup-restore/creating-backups.json b/web/messages/it/docs/backup-restore/creating-backups.json index 9fa6693e..fcf362f2 100644 --- a/web/messages/it/docs/backup-restore/creating-backups.json +++ b/web/messages/it/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Flusso basato sul dialogo, SSH-friendly. Il menu principale presenta le sei opzioni direttamente. Utilizza backup_menu in backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Flusso basato sul dialogo, SSH-friendly. La voce del menu principale apre Host Config Backup / Restore; Backup host configuration porta alle sei opzioni. Utilizza backup_menu in backup_host.sh." }, { "entry": "ProxMenux Monitor (interfaccia web)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Profilo predefinito e personalizzato", "defaultTitle": "Profilo predefinito", - "defaultBody": "Il profilo predefinito è l'elenco curato da hb_default_profile_paths (documentato in Come funziona sotto Categorie di percorsi) più ogni voce nel file extra persistente /usr/local/share/proxmenux/backup-extra-paths.txt. L'utente conferma le opzioni di destinazione e crittografia e il backup procede senza ulteriori selezioni dei percorsi.", + "defaultBody": "Il profilo predefinito è l'elenco curato da hb_default_profile_paths (documentato in Come funziona sotto Categorie di percorsi) più ogni voce nel file extra persistente /usr/local/share/proxmenux/backup-extra-paths.txt. L'utente sceglie le opzioni di destinazione e crittografia e il backup procede senza ulteriori selezioni dei percorsi.", "customTitle": "Profilo personalizzato", "customBody": "Il profilo personalizzato apre un elenco con tutti i percorsi del profilo predefinito (non selezionati) e tutti gli extra persistenti (già selezionati, con il prefisso [+]). L’utente seleziona i percorsi per questa esecuzione e può premere Aggiungi percorso personalizzato per aggiungere un nuovo percorso assoluto. I percorsi aggiunti vengono salvati in backup-extra-paths.txt, così i backup futuri li includono automaticamente senza doverli aggiungere di nuovo. Deselezionare un extra persistente lo esclude da questa esecuzione ma non lo elimina dal file — l’eliminazione avviene con l’azione separata Gestisci percorsi personalizzati, al di fuori del flusso di backup.", "customPickerAlt": "Elenco di controllo del profilo personalizzato che mostra i percorsi di predefinito (non selezionati) e gli extra persistenti (già selezionati con un prefisso [+]), più pulsanti per aggiungere un nuovo percorso o confermare la selezione.", @@ -124,7 +124,7 @@ }, "included": { "heading": "Cosa entra e cosa rimane fuori", - "intro": "Ogni percorso nel profilo risolto (predefinito + extra persistenti + selezione personalizzata) viene copiato con rsync -aAXH --numeric-ids. Un elenco di esclusione condiviso si applica a ogni percorso, e due directory portano ulteriori esclusioni specifiche del percorso.", + "intro": "Ogni percorso nel profilo risolto (predefinito + extra persistenti + selezione personalizzata) viene copiato con rsync -aAXH --numeric-ids. Non esiste un elenco di esclusione globale; alcune directory hanno esclusioni specifiche del percorso.", "rootTitle": "/root/ esclusioni", "rootBody": "/root/ fa parte del profilo predefinito per includere nell’archivio gli script e la configurazione dell’utente. Sono esclusi i sottopercorsi volatili:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER — non nel profilo predefinito. Aggiungilo come un percorso personalizzato quando un sistema porta directory home degli utenti che devono sopravvivere a un ripristino." ], "customPathsTitle": "Come vengono gestiti i percorsi personalizzati", - "customPathsBody": "Un percorso personalizzato aggiunto in linea in modalità personalizzata o persistito in backup-extra-paths.txt passa attraverso la stessa pipeline rsync come percorsi di default-profile. Si applicano esclusioni globali. Se il percorso personalizzato avviene sotto /root/ o /usr/local/share/proxmenux/, si applicano ancora le esclusioni specifiche del percorso. Ogni percorso archiviato — predefinito o personalizzato — viene registrato in metadata/paths_archived.txt. I percorsi che non esistono sulla sorgente sono registrati in metadata/missing_paths.txt senza interrompere il backup." + "customPathsBody": "Un percorso personalizzato aggiunto in linea in modalità personalizzata o persistito in backup-extra-paths.txt passa attraverso la stessa pipeline rsync come percorsi di default-profile. Se il percorso personalizzato avviene sotto /root/ o /usr/local/share/proxmenux/, si applicano ancora le esclusioni specifiche del percorso. Ogni percorso archiviato — predefinito o personalizzato — viene registrato in metadata/selected_paths.txt. I percorsi che non esistono sulla sorgente sono registrati in metadata/missing_paths.txt senza interrompere il backup, e i percorsi la cui copia fallisce in metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Struttura dell'archivio", "intro": "La directory di staging prodotta da ogni backend segue lo stesso layout indipendentemente dalla destinazione. Il tarball, PBS .pxar o Borg archivio memorizza questo albero verbatim.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Riepilogo conferma", - "body": "Prima che il backend scriva qualcosa alla destinazione, ProxMenux mostra una finestra di dialogo sommaria con la destinazione, l'ID di backup o il nome dell'archivio, lo stato di crittografia e l'elenco dei percorsi da copiare. Cancellando qui interrompe il backup in modo pulito — la directory di staging viene rimossa dal gancio trap impostato sulla funzione backend e nessun dato parziale raggiunge la destinazione." + "body": "Prima che il backend scriva qualcosa alla destinazione, ProxMenux stampa nel terminale un riepilogo con la destinazione, l'ID di backup o il nome dell'archivio, lo stato di crittografia e l'elenco dei percorsi da copiare. In questo punto non c'è alcun passaggio di conferma o annullamento; la copia inizia subito dopo. Se il backup fallisce o viene interrotto, la directory di staging viene rimossa dal gancio trap impostato sulla funzione backend e nessun dato parziale raggiunge la destinazione." }, "writing": { "heading": "Scrivere alla destinazione", diff --git a/web/messages/it/docs/backup-restore/destinations/local.json b/web/messages/it/docs/backup-restore/destinations/local.json index 0bf1d672..09ebca55 100644 --- a/web/messages/it/docs/backup-restore/destinations/local.json +++ b/web/messages/it/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Configurazione della directory target", - "intro": "La destinazione locale è una unica directory di destinazione salvata in modo persistente — non un elenco. ProxMenux memorizza la scelta dell'operatore su /usr/local/share/proxmenux/local-target.conf e la legge su ogni backup. Quando non è stato configurato alcun obiettivo, viene utilizzato il HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump predefinito (la stessa directory Proxmox utilizza per le proprie uscite vzdump). L'obiettivo è configurato da Configura destinazioni di backup → Destinazioni locali:", + "intro": "La destinazione locale è una unica directory di destinazione salvata in modo persistente — non un elenco. ProxMenux memorizza la scelta dell'operatore su /usr/local/share/proxmenux/local-target.conf e la legge su ogni backup. Quando non è stato configurato alcun obiettivo, viene utilizzato il HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump predefinito (la stessa directory Proxmox utilizza per le proprie uscite vzdump). L'obiettivo è configurato da Configura destinazioni di backup → Destinazioni archivio locali → Gestisci destinazione di backup locale:", "options": [ "Utilizzo predefinito (/var/lib/vz/dump). Lo storage locale Proxmox. Presente su ogni installazione Proxmox; l'archivio si trova accanto alle uscite vzdump e viene ritirato dalla scheda Monitor Backups automaticamente.", - "Inserisci un percorso personalizzato. Puoi usare qualsiasi percorso assoluto del filesystem: un montaggio NFS, una condivisione SMB montata tramite fstab, un dataset ZFS dedicato o un secondo disco interno. Prima di salvarlo, ProxMenux verifica che il percorso esista e sia una directory.", - "Scegli un’unità USB. Apre il sottomenu USB (sotto), che rileva dispositivi rimovibili e offre di montare o formattarne uno." + "Usa un percorso personalizzato. Puoi usare qualsiasi percorso assoluto del filesystem: un montaggio NFS, una condivisione SMB montata tramite fstab, un dataset ZFS dedicato o un secondo disco interno. Prima di salvarlo, ProxMenux verifica che il percorso esista e sia una directory.", + "Usa un disco USB. Apre il sottomenu USB (sotto), che rileva dispositivi rimovibili e offre di montare o formattarne uno." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "non montato", "shown": "Dimensione · etichetta · [fstype] · (non montato — sarà montato)", - "action": "Un filesystem è presente ma non montato. A conferma, ProxMenux gestisce hb_mount_usb_partition: crea /mnt/backup-LABEL (o un percorso basato su UUID se non c'è etichetta), monta la partizione e persiste il punto di montaggio come obiettivo locale." + "action": "Un filesystem è presente ma non montato. A conferma, ProxMenux gestisce hb_mount_usb_partition: crea /mnt/proxmenux-backup-LABEL (UUID o nome del dispositivo se non c'è etichetta), monta la partizione e persiste il punto di montaggio come obiettivo locale." }, { "state": "vuoto", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "Il sidecar JSON", - "intro": "Ogni backup locale di successo produce un file compagno: HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, scritto accanto all'archivio da hb_write_archive_sidecar. Questo piccolo file JSON consente a ProxMenux Monitor di identificare l'archivio come ProxMenux backup host anche se in seguito viene spostato, rinominato o archiviato altrove.", + "intro": "Ogni backup locale di successo produce un file compagno: hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, scritto accanto all'archivio da hb_write_archive_sidecar. Questo piccolo file JSON consente a ProxMenux Monitor di identificare l'archivio come ProxMenux backup host anche se in seguito viene spostato, rinominato o archiviato altrove.", "contentTitle": "Contenuto del sidecar", "contentBody": "Il sidecar memorizza la versione schema, se il backup proveniva da un run interattivo o da un lavoro programmato (kind), l'ID di lavoro per le esecuzioni pianificate, la modalità profilo utilizzata (default o custom), il nome host sorgente, il nome base originale dell'archivio, un timestamp di creazione ISO-8601 e la dimensione dell'archivio in byte.", "whyBody": "La scheda Backups di Monitor cerca i file ausiliari *.proxmenux.json nelle directory locali configurate, non i file *.tar.zst, perché un .tar.zst senza file ausiliario potrebbe non essere un backup ProxMenux. La scansione è veloce (i file JSON sono piccoli) e l’associazione resta valida quando l’archivio viene rinominato, purché anche il file ausiliario venga rinominato di conseguenza." diff --git a/web/messages/it/docs/backup-restore/destinations/pbs.json b/web/messages/it/docs/backup-restore/destinations/pbs.json index d6c90a2a..fec03cfc 100644 --- a/web/messages/it/docs/backup-restore/destinations/pbs.json +++ b/web/messages/it/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "Configurazione manuale ProxMenux", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Aggiunto da Configure destinazioni di backup → PBS destinazioni → Aggiungi PBS. Prompts per un nome, nome utente (root@pam o user@pbs!token), host o IP, datastore e password. I re-prompt password su input vuoto — un salvataggio vuoto altrimenti persisterebbe silenziosamente e ogni backup successivo fallirebbe con un errore di autenticazione opaco. Questo percorso viene utilizzato quando il target PBS non è registrato come storage Proxmox." + "content": "Aggiunto da Configure destinazioni di backup → Destinazioni Proxmox Backup Server (PBS) → + Aggiungi nuovo PBS manualmente. Prompts per un nome, nome utente (root@pam o user@pbs!token), host o IP, datastore e password. I re-prompt password su input vuoto — un salvataggio vuoto altrimenti persisterebbe silenziosamente e ogni backup successivo fallirebbe con un errore di autenticazione opaco. Questo percorso viene utilizzato quando il target PBS non è registrato come storage Proxmox." } ], "menuTitle": "Menu di selezione", diff --git a/web/messages/it/docs/backup-restore/how-it-works.json b/web/messages/it/docs/backup-restore/how-it-works.json index cc0aa5a8..3f4a29ad 100644 --- a/web/messages/it/docs/backup-restore/how-it-works.json +++ b/web/messages/it/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Disposizione dell'archivio", "intro": "Ogni archivio segue lo stesso layout albero indipendentemente dalla destinazione. La sottodirectory metadata/ contiene i dati strutturati; la sottodirectory rootfs/ contiene la copia del filesystem.", "treeCaption": "La directory di preparazione creata durante il backup. Tutte le destinazioni ricevono lo stesso albero nel proprio formato nativo: tar per i backup locali, blocchi PBS per PBS e segmenti Borg per Borg.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "La parte rootfs", @@ -176,7 +176,7 @@ "stage": "3", "name": "Preparazione delle modifiche differite", "reads": "rootfs/ (riavvio + percorsi pericolosi)", - "action": "_rs_prepare_pending_restore prepara i percorsi rischiosi in /var/lib/proxmenux/pending-restore/, scrive plan.env, apply-on-boot.list e rs-skip-paths.txt e abilita proxmenux-restore-onboot.service per il prossimo avvio." + "action": "_rs_prepare_pending_restore prepara i percorsi rischiosi in /var/lib/proxmenux/restore-pending/<restore_id>/ (collegata come current), scrive plan.env, apply-on-boot.list e rs-skip-paths.txt e abilita proxmenux-restore-onboot.service per il prossimo avvio." }, { "stage": "3b", diff --git a/web/messages/it/docs/backup-restore/index.json b/web/messages/it/docs/backup-restore/index.json index 0e1015af..3cc3e651 100644 --- a/web/messages/it/docs/backup-restore/index.json +++ b/web/messages/it/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Due interfacce, un backend", "intro": "Ogni fase del flusso di lavoro di backup e ripristino è disponibile da due punti di ingresso. Entrambi chiamano la stessa libreria di shell, producono archivi identici e leggono lo stesso registro dei lavori.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "menu → Utilità →\nBackup/Ripristino dell'host\n\nFlusso basato su dialoghi,\nSSH-friendly, scriptabile\nper uso non presidiato.", + "cliDetail": "menu →\nBackup/Ripristino dell'host\n\nFlusso basato su dialoghi,\nSSH-friendly, scriptabile\nper uso non presidiato.", "webLabel": "ProxMenux Monitor (Web UI)", "webDetail": "Scheda Backups\nnell’interfaccia web di Monitor.\n\nRipristino con un clic, log\nin tempo reale, integrazione con\nle notifiche e il visualizzatore\ndelle differenze di rollback." }, diff --git a/web/messages/it/docs/backup-restore/restoring.json b/web/messages/it/docs/backup-restore/restoring.json index 2f53b1e3..cbc37121 100644 --- a/web/messages/it/docs/backup-restore/restoring.json +++ b/web/messages/it/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "Il flusso di lavoro di ripristino completo", "intro": "La pipeline completa dalla selezione di archivi a un host restaurato funzionante. Ogni fase alimenta il successivo; lo stato scritto da fasi precedenti è consumato da quelli successivi.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "Il meccanismo di ripristino differito", - "intro": "I percorsi classificati come reboot o dangerous, e le scritture di idratazione, sono in scena per il prossimo avvio invece di essere applicati in diretta. Questo viene fatto attraverso un piccolo set autocontenuto di file sotto /var/lib/proxmenux/pending-restore/:", + "intro": "I percorsi classificati come reboot o dangerous, e le scritture di idratazione, sono in scena per il prossimo avvio invece di essere applicati in diretta. Questo viene fatto attraverso un piccolo set autocontenuto di file sotto /var/lib/proxmenux/restore-pending/<restore_id>/:", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "I file in scena stessi — i byte esatti che saranno stabiliti. Tenuto sullo stesso filesystem di / così il rsync on-boot è veloce e non dipende dallo storage esterno ancora raggiungibile al boot." } ], - "unitBody": "L’unità systemd proxmenux-restore-onboot.service viene abilitata alla fine della fase interattiva. Il servizio viene eseguito una sola volta, all’inizio del prossimo avvio, richiama apply_pending_restore.sh e poi si disabilita. La condizione ConditionPathExists=/var/lib/proxmenux/pending-restore/state evita l’esecuzione quando non esiste un ripristino in sospeso." + "unitBody": "L’unità systemd proxmenux-restore-onboot.service viene abilitata alla fine della fase interattiva. Il servizio viene eseguito una sola volta, all’inizio del prossimo avvio (prima della rete), richiama apply_pending_restore.sh e poi si disabilita. L’unità non ha condizioni sul percorso: è lo script stesso a terminare quando /var/lib/proxmenux/restore-pending/current non esiste, quindi a qualsiasi avvio senza un ripristino in sospeso non fa nulla. Il servizio separato proxmenux-apply-cluster-postboot.service è condizionato da ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending." }, "postbootDispatcher": { "heading": "Il processo dopo l’avvio — apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Dove vivono i registri", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Scritto nella fase interattiva: risultati di compatibilità, filtro delle differenze, piano di adattamento, output dell’applicazione diretta e della preparazione differita, installazione dei pacchetti." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Scritto nella fase interattiva (pbs, borg o local). Anche le reinstallazioni dei pacchetti e i passaggi dei data pool scrivono in /var/log/proxmenux/restore-apt-*.log e restore-datapools-*.log." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Scritto da apply_pending_restore.sh all’inizio dell’avvio: caricamento di plan.env, elaborazione di apply-on-boot e filtro dei percorsi esclusi." }, { diff --git a/web/messages/it/docs/backup-restore/scheduled-jobs.json b/web/messages/it/docs/backup-restore/scheduled-jobs.json index 6a851dc3..5a2e8b95 100644 --- a/web/messages/it/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/it/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Gestione dei lavori", - "intro": "Il menu scheduler (Script TUI) e la scheda Monitor Backups espongono le stesse azioni su qualsiasi lavoro.", + "intro": "Il menu scheduler nella TUI degli script (Backup scheduler and retention) offre Run now, Enable / Disable e Delete, oltre a un elenco dei lavori con lo stato dell'ultima esecuzione. Modifica e Visualizza log sono disponibili solo nella scheda Monitor Backups.", "rows": [ { "action": "Esegui ora", @@ -112,7 +112,7 @@ "detail": "Nuova modalità: systemctl enable/disable --now il timer. Modalità di aggancio: cambia il flag ENABLED nel job env — lo script gancio lo onora alla prossima esecuzione PVE." }, { - "action": "Modifica", + "action": "Modifica (solo Monitor)", "detail": "Riapre le richieste di destinazione, pianificazione, profilo e ritenzione e riscrive i file di lavoro. Conserva l'ID del lavoro." }, { @@ -120,7 +120,7 @@ "detail": "Rimuove il job env, il file dei percorsi, il timer + servizio systemd (Nuova modalità), e disabilita il binding del gancio (Modalità allegato). Non tocca archivi già sulla destinazione." }, { - "action": "Visualizza log", + "action": "Visualizza log (solo Monitor)", "detail": "Mostra in tempo reale /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log: un file di registro per esecuzione. Lo script di esecuzione emette anche una riga di stato compatta a journald sotto il servizio systemd." } ] diff --git a/web/messages/pt/docs/backup-restore/creating-backups.json b/web/messages/pt/docs/backup-restore/creating-backups.json index 83858111..21e4eda6 100644 --- a/web/messages/pt/docs/backup-restore/creating-backups.json +++ b/web/messages/pt/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Fluxo baseado em diálogo, SSH-friendly. O menu principal apresenta as seis opções diretamente. Utiliza backup_menu em backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Fluxo baseado em diálogo, SSH-friendly. A entrada do menu principal abre Host Config Backup / Restore; Backup host configuration leva às seis opções. Utiliza backup_menu em backup_host.sh." }, { "entry": "ProxMenux Monitor (UI Web)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Perfil padrão vs personalizado", "defaultTitle": "Perfil padrão", - "defaultBody": "O perfil padrão é a lista com curadoria de hb_default_profile_paths (documentada em Como funciona sob Categorias de caminho) além de cada entrada no arquivo de extras persistente /usr/local/share/proxmenux/backup-extra-paths.txt. O usuário confirma as opções de destino e criptografia e o backup prossegue sem mais seleção de caminho.", + "defaultBody": "O perfil padrão é a lista curada de hb_default_profile_paths (documentada em How it works, em Path categories) mais cada entrada do arquivo persistente de extras /usr/local/share/proxmenux/backup-extra-paths.txt. O usuário escolhe o destino e as opções de criptografia e o backup prossegue sem mais seleção de caminhos.", "customTitle": "Perfil personalizado", "customBody": "O perfil personalizado abre uma lista com todos os caminhos do perfil padrão (desmarcados) e todos os extras persistentes (pré-marcados, com o prefixo [+]). O usuário marca os caminhos para esta execução e pode pressionar Adicionar caminho personalizado para incluir um novo caminho absoluto. Todo caminho adicionado durante esse processo é salvo em backup-extra-paths.txt, para que os próximos backups o incluam automaticamente. Desmarcar um extra persistente o exclui apenas desta execução, sem removê-lo do arquivo — a remoção é feita pela ação separada Gerenciar caminhos personalizados, fora do fluxo de backup.", "customPickerAlt": "Lista de verificação de perfil personalizada que mostra os caminhos de perfil padrão (desmarcados) e extras persistentes (pré-marcados com um prefixo [+]), além de botões para adicionar um novo caminho ou confirmar a seleção.", @@ -124,7 +124,7 @@ }, "included": { "heading": "O que entra e o que fica fora", - "intro": "Cada caminho no perfil resolvido (padrão + extras persistentes + seleção de modo personalizado) é copiado com rsync -aAXH --numeric-ids. Uma lista de exclusão compartilhada aplica-se a cada caminho, e dois diretórios carregam exclusões adicionais específicas do caminho.", + "intro": "Cada caminho no perfil resolvido (padrão + extras persistentes + seleção de modo personalizado) é copiado com rsync -aAXH --numeric-ids. Não há lista de exclusão global; alguns diretórios têm exclusões específicas do caminho.", "rootTitle": "Exclusões /root/", "rootBody": "/root/ faz parte do perfil padrão para incluir os scripts e a configuração do usuário no arquivo. Os subcaminhos voláteis são excluídos:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER — não no perfil padrão. Adicione-o como um caminho personalizado quando um sistema carrega diretórios domésticos do usuário que devem sobreviver a uma restauração." ], "customPathsTitle": "Como os caminhos personalizados são tratados", - "customPathsBody": "Um caminho personalizado adicionado inline em modo Personalizado ou persistido em backup-extra-paths.txt passa pelo mesmo pipeline rsync como caminhos de perfil padrão. Exclusões globais aplicam-se. Se o caminho personalizado estiver sob /root/ ou /usr/local/share/proxmenux/, as exclusões específicas do caminho acima ainda se aplicam. Cada caminho arquivado — padrão ou personalizado — é gravado em metadata/paths_archived.txt. Caminhos que não existem na fonte são gravados em metadata/missing_paths.txt sem parar o backup." + "customPathsBody": "Um caminho personalizado adicionado inline em modo Personalizado ou persistido em backup-extra-paths.txt passa pelo mesmo pipeline rsync dos caminhos de perfil padrão. Se o caminho personalizado estiver sob /root/ ou /usr/local/share/proxmenux/, as exclusões específicas do caminho acima ainda se aplicam. Cada caminho arquivado — padrão ou personalizado — é gravado em metadata/selected_paths.txt. Caminhos que não existem na fonte são gravados em metadata/missing_paths.txt sem parar o backup, e os caminhos cuja cópia falha são gravados em metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Estrutura do arquivo", "intro": "O diretório de preparação temporária produzido por cada infraestrutura segue o mesmo layout, independentemente do destino. O tarball, PBS .pxar ou arquivo Borg armazena esta árvore sem alterações.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Resumo da confirmação", - "body": "Antes da infra- estrutura escrever qualquer coisa para o destino, o ProxMenux mostra uma janela sumária com o nome do destino, ID de backup ou arquivo, estado de criptografia e a lista de caminhos copiados. Cancelar aqui aborta o backup de forma limpa — o diretório de preparação temporária é removido pelo gancho trap definido na função de infraestrutura e nenhum dado parcial atinge o destino." + "body": "Antes de a infraestrutura escrever qualquer coisa no destino, o ProxMenux imprime no terminal um resumo com o destino, o ID de backup ou nome do arquivo, o estado de criptografia e a lista de caminhos copiados. Neste ponto não há etapa de confirmar ou cancelar; a cópia começa logo em seguida. Se o backup falhar ou for interrompido, o diretório de preparação temporária é removido pelo gancho trap definido na função de infraestrutura e nenhum dado parcial atinge o destino." }, "writing": { "heading": "Gravando para o destino", diff --git a/web/messages/pt/docs/backup-restore/destinations/local.json b/web/messages/pt/docs/backup-restore/destinations/local.json index 01c392f8..3951f3a3 100644 --- a/web/messages/pt/docs/backup-restore/destinations/local.json +++ b/web/messages/pt/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Configurando o diretório alvo", - "intro": "O destino local é um único diretório de destino salvo de forma persistente — não uma lista. ProxMenux armazena a escolha do operador em /usr/local/share/proxmenux/local-target.conf e lê essa escolha em cada backup. Quando nenhum alvo foi configurado, o HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump padrão é usado (o mesmo diretório que o Proxmox usa para suas próprias saídas vzdump). O alvo está configurado a partir de Configure destinos de backup → Destinos locais:", + "intro": "O destino local é um único diretório de destino salvo de forma persistente — não uma lista. ProxMenux armazena a escolha do operador em /usr/local/share/proxmenux/local-target.conf e lê essa escolha em cada backup. Quando nenhum alvo foi configurado, o HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump padrão é usado (o mesmo diretório que o Proxmox usa para suas próprias saídas vzdump). O alvo é configurado a partir de Configure backup destinations → Local archive targets → Manage local backup target:", "options": [ "Use o padrão (/var/lib/vz/dump). O armazenamento local Proxmox. Presente em cada instalação do Proxmox; o arquivo fica ao lado das saídas vzdump e é captado automaticamente pela aba Backups do Monitor.", - "Insira um caminho personalizado. Qualquer caminho absoluto do sistema de arquivos pode ser usado: uma montagem NFS, uma partilha SMB montada via fstab, um conjunto de dados dedicado ZFS, um segundo disco interno. ProxMenux valida que o caminho existe e é um diretório antes de persisti-lo.", - "Escolha uma unidade USB. Abre o submenu USB (abaixo), que detecta dispositivos removíveis e oferece para montar ou formatar um." + "Use um caminho personalizado. Qualquer caminho absoluto do sistema de arquivos pode ser usado: uma montagem NFS, uma partilha SMB montada via fstab, um conjunto de dados dedicado ZFS, um segundo disco interno. ProxMenux valida que o caminho existe e é um diretório antes de persisti-lo.", + "Use um disco USB. Abre o submenu USB (abaixo), que detecta dispositivos removíveis e oferece para montar ou formatar um." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "desmontado", "shown": "Tamanho · etiqueta · [fstype] · (não montado — será montado)", - "action": "Um sistema de ficheiros está presente mas não está montado. Na confirmação, o ProxMenux executa o hb_mount_usb_partition: cria o /mnt/backup-LABEL (ou um caminho baseado em UUID, se não houver rótulo), monta a partição e persiste o ponto de montagem como alvo local." + "action": "Um sistema de ficheiros está presente mas não está montado. Na confirmação, o ProxMenux executa o hb_mount_usb_partition: cria o /mnt/proxmenux-backup-LABEL (UUID ou nome do dispositivo, se não houver rótulo), monta a partição e persiste o ponto de montagem como alvo local." }, { "state": "vazia", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "O arquivo auxiliar JSON", - "intro": "Cada backup local bem sucedido produz um arquivo companheiro: HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, escrito ao lado do arquivo por hb_write_archive_sidecar. Este pequeno arquivo JSON permite que o ProxMenux Monitor identifique o arquivo como um backup de host ProxMenux mesmo que mais tarde seja movido, renomeado ou arquivado em outro lugar.", + "intro": "Cada backup local bem sucedido produz um arquivo companheiro: hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, escrito ao lado do arquivo por hb_write_archive_sidecar. Este pequeno arquivo JSON permite que o ProxMenux Monitor identifique o arquivo como um backup de host ProxMenux mesmo que mais tarde seja movido, renomeado ou arquivado em outro lugar.", "contentTitle": "Conteúdo do sidecar", "contentBody": "O sidecar armazena a versão do esquema, se o backup veio de uma execução interativa ou de uma tarefa agendada (kind), o ID do trabalho para as execuções agendadas, o modo de perfil usado (default ou custom), o nome de máquina de origem, o nome de base do arquivo original, um timestamp de criação ISO-8601 e o tamanho do arquivo em bytes.", "whyBody": "A aba Backups do Monitor procura arquivos auxiliares *.proxmenux.json nos diretórios locais configurados, e não arquivos *.tar.zst, pois um .tar.zst sem arquivo auxiliar pode não ser um backup ProxMenux. A busca é rápida (os arquivos JSON são pequenos) e a associação permanece válida após renomear o arquivo, desde que o auxiliar seja renomeado de forma correspondente." diff --git a/web/messages/pt/docs/backup-restore/destinations/pbs.json b/web/messages/pt/docs/backup-restore/destinations/pbs.json index 2a36cac8..f972477c 100644 --- a/web/messages/pt/docs/backup-restore/destinations/pbs.json +++ b/web/messages/pt/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "Configuração manual do ProxMenux", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Adicionado de Configure destinos de backup → destinos de PBS → Adicione PBS. Pede um nome, nome de usuário (root@pam ou user@pbs!token), host ou IP, datastore e senha. A senha re-prompts na entrada vazia — uma gravação vazia persistiria silenciosamente e cada backup subsequente falharia com um erro de autenticação opaco. Este caminho é usado quando o PBS alvo não é registrado como armazenamento Proxmox." + "content": "Adicionado de Configure backup destinations → Proxmox Backup Server (PBS) destinations → + Add new PBS manually. Pede um nome, nome de usuário (root@pam ou user@pbs!token), host ou IP, datastore e senha. A senha re-prompts na entrada vazia — uma gravação vazia persistiria silenciosamente e cada backup subsequente falharia com um erro de autenticação opaco. Este caminho é usado quando o PBS alvo não é registrado como armazenamento Proxmox." } ], "menuTitle": "Menu de seleção", diff --git a/web/messages/pt/docs/backup-restore/how-it-works.json b/web/messages/pt/docs/backup-restore/how-it-works.json index 681902e0..0f000322 100644 --- a/web/messages/pt/docs/backup-restore/how-it-works.json +++ b/web/messages/pt/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Disposição do arquivo", "intro": "Cada arquivo segue o mesmo layout de árvore, independentemente do destino. O subdiretório metadata/ contém as cargas estruturadas; o subdiretório rootfs/ contém a cópia do sistema de arquivos.", "treeCaption": "O diretório de preparação criado durante o backup. Todos os destinos recebem a mesma árvore no formato nativo: tar para backups locais, blocos PBS para PBS e segmentos Borg para Borg.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "A carga útil do rootfs", @@ -176,7 +176,7 @@ "stage": "3", "name": "Preparações pendentes", "reads": "rootfs/ (reboot + caminhos perigosos)", - "action": "_rs_prepare_pending_restore prepara os caminhos de risco em /var/lib/proxmenux/pending-restore/, grava plan.env, apply-on-boot.list e rs-skip-paths.txt e ativa proxmenux-restore-onboot.service para a próxima inicialização." + "action": "_rs_prepare_pending_restore prepara os caminhos de risco em /var/lib/proxmenux/restore-pending/<restore_id>/ (vinculado como current), grava plan.env, apply-on-boot.list e rs-skip-paths.txt e ativa proxmenux-restore-onboot.service para a próxima inicialização." }, { "stage": "3b", diff --git a/web/messages/pt/docs/backup-restore/index.json b/web/messages/pt/docs/backup-restore/index.json index 950b34e2..0b8cbbb5 100644 --- a/web/messages/pt/docs/backup-restore/index.json +++ b/web/messages/pt/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Duas interfaces, um back-end", "intro": "Cada etapa do fluxo de trabalho de backup e restauração está disponível em dois pontos de entrada. Ambos chamam a mesma biblioteca shell, produzem arquivos idênticos e leem o mesmo registro de tarefas.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "menu → Utilitários →\nBackup/restauração de host\n\nFluxo baseado em diálogo,\nSSH amigável, programável\npara uso não supervisionado.", + "cliDetail": "menu →\nBackup/restauração de host\n\nFluxo baseado em diálogo,\nSSH amigável, programável\npara uso não supervisionado.", "webLabel": "ProxMenux Monitor (Web UI)", "webDetail": "Aba Backups na\ninterface web do Monitor.\n\nRestauração com um clique,\nacompanhamento dos logs ao vivo,\nintegração com notificações e o\nvisualizador de diferenças da reversão." }, diff --git a/web/messages/pt/docs/backup-restore/restoring.json b/web/messages/pt/docs/backup-restore/restoring.json index 44ab6673..49194de1 100644 --- a/web/messages/pt/docs/backup-restore/restoring.json +++ b/web/messages/pt/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "O fluxo de trabalho completo de restauração", "intro": "O pipeline completo da seleção de arquivos para uma máquina de trabalho restaurada. Cada etapa alimenta a seguinte; o estado escrito por fases anteriores é consumido por fases posteriores.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "A máquina de restauro pendente", - "intro": "Os caminhos classificados como reboot ou dangerous, e a hidratação escreve, são encenados para o próximo boot em vez de serem aplicados ao vivo. Isto é feito através de um pequeno conjunto de arquivos auto-suficientes sob /var/lib/proxmenux/pending-restore/:", + "intro": "Os caminhos classificados como reboot ou dangerous, e a hidratação escreve, são encenados para o próximo boot em vez de serem aplicados ao vivo. Isto é feito através de um pequeno conjunto de arquivos auto-suficientes sob /var/lib/proxmenux/restore-pending/<restore_id>/:", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "Os próprios arquivos encenados — os bytes exatos que serão estabelecidos. Mantido no mesmo sistema de arquivos que / para que o rsync on-boot é rápido e não depende de armazenamento externo ainda sendo acessível no arranque." } ], - "unitBody": "A unidade systemd proxmenux-restore-onboot.service é ativada ao fim da etapa interativa. Esse serviço executa uma vez no início do próximo boot, chama apply_pending_restore.sh e depois se desativa. A condição ConditionPathExists=/var/lib/proxmenux/pending-restore/state impede qualquer ação quando não há restauração pendente." + "unitBody": "A unidade systemd proxmenux-restore-onboot.service é ativada ao fim da etapa interativa. Esse serviço executa uma vez no início do próximo boot (antes da rede), chama apply_pending_restore.sh e depois se desativa. A unidade não tem condição de caminho: o próprio script termina quando /var/lib/proxmenux/restore-pending/current não existe, portanto em qualquer boot sem restauração pendente não faz nada. O serviço separado proxmenux-apply-cluster-postboot.service é controlado por ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending." }, "postbootDispatcher": { "heading": "O expedidor pós-boot — apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Onde ficam os logs", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Gravado na etapa interativa: resultados de compatibilidade, filtro de diferenças, plano de adaptação, saídas da aplicação em execução e da preparação pendente, instalação de pacotes." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Gravado na etapa interativa (pbs, borg ou local). As reinstalações de pacotes e as etapas de data-pool também registram em /var/log/proxmenux/restore-apt-*.log e restore-datapools-*.log." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Gravado por apply_pending_restore.sh no início do boot: carregamento de plan.env, processamento de apply-on-boot e filtro dos caminhos excluídos." }, { diff --git a/web/messages/pt/docs/backup-restore/scheduled-jobs.json b/web/messages/pt/docs/backup-restore/scheduled-jobs.json index 44c417e0..10dd4ed9 100644 --- a/web/messages/pt/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/pt/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Gestão de tarefas", - "intro": "O menu de agendamento (Scripts TUI) e a aba Monitor Backups expõem as mesmas ações em qualquer trabalho.", + "intro": "O menu de agendamento no Scripts TUI (Backup scheduler and retention) oferece Run now, Enable / Disable e Delete, além de uma lista de trabalhos com o estado da última execução. Edit e View log só estão disponíveis na aba Monitor Backups.", "rows": [ { "action": "Executar agora", @@ -112,7 +112,7 @@ "detail": "Novo modo: systemctl enable/disable --now o temporizador. Modo Anexar: altera o sinalizador ENABLED no env de trabalho — o script gancho honra-o na próxima execução PVE." }, { - "action": "Editar", + "action": "Editar (apenas no Monitor)", "detail": "Abre novamente o destino, agenda, perfil e avisos de retenção e reescreve os arquivos de trabalho. Preserva a identificação do trabalho." }, { @@ -120,7 +120,7 @@ "detail": "Remove o env do trabalho, o arquivo de caminhos, o temporizador e o serviço systemd (modo novo) e desativa a associação ao hook (modo de anexação). Não altera os arquivos já existentes no destino." }, { - "action": "Ver registo", + "action": "Ver registo (apenas no Monitor)", "detail": "Mostra em tempo real /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log — um arquivo de log por execução. O executor também emite uma linha de status compacta para journald no serviço systemd." } ] diff --git a/web/messages/sk/docs/backup-restore/creating-backups.json b/web/messages/sk/docs/backup-restore/creating-backups.json index 05be844a..b9751e72 100644 --- a/web/messages/sk/docs/backup-restore/creating-backups.json +++ b/web/messages/sk/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Dialógový tok, SSH-priateľský. Hlavné menu predstavuje šesť možností priamo. Používa backup_menu v backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Dialógový tok, SSH-priateľský. Položka hlavného menu otvára Host Config Backup / Restore; Backup host configuration vedie k šiestim možnostiam. Používa backup_menu v backup_host.sh." }, { "entry": "ProxMenux Monitor (webové rozhranie)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Štandardný vs vlastný profil", "defaultTitle": "Predvolený profil", - "defaultBody": "Predvolený profil je pripravený zoznam z hb_default_profile_paths (opísaný v časti Ako to funguje pod nadpisom Kategórie ciest) spolu so všetkými položkami zo súboru trvalých doplnkov /usr/local/share/proxmenux/backup-extra-paths.txt. Používateľ potvrdí cieľ a možnosti šifrovania a záloha pokračuje bez ďalšieho výberu ciest.", + "defaultBody": "Predvolený profil je pripravený zoznam z hb_default_profile_paths (opísaný v časti Ako to funguje pod nadpisom Kategórie ciest) spolu so všetkými položkami zo súboru trvalých doplnkov /usr/local/share/proxmenux/backup-extra-paths.txt. Používateľ vyberie cieľ a možnosti šifrovania a záloha pokračuje bez ďalšieho výberu ciest.", "customTitle": "Vlastný profil", "customBody": "Vlastný profil otvorí zoznam so všetkými cestami predvoleného profilu (nezaškrtnuté) a všetkými trvalými doplnkami (vopred zaškrtnuté, s predponou [+]). Používateľ zaškrtne cesty pre toto spustenie a cez Pridať vlastnú cestu môže doplniť novú absolútnu cestu. Takto pridaná cesta sa uloží do backup-extra-paths.txt, aby ju budúce zálohy zahrnuli automaticky bez opätovného pridávania. Odškrtnutie trvalého doplnku ho vynechá len pri tomto spustení, ale neodstráni ho zo súboru — na odstránenie slúži samostatná akcia Spravovať vlastné cesty mimo postupu zálohovania.", "customPickerAlt": "Vlastný kontrolný zoznam profilu zobrazujúci predvolené cesty profilu (nezaškrtnuté) a trvalé doplnky (vopred zaškrtnuté s predponou [+]) plus tlačidlá na pridanie novej cesty alebo potvrdenie výberu.", @@ -124,7 +124,7 @@ }, "included": { "heading": "Čo ide dnu a čo zostane vonku", - "intro": "Každá cesta v určenom profile (predvolené + trvalé doplnky + výber vo vlastnom režime) je skopírovaná s rsync -aAXH --numeric-ids. Spoločný zoznam vylúčení sa vzťahuje na každú cestu a dva adresáre majú dodatočné výnimky špecifické pre jednotlivé trasy.", + "intro": "Každá cesta v určenom profile (predvolené + trvalé doplnky + výber vo vlastnom režime) je skopírovaná s rsync -aAXH --numeric-ids. Neexistuje globálny zoznam vylúčení; niekoľko adresárov má vylúčenia špecifické pre danú cestu.", "rootTitle": "Výnimky /root/", "rootBody": "/root/ je súčasťou predvoleného profilu, aby sa do archívu zahrnuli používateľské skripty a konfigurácia. Dočasné podcesty sa vynechajú:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER Nie v štandardnom profile. Pridať ako vlastnú cestu, keď systém nesie užívateľské domovské adresáre, ktoré musia prežiť obnovenie." ], "customPathsTitle": "Ako sa spracúvajú vlastné cesty", - "customPathsBody": "Vlastná cesta pridaná priamo vo vlastnom režime alebo uložená v backup-extra-paths.txt prechádza rovnakým postupom rsync ako cesty predvoleného profilu. Platia globálne vylúčenia. Ak sa vlastná cesta nachádza pod /root/ alebo /usr/local/share/proxmenux/, naďalej platia aj uvedené vylúčenia pre konkrétnu cestu. Každá archivovaná cesta — predvolená aj vlastná — sa zaznamená v metadata/paths_archived.txt. Cesty, ktoré v zdroji neexistujú, sa zapíšu do metadata/missing_paths.txt bez zastavenia zálohy." + "customPathsBody": "Vlastná cesta pridaná priamo vo vlastnom režime alebo uložená v backup-extra-paths.txt prechádza rovnakým postupom rsync ako cesty predvoleného profilu. Ak sa vlastná cesta nachádza pod /root/ alebo /usr/local/share/proxmenux/, naďalej platia aj uvedené vylúčenia pre konkrétnu cestu. Každá archivovaná cesta — predvolená aj vlastná — sa zaznamená v metadata/selected_paths.txt. Cesty, ktoré v zdroji neexistujú, sa zapíšu do metadata/missing_paths.txt bez zastavenia zálohy a cesty, ktoré sa nepodarilo skopírovať, do metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Štruktúra archívu", "intro": "Dočasný prípravný adresár vytvorený každým backendom má rovnaké usporiadanie bez ohľadu na miesto určenia. Archív tarball, PBS .pxar alebo Borg uchováva tento strom doslovne.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Zhrnutie potvrdenia", - "body": "Pred zápisom akýchkoľvek údajov do cieľa ProxMenux zobrazí súhrnný dialóg s cieľom, ID zálohy alebo názvom archívu, stavom šifrovania a zoznamom kopírovaných ciest. Zrušenie v tomto bode zálohovanie bezpečne ukončí — obslužný mechanizmus trap nastavený vo funkcii backendu odstráni dočasný prípravný adresár a do cieľa sa nedostanú žiadne čiastočné údaje." + "body": "Pred zápisom akýchkoľvek údajov do cieľa ProxMenux vypíše v termináli súhrn s cieľom, ID zálohy alebo názvom archívu, stavom šifrovania a zoznamom kopírovaných ciest. V tomto bode nie je krok potvrdenia ani zrušenia; kopírovanie sa začne hneď potom. Ak záloha zlyhá alebo sa preruší, obslužný mechanizmus trap nastavený vo funkcii backendu odstráni dočasný prípravný adresár a do cieľa sa nedostanú žiadne čiastočné údaje." }, "writing": { "heading": "Písanie na miesto určenia", diff --git a/web/messages/sk/docs/backup-restore/destinations/local.json b/web/messages/sk/docs/backup-restore/destinations/local.json index 14df7a05..b8487647 100644 --- a/web/messages/sk/docs/backup-restore/destinations/local.json +++ b/web/messages/sk/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Nastavenie cieľového adresára", - "intro": "Miestny cieľ je jeden trvalý cieľový adresár — nie zoznam. ProxMenux ukladá voľbu operátora na /usr/local/share/proxmenux/local-target.conf a číta ju pri každej zálohe. Ak nie je nakonfigurovaný žiadny cieľ, použije sa predvolený HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump (rovnaký adresár, ktorý Proxmox používa pre svoje vlastné výstupy vzdump). Cieľ sa konfiguruje z Konfigurovať ciele zálohovania → Lokálne ciele:", + "intro": "Miestny cieľ je jeden trvalý cieľový adresár — nie zoznam. ProxMenux ukladá voľbu operátora na /usr/local/share/proxmenux/local-target.conf a číta ju pri každej zálohe. Ak nie je nakonfigurovaný žiadny cieľ, použije sa predvolený HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump (rovnaký adresár, ktorý Proxmox používa pre svoje vlastné výstupy vzdump). Cieľ sa konfiguruje z Konfigurovať ciele zálohovania → Lokálne archívne ciele → Spravovať lokálny cieľ zálohy:", "options": [ "Použiť predvolené (/var/lib/vz/dump). Lokálne úložisko Proxmox. Prítomný pri každej inštalácii Proxmox; archív sa nachádza vedľa výstupov vzdump a automaticky ho preberá karta Zálohy monitora.", - "Zadajte vlastnú cestu. Môžete použiť akúkoľvek absolútnu cestu súborového systému: pripojenie NFS, zdieľanie SMB pripojené cez fstab, vyhradený súbor údajov ZFS, druhý interný disk. ProxMenux overí, že cesta existuje a je adresárom, pred jej uložením.", - "Vyberte jednotku USB. Otvorí podponuku USB (nižšie), ktorá detekuje vymeniteľné zariadenia a ponúka pripojenie alebo formátovanie." + "Použite vlastnú cestu. Môžete použiť akúkoľvek absolútnu cestu súborového systému: pripojenie NFS, zdieľanie SMB pripojené cez fstab, vyhradený súbor údajov ZFS, druhý interný disk. ProxMenux overí, že cesta existuje a je adresárom, pred jej uložením.", + "Použite disk USB. Otvorí podponuku USB (nižšie), ktorá detekuje vymeniteľné zariadenia a ponúka pripojenie alebo formátovanie." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "odmontované", "shown": "Veľkosť · menovka · [fstype] · (nepripojený — bude pripojený)", - "action": "Súborový systém je prítomný, ale nie je namontovaný. Po potvrdení, ProxMenux spustí hb_mount_usb_partition: vytvorí /mnt/backup-LABEL (alebo cestu založenú na UUID, ak nie je označenie), pripojí partíciu a uloží bod pripojenia ako miestny cieľ." + "action": "Súborový systém je prítomný, ale nie je namontovaný. Po potvrdení, ProxMenux spustí hb_mount_usb_partition: vytvorí /mnt/proxmenux-backup-LABEL (UUID alebo názov zariadenia, ak nie je označenie), pripojí partíciu a uloží bod pripojenia ako miestny cieľ." }, { "state": "prázdny", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "Sprievodný súbor JSON", - "intro": "Každá úspešná lokálna záloha produkuje sesterský súbor: HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, zapísaný vedľa archívu funkciou hb_write_archive_sidecar. Tento malý súbor JSON umožňuje ProxMenux Monitor identifikovať archív ako zálohu ProxMenux hostiteľa, aj keď je neskôr presunutý, premenovaný alebo archivovaný inde.", + "intro": "Každá úspešná lokálna záloha produkuje sesterský súbor: hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, zapísaný vedľa archívu funkciou hb_write_archive_sidecar. Tento malý súbor JSON umožňuje ProxMenux Monitor identifikovať archív ako zálohu ProxMenux hostiteľa, aj keď je neskôr presunutý, premenovaný alebo archivovaný inde.", "contentTitle": "Obsah sprievodného súboru", "contentBody": "Sprievodný súbor obsahuje verziu schémy, údaj o tom, či záloha vznikla interaktívne alebo plánovanou úlohou (kind), ID úlohy pri plánovaných spusteniach, použitý režim profilu (default alebo custom), názov zdrojového hostiteľa, pôvodný názov súboru archívu, časovú pečiatku vytvorenia ISO-8601 a veľkosť archívu v bajtoch.", "whyBody": "Karta Backups v Monitore prehľadáva nakonfigurované lokálne adresáre a hľadá sprievodné súbory *.proxmenux.json, nie súbory *.tar.zst, pretože .tar.zst bez sprievodného súboru nemusí byť zálohou ProxMenux. Hľadanie je rýchle (súbory JSON sú malé) a párovanie zostane platné aj po premenovaní archívu, ak sa zodpovedajúco premenuje aj sprievodný súbor." diff --git a/web/messages/sk/docs/backup-restore/destinations/pbs.json b/web/messages/sk/docs/backup-restore/destinations/pbs.json index 01ab2c8f..b6b8cecb 100644 --- a/web/messages/sk/docs/backup-restore/destinations/pbs.json +++ b/web/messages/sk/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "ProxMenux manuálna konfigurácia", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Pridáva sa cez Nastaviť ciele záloh → Ciele PBS → Pridať PBS. Zadáva sa názov, používateľské meno (root@pam alebo user@pbs!token), hostiteľ alebo IP adresa, dátové úložisko a heslo. Pri prázdnom hesle sa výzva zopakuje: inak by sa prázdna hodnota potichu uložila a každá ďalšia záloha by zlyhala s nejasnou chybou overenia. Táto možnosť slúži pre PBS, ktorý nie je zaregistrovaný ako úložisko Proxmoxu." + "content": "Pridáva sa cez Nastaviť ciele záloh → Ciele Proxmox Backup Server (PBS) → + Pridať nový PBS ručne. Zadáva sa názov, používateľské meno (root@pam alebo user@pbs!token), hostiteľ alebo IP adresa, dátové úložisko a heslo. Pri prázdnom hesle sa výzva zopakuje: inak by sa prázdna hodnota potichu uložila a každá ďalšia záloha by zlyhala s nejasnou chybou overenia. Táto možnosť slúži pre PBS, ktorý nie je zaregistrovaný ako úložisko Proxmoxu." } ], "menuTitle": "Výberové menu", diff --git a/web/messages/sk/docs/backup-restore/how-it-works.json b/web/messages/sk/docs/backup-restore/how-it-works.json index a3e816b8..c90f3a8c 100644 --- a/web/messages/sk/docs/backup-restore/how-it-works.json +++ b/web/messages/sk/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Rozloženie archívu", "intro": "Každý archív sleduje rovnaké rozloženie stromov bez ohľadu na cieľ. Podadresár metadata/ má štruktúrované užitočné zaťaženie; podadresár rootfs/ má kópiu súborového systému.", "treeCaption": "Prípravný adresár vytvorený pri zálohe. Každý cieľ dostane rovnaký strom vo svojom formáte: tar pri lokálnom cieli, bloky PBS pri PBS a segmenty Borg pri Borgu.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "Časť rootfs", @@ -176,7 +176,7 @@ "stage": "3", "name": "Príprava odložených zmien", "reads": "rootfs/ (reboot + nebezpečné cesty)", - "action": "_rs_prepare_pending_restore pripraví rizikové cesty v /var/lib/proxmenux/pending-restore/, zapíše plan.env, apply-on-boot.list a rs-skip-paths.txt a povolí spustenie proxmenux-restore-onboot.service pri ďalšom štarte." + "action": "_rs_prepare_pending_restore pripraví rizikové cesty v /var/lib/proxmenux/restore-pending/<restore_id>/ (prepojené ako current), zapíše plan.env, apply-on-boot.list a rs-skip-paths.txt a povolí spustenie proxmenux-restore-onboot.service pri ďalšom štarte." }, { "stage": "3b", diff --git a/web/messages/sk/docs/backup-restore/index.json b/web/messages/sk/docs/backup-restore/index.json index 0ec15d1c..a579c20d 100644 --- a/web/messages/sk/docs/backup-restore/index.json +++ b/web/messages/sk/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Dve rozhrania, jeden backend", "intro": "Každý krok pracovného postupu zálohovania a obnovy je dostupný z dvoch vstupných bodov. Oba volajú rovnakú knižnicu shellu, vytvárajú identické archívy a čítajú rovnaký register úloh.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "menu → Nástroje →\nZálohovanie / obnovenie hostiteľa\n\nDialógový tok,\nSSH priateľský, skriptovateľný\nna použitie bez dozoru.", + "cliDetail": "menu →\nHost Backup & Restore\n\nDialógový tok,\nSSH priateľský, skriptovateľný\nna použitie bez dozoru.", "webLabel": "ProxMenux Monitor (Web UI)", "webDetail": "Karta Backups vo\nwebovom rozhraní Monitor.\n\nObnova jedným kliknutím,\npriebežný výpis záznamov,\nprepojenie s upozorneniami\na zobrazením rozdielov rollbacku." }, diff --git a/web/messages/sk/docs/backup-restore/restoring.json b/web/messages/sk/docs/backup-restore/restoring.json index 8c5e01d0..8aab8ff9 100644 --- a/web/messages/sk/docs/backup-restore/restoring.json +++ b/web/messages/sk/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "Úplné obnovenie pracovného postupu", "intro": "Celý postup od výberu archívu po obnoveného funkčného hostiteľa. Každá fáza pripraví vstup ďalšej: stav zapísaný skoršími fázami používajú neskoršie.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "Mechanizmus odloženej obnovy", - "intro": "Cesty klasifikované ako reboot alebo dangerous, a hydratačné zápisy, sú fázované pre ďalšie boot miesto aplikácie naživo. To sa vykonáva prostredníctvom malého, samostatného súboru súborov v /var/lib/proxmenux/pending-restore/:", + "intro": "Cesty klasifikované ako reboot alebo dangerous, a hydratačné zápisy, sú fázované pre ďalšie boot miesto aplikácie naživo. To sa vykonáva prostredníctvom malého, samostatného súboru súborov v /var/lib/proxmenux/restore-pending/<restore_id>/:", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "Samotné pripravené súbory – presné bajty, ktoré sa zapíšu. Zostávajú na rovnakom súborovom systéme ako /, aby bol rsync pri štarte rýchly a nezávisel od dostupnosti externého úložiska počas štartu." } ], - "unitBody": "Jednotka systemd proxmenux-restore-onboot.service sa povolí na konci interaktívnej fázy. Táto jednorazová služba sa spustí na začiatku ďalšieho štartu, zavolá apply_pending_restore.sh a potom sa zakáže. Podmienka ConditionPathExists=/var/lib/proxmenux/pending-restore/state zabezpečí, že bez čakajúcej obnovy nevykoná nič." + "unitBody": "Jednotka systemd proxmenux-restore-onboot.service sa povolí na konci interaktívnej fázy. Táto jednorazová služba sa spustí na začiatku ďalšieho štartu (pred sieťou), zavolá apply_pending_restore.sh a potom sa zakáže. Jednotka nemá podmienku na cestu: samotný skript skončí, ak /var/lib/proxmenux/restore-pending/current neexistuje, takže pri štarte bez čakajúcej obnovy nevykoná nič. Samostatná služba proxmenux-apply-cluster-postboot.service je podmienená ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending." }, "postbootDispatcher": { "heading": "Post-boot dispečer apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Kde záznamy žijú", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Zapisuje sa v interaktívnej fáze: výsledky kompatibility, filter rozdielov, plán prispôsobenia, výstup použitia za behu a prípravy odložených zmien, inštalácia balíkov." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Zapisuje sa v interaktívnej fáze (pbs, borg alebo local). Preinštalovanie balíkov a kroky s dátovými poolmi sa zapisujú aj do /var/log/proxmenux/restore-apt-*.log a restore-datapools-*.log." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Zapisuje ho apply_pending_restore.sh na začiatku štartu: načítanie plan.env, spracovanie apply-on-boot a filtrovanie vylúčených ciest." }, { diff --git a/web/messages/sk/docs/backup-restore/scheduled-jobs.json b/web/messages/sk/docs/backup-restore/scheduled-jobs.json index 03e011e3..5f63f1ae 100644 --- a/web/messages/sk/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/sk/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Správa úloh", - "intro": "Menu rozvrhu (Scripts TUI) a záložka Monitor Backup odhaľujú rovnaké akcie na akejkoľvek práci.", + "intro": "Menu plánovača v Scripts TUI (Backup scheduler and retention) ponúka Run now, Enable / Disable a Delete, plus zoznam úloh so stavom posledného spustenia. Edit a View log sú dostupné iba na záložke Monitor Backups.", "rows": [ { "action": "Spustiť teraz", @@ -112,7 +112,7 @@ "detail": "Nový režim: časovač sa ovláda cez systemctl enable/disable --now. Režim pripojenia: zmení príznak ENABLED v súbore env úlohy — hook ho zohľadní pri ďalšom spustení PVE." }, { - "action": "Upraviť", + "action": "Upraviť (iba Monitor)", "detail": "Znovu otvorí destináciu, rozvrh, profil a retenčný postup a prepíše pracovné súbory. Zachováva ID práce." }, { @@ -120,7 +120,7 @@ "detail": "Odstráni súbor env úlohy, súbor ciest, časovač a službu systemd (nový režim) a vypne pripojenie k hooku (režim pripojenia). Existujúce archívy v cieli nemení." }, { - "action": "Zobraziť záznam", + "action": "Zobraziť záznam (iba Monitor)", "detail": "Priebežne zobrazuje /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log — jeden protokolový súbor na beh. Spúšťací skript tiež vydáva kompaktný stavový riadok na journald pod systemd služby." } ] diff --git a/web/messages/sv/docs/backup-restore/creating-backups.json b/web/messages/sv/docs/backup-restore/creating-backups.json index e9d8ef9f..e4030798 100644 --- a/web/messages/sv/docs/backup-restore/creating-backups.json +++ b/web/messages/sv/docs/backup-restore/creating-backups.json @@ -21,8 +21,8 @@ "rows": [ { "entry": "ProxMenux Scripts (TUI)", - "path": "menu → Utilities → Host Config Backup", - "detail": "Dialogbaserat flöde, SSH-vänligt. Huvudmenyn presenterar de sex alternativen direkt. Använder backup_menu i backup_host.sh." + "path": "menu → Host Backup & Restore → Backup host configuration", + "detail": "Dialogbaserat flöde, SSH-vänligt. Huvudmenyposten öppnar Host Config Backup / Restore; Backup host configuration leder till de sex alternativen. Använder backup_menu i backup_host.sh." }, { "entry": "ProxMenux Monitor (Webb UI)", @@ -83,7 +83,7 @@ "profiles": { "heading": "Standard vs anpassad profil", "defaultTitle": "Standardprofil", - "defaultBody": "Standardprofilen är den kurerade listan från hb_default_profile_paths (dokumenterad i Hur det fungerar under Sökvägskategorier) plus varje post i den filen med beständiga tillägg /usr/local/share/proxmenux/backup-extra-paths.txt. Användaren bekräftar destinationen och krypteringsalternativen och backupen fortsätter utan ytterligare sökvägsval.", + "defaultBody": "Standardprofilen är den kurerade listan från hb_default_profile_paths (dokumenterad i Hur det fungerar under Sökvägskategorier) plus varje post i den filen med beständiga tillägg /usr/local/share/proxmenux/backup-extra-paths.txt. Användaren väljer destination och krypteringsalternativ och backupen fortsätter utan ytterligare sökvägsval.", "customTitle": "Anpassad profil", "customBody": "Den anpassade profilen öppnar en checklista med alla sökvägar i standardprofilen (omarkerade) och alla beständiga tillägg (förmarkerade, med prefixet [+]). Användaren markerar sökvägarna för denna körning och kan trycka på Lägg till anpassad sökväg för att lägga till en ny absolut sökväg. Sökvägar som läggs till här sparas i backup-extra-paths.txt så att framtida säkerhetskopior tar med dem automatiskt. Att avmarkera ett beständigt tillägg utesluter det från denna körning men tar inte bort det ur filen — borttagning görs separat via Hantera anpassade sökvägar, utanför säkerhetskopieringsflödet.", "customPickerAlt": "Checklista för anpassad profil med standardprofilens sökvägar (omarkerade) och beständiga tillägg (förmarkerade med prefixet [+]), samt knappar för att lägga till en sökväg eller bekräfta valet.", @@ -124,7 +124,7 @@ }, "included": { "heading": "Vad går in och vad stannar ut", - "intro": "Varje sökväg i den fastställda profilen (standard + beständiga tillägg + val i anpassat läge) kopieras med rsync -aAXH --numeric-ids. En delad uteslutningslista gäller för varje sökväg, och två kataloger har ytterligare sökvägsspecifika uteslutningar.", + "intro": "Varje sökväg i den fastställda profilen (standard + beständiga tillägg + val i anpassat läge) kopieras med rsync -aAXH --numeric-ids. Det finns ingen global uteslutningslista; några kataloger har sökvägsspecifika uteslutningar.", "rootTitle": "/root/-uteslutningar", "rootBody": "/root/ ingår i standardprofilen så att användarens skript och konfiguration sparas i arkivet. Flyktiga undersökvägar utesluts:", "rootItems": [ @@ -153,16 +153,16 @@ "/home/USER - inte i standardprofilen. Lägg till det som en anpassad väg när ett system bär hemkataloger som måste överleva en återställning." ], "customPathsTitle": "Hur anpassade vägar hanteras", - "customPathsBody": "En anpassad väg som läggs till i anpassat läge eller kvarstår i backup-extra-paths.txt går igenom samma rsync-pipeline som standardprofilvägar. Globala uteslutningar gäller. Om den anpassade vägen råkar vara under /root/ eller /usr/local/share/proxmenux/ gäller fortfarande de vägspecifika uteslutningarna ovan. Varje arkiverad väg - standard eller anpassad - registreras i metadata/paths_archived.txt. Sökvägar som inte finns på källan registreras i metadata/missing_paths.txt utan att stoppa backupen." + "customPathsBody": "En anpassad väg som läggs till i anpassat läge eller kvarstår i backup-extra-paths.txt går igenom samma rsync-pipeline som standardprofilvägar. Om den anpassade vägen råkar vara under /root/ eller /usr/local/share/proxmenux/ gäller fortfarande de vägspecifika uteslutningarna ovan. Varje arkiverad väg - standard eller anpassad - registreras i metadata/selected_paths.txt. Sökvägar som inte finns på källan registreras i metadata/missing_paths.txt utan att stoppa backupen, och sökvägar som inte kan kopieras registreras i metadata/failed_paths.txt." }, "archiveStructure": { "heading": "Arkivstruktur", "intro": "Den tillfälliga katalog som varje backend skapar har samma struktur oavsett destination. Tar-arkivet, PBS-arkivet .pxar eller Borg-arkivet lagrar detta träd oförändrat.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs" }, "confirmation": { "heading": "Sammanfattning för bekräftelse", - "body": "Innan backend skriver något till destinationen visar ProxMenux en sammanfattande dialog med destinationen, backup-ID eller arkivnamn, krypteringstillstånd och listan över vägar som kopieras. Avbokning här avbryter backupen rent - staging katalogen tas bort av trap kroken på backend funktionen och ingen partiell data når destinationen." + "body": "Innan backend skriver något till destinationen skriver ProxMenux ut en sammanfattning i terminalen med destinationen, backup-ID eller arkivnamn, krypteringstillstånd och listan över vägar som kopieras. Det finns inget bekräftelse- eller avbrytssteg här; kopieringen startar direkt efter. Om backupen misslyckas eller avbryts tas staging katalogen bort av trap kroken på backend funktionen och ingen partiell data når destinationen." }, "writing": { "heading": "Skriva till destinationen", diff --git a/web/messages/sv/docs/backup-restore/destinations/local.json b/web/messages/sv/docs/backup-restore/destinations/local.json index 858d0b06..11901e40 100644 --- a/web/messages/sv/docs/backup-restore/destinations/local.json +++ b/web/messages/sv/docs/backup-restore/destinations/local.json @@ -18,11 +18,11 @@ }, "targetConfig": { "heading": "Konfigurera målkatalogen", - "intro": "Det lokala målet är en enda sparad målkatalog — inte en lista. ProxMenux sparar användarens val i /usr/local/share/proxmenux/local-target.conf och läser det vid varje säkerhetskopiering. Om inget mål har konfigurerats används standardvärdet HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump (samma katalog som Proxmox använder för sina egna vzdump-utdata). Målet konfigureras via Konfigurera säkerhetskopieringsmål → Lokala mål:", + "intro": "Det lokala målet är en enda sparad målkatalog — inte en lista. ProxMenux sparar användarens val i /usr/local/share/proxmenux/local-target.conf och läser det vid varje säkerhetskopiering. Om inget mål har konfigurerats används standardvärdet HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump (samma katalog som Proxmox använder för sina egna vzdump-utdata). Målet konfigureras via Konfigurera säkerhetskopieringsmål → Lokala arkivmål → Hantera lokalt säkerhetskopieringsmål:", "options": [ "Använd standard (/var/lib/vz/dump). Proxmox lokal lagring. Finns på varje Proxmox-installation; arkivet sitter bredvid vzdump-utdata och hämtas av fliken Monitor's Backups automatiskt.", - "Ange en anpassad sökväg. Alla absoluta filsystemsökvägar kan användas: en NFS-montering, en SMB-delning monterad via fstab, ett särskilt ZFS-dataset eller en andra intern disk. ProxMenux kontrollerar att sökvägen finns och är en katalog innan valet sparas.", - "Välj en USB-enhet. Öppnar USB-undermenyn (nedan), som upptäcker flyttbara enheter och erbjuder sig att montera eller formatera en." + "Använd en anpassad sökväg. Alla absoluta filsystemsökvägar kan användas: en NFS-montering, en SMB-delning monterad via fstab, ett särskilt ZFS-dataset eller en andra intern disk. ProxMenux kontrollerar att sökvägen finns och är en katalog innan valet sparas.", + "Använd en USB-disk. Öppnar USB-undermenyn (nedan), som upptäcker flyttbara enheter och erbjuder sig att montera eller formatera en." ] }, "usbFlow": { @@ -38,7 +38,7 @@ { "state": "ej monterad", "shown": "Storlek · etikett · [fstype] · (ej monterad — kommer att monteras)", - "action": "Ett filsystem är närvarande men inte monterat. På bekräftelse kör ProxMenux hb_mount_usb_partition: skapar /mnt/backup-LABEL (eller en UUID-baserad väg om det inte finns någon etikett), monterar partitionen och sparar monteringspunkten som det lokala målet." + "action": "Ett filsystem är närvarande men inte monterat. På bekräftelse kör ProxMenux hb_mount_usb_partition: skapar /mnt/proxmenux-backup-LABEL (UUID eller enhetsnamn om det inte finns någon etikett), monterar partitionen och sparar monteringspunkten som det lokala målet." }, { "state": "tom", @@ -63,7 +63,7 @@ }, "sidecar": { "heading": "JSON-sidofilen", - "intro": "Varje framgångsrik lokal backup producerar en följeslagare fil: HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, skriven bredvid arkivet av hb_write_archive_sidecar. Denna lilla JSON-fil låter ProxMenux Monitor identifiera arkivet som en ProxMenux-värdbackup även om det senare flyttas, bytas namn eller arkiveras någon annanstans.", + "intro": "Varje framgångsrik lokal backup producerar en följeslagare fil: hostcfg-HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json, skriven bredvid arkivet av hb_write_archive_sidecar. Denna lilla JSON-fil låter ProxMenux Monitor identifiera arkivet som en ProxMenux-värdbackup även om det senare flyttas, bytas namn eller arkiveras någon annanstans.", "contentTitle": "Sidofilens innehåll", "contentBody": "Sidofilen lagrar schemaversionen, om säkerhetskopian kom från en interaktiv körning eller ett schemalagt jobb (kind), jobb-ID för schemalagda körningar, det profilläge som används (default eller custom), källvärdnamnet, den ursprungliga arkivbasnamnet, en tidsstämpel för skapandet i ISO-8601-format och arkivstorleken i byte.", "whyBody": "Monitors Backups-flik söker igenom konfigurerade lokala kataloger efter *.proxmenux.json-sidofiler, inte efter *.tar.zst-filer, eftersom en .tar.zst utan sidofil kanske inte är en ProxMenux-säkerhetskopia. Sökningen är snabb (JSON-filer är små) och kopplingen fungerar även efter namnbyte om sidofilen får ett motsvarande nytt namn." diff --git a/web/messages/sv/docs/backup-restore/destinations/pbs.json b/web/messages/sv/docs/backup-restore/destinations/pbs.json index 70e5c074..471a5753 100644 --- a/web/messages/sv/docs/backup-restore/destinations/pbs.json +++ b/web/messages/sv/docs/backup-restore/destinations/pbs.json @@ -33,7 +33,7 @@ { "source": "ProxMenux manuell konfig", "path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt", - "content": "Läggs till via Konfigurera säkerhetskopieringsmål → PBS-mål → Lägg till PBS. Du anger namn, användarnamn (root@pam eller user@pbs!token), värd eller IP-adress, datalager och lösenord. Om lösenordet lämnas tomt visas frågan igen; annars skulle en tom uppgift sparas utan varning och alla senare säkerhetskopior misslyckas med ett otydligt autentiseringsfel. Detta används när PBS-målet inte är registrerat som Proxmox-lagring." + "content": "Läggs till via Konfigurera säkerhetskopieringsmål → Proxmox Backup Server (PBS)-mål → + Lägg till ny PBS manuellt. Du anger namn, användarnamn (root@pam eller user@pbs!token), värd eller IP-adress, datalager och lösenord. Om lösenordet lämnas tomt visas frågan igen; annars skulle en tom uppgift sparas utan varning och alla senare säkerhetskopior misslyckas med ett otydligt autentiseringsfel. Detta används när PBS-målet inte är registrerat som Proxmox-lagring." } ], "menuTitle": "Urvalsmenyn", diff --git a/web/messages/sv/docs/backup-restore/how-it-works.json b/web/messages/sv/docs/backup-restore/how-it-works.json index 42415ca0..b29d1780 100644 --- a/web/messages/sv/docs/backup-restore/how-it-works.json +++ b/web/messages/sv/docs/backup-restore/how-it-works.json @@ -20,7 +20,7 @@ "heading": "Arkivlayout", "intro": "Varje arkiv följer samma trädlayout oavsett destination. metadata/ underkatalog håller de strukturerade nyttolasterna; rootfs/ underkatalog håller filsystemet kopiera.", "treeCaption": "Förberedelsekatalogen som skapas vid säkerhetskopiering. Alla mål får samma träd i sitt eget format: tar för lokala mål, PBS-block för PBS och Borg-segment för Borg.", - "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" + "tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── selected_paths.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…" }, "rootfs": { "heading": "Innehållet i rootfs", @@ -176,7 +176,7 @@ "stage": "3", "name": "Förbered uppskjutna ändringar", "reads": "rootfs/ (omstart + farliga vägar)", - "action": "_rs_prepare_pending_restore förbereder riskfyllda sökvägar under /var/lib/proxmenux/pending-restore/, skriver plan.env, apply-on-boot.list och rs-skip-paths.txt och aktiverar proxmenux-restore-onboot.service för nästa start." + "action": "_rs_prepare_pending_restore förbereder riskfyllda sökvägar under /var/lib/proxmenux/restore-pending/<restore_id>/ (länkad som current), skriver plan.env, apply-on-boot.list och rs-skip-paths.txt och aktiverar proxmenux-restore-onboot.service för nästa start." }, { "stage": "3b", diff --git a/web/messages/sv/docs/backup-restore/index.json b/web/messages/sv/docs/backup-restore/index.json index 0c60947e..92334723 100644 --- a/web/messages/sv/docs/backup-restore/index.json +++ b/web/messages/sv/docs/backup-restore/index.json @@ -50,7 +50,7 @@ "heading": "Två gränssnitt, en backend", "intro": "Varje steg i arbetsflödet för säkerhetskopiering och återställning är tillgängligt från två ingångspunkter. Båda anropar samma skalbibliotek, producerar identiska arkiv och läser samma jobbregister.", "cliLabel": "ProxMenux Scripts (TUI)", - "cliDetail": "meny → Verktyg →\nVärdsäkerhetskopiering/återställning\n\nDialogbaserat flöde,\nSSH-vänlig, skriptbar\nför obevakad användning.", + "cliDetail": "meny →\nVärdsäkerhetskopiering & återställning\n\nDialogbaserat flöde,\nSSH-vänlig, skriptbar\nför obevakad användning.", "webLabel": "ProxMenux Monitor (Webb UI)", "webDetail": "Backups-fliken i\nMonitors webbgränssnitt.\n\nÅterställning med ett klick,\nlöpande loggvisning, integrerat\nmed aviseringar och visning\nav skillnader vid återställning." }, diff --git a/web/messages/sv/docs/backup-restore/restoring.json b/web/messages/sv/docs/backup-restore/restoring.json index 2d86fed6..880e5d2e 100644 --- a/web/messages/sv/docs/backup-restore/restoring.json +++ b/web/messages/sv/docs/backup-restore/restoring.json @@ -92,11 +92,11 @@ "fullFlow": { "heading": "Fullständig återställning arbetsflöde", "intro": "Den kompletta pipeline från arkivval till en återställd arbetsvärd. Varje steg matar nästa, staten skriven av tidigare stadier konsumeras av senare.", - "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/pending-restore/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" + "diagram": "┌─────────────────────────────────────────────────────────────────┐\n│ Archive → staging_root/ │\n│ manifest.json metadata/ rootfs/ │\n└──────────────────────────────┬──────────────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 1. hb_compat_check │\n │ · hardware drift → RS_SKIP_PATHS │\n │ · kernel direction → same / bk_newer / bk_older │\n │ · NIC remap plan │\n │ · hydration plan (bk_older only) │\n │ · rollback plan │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 2. Confirmation dialog │\n │ Shows: hot count, pending count, drift, hydration, │\n │ NIC remap, cross-kernel note, reinstalls preview │\n └──────────────────────────────┬──────────────────────────┘\n │ (accepted)\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 3. Apply hot paths → LIVE │\n │ _rs_apply rsyncs each hot path │\n │ from staging_root/rootfs to / │\n │ (skips paths in RS_SKIP_PATHS) │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4. _rs_prepare_pending_restore │\n │ /var/lib/proxmenux/restore-pending/'<'id'>'/ │\n │ ├── apply-on-boot.list │\n │ ├── plan.env │\n │ ├── rs-skip-paths.txt │\n │ └── rootfs/ (deferred paths) │\n │ Enable proxmenux-restore-onboot.service │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 4b. _rs_import_data_pools │\n │ Imports non-root ZFS pools whose disks are all │\n │ present; retries with -f on foreign hostid; │\n │ skips with a warning when disks are missing. │\n │ Log: /var/log/proxmenux/restore-datapools-*.log │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 5. _rs_run_complete_extras │\n │ packages.manual.list │\n │ → cascade-safe filter │\n │ → apt-get install │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 6. REBOOT │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 7. apply_pending_restore.sh (on early boot) │\n │ Reads plan.env │\n │ Applies apply-on-boot.list (filtered) │\n │ Installs the postboot systemd unit │\n └──────────────────────────────┬──────────────────────────┘\n │\n ▼\n ┌─────────────────────────────────────────────────────────┐\n │ 8. apply_cluster_postboot.sh (~10 minutes) │\n │ Runs after pve-cluster is up │\n │ · Applies /etc/pve entries to pmxcfs │\n │ · update-initramfs -u -k all │\n │ · update-grub / proxmox-boot-tool refresh │\n │ · component --auto-reinstall (nvidia, coral, ...) │\n │ · Boot sanity check │\n │ · Notification: \"Host restore finished\" │\n └─────────────────────────────────────────────────────────┘" }, "pendingMachinery": { "heading": "Mekanismen för uppskjuten återställning", - "intro": "Paths som klassificeras som reboot eller dangerous, och hydrering skriver, iscensätts för nästa start istället för att appliceras live. Detta görs genom en liten, självinnehållen uppsättning filer under /var/lib/proxmenux/pending-restore/:", + "intro": "Paths som klassificeras som reboot eller dangerous, och hydrering skriver, iscensätts för nästa start istället för att appliceras live. Detta görs genom en liten, självinnehållen uppsättning filer under /var/lib/proxmenux/restore-pending/<restore_id>/:", "rows": [ { "file": "apply-on-boot.list", @@ -115,7 +115,7 @@ "content": "Själva förberedda filerna: exakt de byte som ska skrivas. De lagras på samma filsystem som / så att rsync vid start går snabbt och inte kräver åtkomst till extern lagring." } ], - "unitBody": "Systemd-enheten proxmenux-restore-onboot.service aktiveras i slutet av det interaktiva steget. Engångstjänsten körs tidigt vid nästa start, anropar apply_pending_restore.sh och inaktiverar sedan sig själv. Villkoret ConditionPathExists=/var/lib/proxmenux/pending-restore/state gör att inget körs vid starter utan väntande återställning." + "unitBody": "Systemd-enheten proxmenux-restore-onboot.service aktiveras i slutet av det interaktiva steget. Engångstjänsten körs tidigt vid nästa start (före nätverket), anropar apply_pending_restore.sh och inaktiverar sedan sig själv. Enheten har inget sökvägsvillkor: skriptet avslutas självt när /var/lib/proxmenux/restore-pending/current inte finns, så vid starter utan väntande återställning görs ingenting. Den separata tjänsten proxmenux-apply-cluster-postboot.service styrs av ConditionPathExists=/var/lib/proxmenux/cluster-apply-pending." }, "postbootDispatcher": { "heading": "Post-boot dispatcher - apply_cluster_postboot.sh", @@ -238,11 +238,11 @@ "heading": "Var loggarna finns", "rows": [ { - "log": "/var/log/proxmenux/restore-YYYYMMDD_HHMMSS.log", - "detail": "Skrivs under det interaktiva steget: kompatibilitetsresultat, avvikelsefilter, anpassningsplan, utdata från direkt tillämpning och förberedelse av uppskjutna ändringar samt paketinstallation." + "log": "/tmp/proxmenux--restore-YYYYMMDD_HHMMSS.log", + "detail": "Skrivs under det interaktiva steget (pbs, borg eller local). Paketinstallation och datapoolsteg loggar även till /var/log/proxmenux/restore-apt-*.log och restore-datapools-*.log." }, { - "log": "/var/log/proxmenux/apply-pending-YYYYMMDD_HHMMSS.log", + "log": "/var/log/proxmenux/proxmenux-restore-onboot-YYYYMMDD_HHMMSS.log", "detail": "Skrivs av apply_pending_restore.sh tidigt vid start: inläsning av plan.env, genomgång av apply-on-boot och filtrering av undantagna sökvägar." }, { diff --git a/web/messages/sv/docs/backup-restore/scheduled-jobs.json b/web/messages/sv/docs/backup-restore/scheduled-jobs.json index cd4cd3b5..82e71ace 100644 --- a/web/messages/sv/docs/backup-restore/scheduled-jobs.json +++ b/web/messages/sv/docs/backup-restore/scheduled-jobs.json @@ -101,7 +101,7 @@ }, "management": { "heading": "Hantera jobb", - "intro": "Schemaläggarmenyn (Scripts TUI) och fliken Monitor Backups avslöjar samma åtgärder på något jobb.", + "intro": "Schemaläggarmenyn i Scripts TUI (Backup scheduler och retention) erbjuder Run now, Enable / Disable och Delete, samt en lista över jobb med status för senaste körning. Edit och View log finns bara på fliken Monitor Backups.", "rows": [ { "action": "Kör nu", @@ -112,7 +112,7 @@ "detail": "Nytt läge: systemctl enable/disable --now timern. Bifoga läge: vänder ENABLED flaggan i jobbenv - krokskriptet respekterar den vid nästa PVE-körning." }, { - "action": "Redigera", + "action": "Redigera (endast Monitor)", "detail": "Öppnar åter dialogerna för destination, schema, profil och bevarande och skriver om jobbfilerna. Jobb-ID:t behålls." }, { @@ -120,7 +120,7 @@ "detail": "Tar bort jobbets env-fil, sökvägsfilen och systemd-timern med tjänsten (nytt läge) samt inaktiverar hookkopplingen (kopplingsläge). Arkiv som redan finns på destinationen påverkas inte." }, { - "action": "Visa logg", + "action": "Visa logg (endast Monitor)", "detail": "Strömmar /var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log — en loggfil per körning. Körningsskriptet sänder också ut en kompakt statusrad till journald under tjänsten systemd." } ]