{
"meta": {
"title": "Ako ProxMenux Backup funguje interne — rootfs, manifest a aplikácie",
"description": "Podrobný obsah zálohy ProxMenux: rootfs skopírovaný pomocou rsync podľa predvoleného profilu ciest, štruktúrovaný manifest vytvorený šiestimi nezávislými zbernými skriptmi a inventár aplikácií, ktorý riadi automatickú reinštaláciu balíkov a komponentov po obnove.",
"ogTitle": "Ako ProxMenux Backup funguje interne",
"ogDescription": "Tri časti zálohy ProxMenux: rootfs, manifest a aplikácie.",
"twitterTitle": "Ako funguje zálohovanie ProxMenux | ProxMenux",
"twitterDescription": "Tri časti zálohy ProxMenux a spôsob, akým z nich obnova znovu vytvorí zdrojového hostiteľa."
},
"header": {
"title": "Ako to funguje",
"description": "Vnútorná štruktúra zálohy ProxMenux — súborový systém, manifest a inventár aplikácií — a spôsob, akým ich obnova používa na vytvorenie pôvodného hostiteľa na cieli, ktorý môže mať iné jadro.",
"section": "Záloha a obnova"
},
"intro": {
"title": "Jeden archív, tri časti",
"body": "Každá záloha vytvorí tri jasne oddelené časti v spoločnom prípravnom adresári. Archív odoslaný do cieľa (lokálny .tar.zst, záloha PBS alebo archív Borg) obsahuje túto istú štruktúru. Obnova používa všetky tri: manifest pred zmenami určí rozdiely a výnimky; rootfs poskytne konfiguračné súbory, ktoré sa použijú za behu alebo po reštarte; inventár aplikácií riadi inštaláciu balíkov a reinštaláciu komponentov po štarte. Každú časť možno skontrolovať alebo rozbaliť samostatne."
},
"layout": {
"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/…"
},
"rootfs": {
"heading": "Časť rootfs",
"intro": "Strom rootfs/ je obyčajná kópia súborového systému vytvorená pomocou rsync zo zdrojového hostiteľa. Obsahuje vybraný predvolený profil ciest dôležitých pre obnovu Proxmoxu a vlastné cesty, ktoré používateľ pridal do úlohy alebo interaktívnej relácie. Výber je zámerne úzky: iba cesty, ktoré obsahujú konfiguráciu alebo uchovávajú stav, ktorý Proxmox nedokáže sám znovu vytvoriť.",
"defaultProfileTitle": "Štandardný profil",
"defaultProfileBody": "Predvolený profil definuje hb_default_profile_paths v lib_host_backup_common.sh. Zahŕňa osem pevných kategórií a prípadne stav ZFS, ktoré spolu opisujú funkčného hostiteľa Proxmox:",
"categoriesTitle": "Kategórie ciest",
"categoryRows": [
{
"category": "Jadro PVE",
"paths": "/etc/pve, /var/lib/pve-cluster, /etc/vzdump.conf",
"why": "Obsah klastrového súborového systému a predvolené nastavenia vzdump. Databáza pmxcfs (config.db) sa zachytí ako konzistentná snímka cez sqlite3 .backup bez zastavenia klastra. Sprievodné súbory .db-wal / .db-shm sa z rsync vylúčia. Ak sqlite3 nie je dostupný, vytvorí sa config.db.raw-fallback, ktorý obnova automaticky použije ako databázu."
},
{
"category": "Identita hostiteľa & sieť",
"paths": "/etc/hostname, /etc/hosts, /etc/timezone, /etc/resolv.conf, /etc/network, /etc/systemd/network",
"why": "Všetko potrebné na spustenie hostiteľa v sieti s rovnakou identitou. Súbory .link v /etc/systemd/network priraďujú názvy sieťových kariet k ich MAC adresám, aby sa názvy zachovali pri reinštalácii a zmenách hardvéru."
},
{
"category": "Prístup a overovanie",
"paths": "/etc/ssh, /etc/sudoers, /etc/sudoers.d, /etc/pam.d, /etc/security",
"why": "Kľúče SSH, pravidlá sudo a konfigurácia PAM. Ich strata môže používateľovi znemožniť prístup k obnovenému hostiteľovi."
},
{
"category": "Jadro a štart systému",
"paths": "/etc/default/grub, /etc/kernel, /etc/modules, /etc/modules-load.d, /etc/modprobe.d, /etc/sysctl.conf, /etc/sysctl.d, /etc/udev/rules.d, /etc/fstab, /etc/iscsi, /etc/multipath",
"why": "Parametre IOMMU, zoznamy zakázaných modulov, ID zariadení VFIO, tabuľka pripojení a konfigurácia úložísk."
},
{
"category": "Shell a miestne nastavenia",
"paths": "/etc/environment, /etc/bash.bashrc, /etc/inputrc, /etc/profile, /etc/profile.d, /etc/locale.gen, /etc/locale.conf",
"why": "Systémová konfigurácia shellu, premenné prostredia a nastavenie generovania miestnych nastavení."
},
{
"category": "Správa balíkov a cron",
"paths": "/etc/apt, /etc/cron.d, /etc/cron.{daily,hourly,weekly,monthly}, /etc/cron.allow, /etc/cron.deny, /var/spool/cron/crontabs",
"why": "APT zdroje pre konzistentné riešenie balíkov, plánované úlohy definované užívateľom."
},
{
"category": "Stav a nástroje ProxMenux",
"paths": "/etc/proxmenux, /etc/systemd/system, /etc/log2ram.conf, /etc/logrotate.conf, /etc/logrotate.d, /etc/lm-sensors, /etc/sensors3.conf, /etc/fail2ban, /etc/snmp, /etc/postfix, /etc/wireguard, /etc/openvpn, /etc/grafana, /etc/influxdb, /etc/prometheus, /etc/telegraf, /etc/zabbix",
"why": "Voliteľné, ale bežné náradie Proxmox. Chýbajúce cesty sú zaznamenané v metadata/missing_paths.txt bez zastavenia zálohy."
},
{
"category": "Spustiteľné súbory ProxMenux a účet root",
"paths": "/usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux, /var/lib/proxmenux, /root (bez dočasných podadresárov)",
"why": "Binárne systémy nainštalované ProxMenux a konfigurácia na užívateľa podľa /root. Prchavé cesty (.bash_history, .cache/, tmp/, .local/share/Trash/) sú z kópie vylúčené. /var/lib/proxmenux drží plánované záložné úlohy a stav hostiteľa udržiava ProxMenux; obnovenie inscenácie, rollback kópie a post-restore markery sú vylúčené, pretože patria k hostiteľovi, ktorý prevádzkuje obnovenie."
},
{
"category": "Stav ZFS (podmienený)",
"paths": "/etc/zfs",
"why": "Zahrnuté iba vtedy, keď zdroj spustí ZFS. Obsahuje zpool.cache a hostid."
}
],
"customTitle": "Rozšírenie profilu vlastnými cestami",
"customBody": "Okrem predvoleného profilu, ProxMenux ponúka dva spôsoby, ako zahrnúť ďalšie cesty do zálohy. Skladajú sa bez konfliktu a obe sa vzťahujú na interaktívne zálohy a plánované pracovné miesta.",
"customExtrasTitle": "1. Trvalé doplnky (na-host súbor)",
"customExtrasBody": "Textový súbor /usr/local/share/proxmenux/backup-extra-paths.txt obsahuje absolútne cesty, ktoré používateľ na tomto hostiteľovi označil ako „vždy zahrnúť“. Pri zálohe v režime Predvolené sa automaticky pridajú do predvoleného profilu bez otázok. Súbor sa upravuje cez rozhranie, bez ručnej úpravy, a pretrváva medzi reštartmi aj aktualizáciami. Každý riadok obsahuje jednu absolútnu cestu; komentáre s # sú povolené.",
"customModeTitle": "2. Vlastný režim (na beh)",
"customModeBody": "Spustenie zálohy v režime Vlastný nahradí automatickú aplikáciu predvoleného profilu kontrolným zoznamom zobrazujúcim každú cestu: položky predvoleného profilu a trvalé doplnky (s predponou [+] a vopred začiarknuté). Používateľ začiarkne alebo odznačí položky pre daný konkrétny chod a môže tiež stlačiť Pridať vlastnú cestu na zadanie novej cesty – ktorá sa potom uloží do extra súboru pre budúce zálohy.",
"customMissingTitle": "Cesta neprítomná zo zdroja",
"customMissingBody": "Akákoľvek cesta z profilu (predvolená alebo pridaná), ktorá neexistuje na zdrojovom hostiteľovi, sa zaznamenáva v metadata/missing_paths.txt vo vnútri archívu. Zálohovanie nezlyhá, ani sa nezastaví. Užívateľ vidí súhrn archivovaných ciest a chýbajúce cesty na konci. V praxi sa to stane pre voliteľné cesty nástrojov, ako je /etc/wireguard alebo /etc/prometheus, ak tieto nástroje nie sú nainštalované."
},
"manifest": {
"heading": "Časť s manifestom",
"intro": "manifest.json je štruktúrovaný dokument JSON opisujúci zdrojového hostiteľa v čase zálohy. Vytvára ho šesť nezávislých zberných skriptov riadených skriptom build_manifest.sh. Každý iba číta údaje a vytvorí presne definovanú časť JSON. Pri zlyhaní použije bezpečnú prázdnu predvolenú hodnotu, takže manifest zostáva použiteľný aj s neúplnou časťou.",
"orchestratorCaption": "Manifest tvorí šesť zberných skriptov. Každý beží vo vlastnom podprocese. Pri zlyhaní jednej časti sa použije zdokumentovaná bezpečná predvolená hodnota a zobrazí upozornenie, ale záloha sa nepreruší.",
"collectorRows": [
{
"collector": "collect_source_host.sh",
"produces": "source_host",
"content": "Názov hostiteľa, verzia PVE (pveversion), verzia PBS, ak hostiteľ plní úlohu zálohovacieho servera, jadro (uname -r), režim zavádzania (efi/bios), typ koreňového súborového systému, model a architektúra CPU, pamäť v KB."
},
{
"collector": "collect_hardware.sh",
"produces": "hardware_inventory",
"content": "GPU s výrobcom a priradeným inštalátorom ProxMenux; TPU Coral USB a M.2 zistené pomocou lsusb/lspci; sieťové karty s MAC adresou, PCI slotom a priradením k mostu; bezdrôtové zariadenia. Záznamy GPU obsahujú heuristiku passthrough_eligible."
},
{
"collector": "collect_storage.sh",
"produces": "storage_inventory",
"content": "ZFS pools (s pool typ + členské disky vyriešené na /dev/disk/by-id/*, /dev/disk/by-partuuid/* alebo surové /dev/sdX cesty v závislosti od toho, ako každý pool bol pôvodne vytvorený), LVM objemové skupiny + thin pools, fyzické disky s SMART schopnosť, PVE storage.cfg vstupy, externé pripojenia."
},
{
"collector": "collect_kernel.sh",
"produces": "kernel_params",
"content": "Parametre pridané správcom do /proc/cmdline bez bežných predvolených položiek, ako sú BOOT_IMAGE=, root=, ro/rw, quiet a splash; moduly načítavané pri štarte z /etc/modules; a cesty súborov /etc/modprobe.d/*.conf, ktoré obsahujú skutočné direktívy (options, blacklist, install, alias, softdep)."
},
{
"collector": "collect_proxmenux_state.sh",
"produces": "proxmenux_installed_components",
"content": "Číta /usr/local/share/proxmenux/managed_installs.json (registrácia všetkého, čo ProxMenux nainštaloval) a installed_tools.json. Každý záznam udržuje inštalačnú dráhu (menu_script), takže obnovenie môže spustiť presne rovnaký inštalačný tok."
},
{
"collector": "collect_guests.sh",
"produces": "vms_lxcs_at_backup",
"content": "Vypíše VM (qm list) a kontajnery LXC (pct list) prítomné v čase zálohy: VMID, názov a aktuálny stav. Ide iba o inventár; samotné údaje hostí zálohujú vzdump / PBS."
}
],
"schemaTitle": "Potvrdenie schémy",
"schemaBody": "ProxMenux obsahuje šablónu, ktorá opisuje, ktoré polia musí manifest obsahovať a aký tvar má každé z nich. Pri vytváraní zálohy možno manifest automaticky overiť podľa tejto šablóny, takže zberač, ktorý vytvoril chybný JSON alebo pole s preklepom, sa odhalí okamžite. Kontrola je určená na vývoj samotného ProxMenux: v systéme, kde nie je nainštalovaná, záloha funguje ako zvyčajne a manifest sa vytvorí rovnako."
},
"applications": {
"heading": "Inventár aplikácií",
"intro": "Dva inventáre evidujú softvér pridaný k základným balíkom Proxmox VE: zoznam balíkov v metadata/ a register komponentov v rootfs, podrobne opísané nižšie. Obnova podľa pôvodného spôsobu inštalácie používa APT alebo inštalátory ProxMenux na opätovnú inštaláciu používateľského softvéru.",
"packagesTitle": "packages.manual.list",
"packagesBody": "Abecedný textový zoznam z apt-mark showmanual obsahuje všetky balíky APT výslovne nainštalované na zdrojovom hostiteľovi. Nezahŕňa závislosti základného systému Proxmox VE, ktoré APT cieľa nainštaluje automaticky. Pri obnove ho číta _rs_run_complete_extras a použije trojstupňový filter proti kaskádovému odstraňovaniu: dpkg -s zistí už nainštalované balíky, pri knižniciach sa zistia iné hlavné verzie a apt-get install --simulate overí riziko následného odstraňovania. Zvyšné balíky sa nainštalujú cez apt-get install -y.",
"componentsTitle": "components_status.json (súčasť rootfs)",
"componentsBody": "Register JSON v /usr/local/share/proxmenux/ eviduje každý komponent nainštalovaný cez ProxMenux s presným stavom: verziou a osobitnými príznakmi (pri NVIDIA logická hodnota patched, pri Coral verzia DKMS). Súbor je v rootfs, nie v metadata/, pretože sa číta až po skopírovaní rootfs na cieľ. Dispečer po štarte (apply_cluster_postboot.sh) prejde záznamy a spustí pre každý komponent jeho --auto-reinstall hook. Ten prečíta uložený stav a zopakuje inštaláciu pre aktuálne jadro cieľa.",
"componentInstallersTitle": "Inštalátory komponentov",
"componentInstallersBody": "Štyri inštalátory ProxMenux v súčasnosti vystavujú vstupný bod --auto-reinstall:",
"installerRows": [
{
"component": "nvidia_driver",
"installer": "gpu_tpu/nvidia_installer.sh",
"action": "Číta version a patched. Stiahne ten istý inštalačný súbor NVIDIA, zostaví moduly DKMS pre jadro cieľa a znovu použije opravu ProxMenux, ak bola na zdroji zapnutá."
},
{
"component": "coral_driver",
"installer": "gpu_tpu/install_coral.sh",
"action": "Číta verziu Coral ovládač. Kompiluje modul DKMS s jadrom cieľa."
},
{
"component": "amdgpu_top",
"installer": "gpu_tpu/amd_gpu_tools.sh",
"action": "Číta nahranú verziu. Znovu stiahne presný .deb z GitHub vydania."
},
{
"component": "intel_gpu_tools",
"installer": "gpu_tpu/intel_gpu_tools.sh",
"action": "APT inštaluje balík. Idempotentné, ak už prítomný z packages.manual.list."
}
]
},
"restoreFlow": {
"heading": "Ako obnova používa tri časti",
"intro": "Obnova má šesť fáz. Každá číta konkrétnu časť archívu a aktualizuje cieľového hostiteľa. Žiadna nevyžaduje dostupnosť zdrojového hostiteľa: archív obsahuje všetky potrebné zálohované údaje.",
"stagesCaption": "Fáza 1 podľa manifestu rozhodne, čo upraviť. Fáza 2 skopíruje cesty rootfs použiteľné za behu. Fáza 3 pripraví rizikové cesty na ďalší štart. Fáza 3b importuje dátové pooly ZFS bez koreňového systému, ktorých disky sú všetky prítomné. Fáza 4 rieši balíky. Fáza 5 po reštarte preinštaluje komponenty pre jadro cieľa.",
"stageRows": [
{
"stage": "1",
"name": "Kontrola kompatibility",
"reads": "manifest.json",
"action": "Spúšťa hb_compat_check. Porovnáva zdrojový a cieľový hardvér (NIC, identifikátory úložísk), verziu PVE a hlavnú verziu jadra. Nastavuje HB_COMPAT_KERNEL_DIRECTION (same, bk_newer alebo bk_older) a zaľudňuje RS_SKIP_PATHS s hardware-drift a cross-kernel s výnimkou."
},
{
"stage": "2",
"name": "Použitie za tepla",
"reads": "rootfs/ (len bezpečné cesty)",
"action": "_rs_apply … hot kopíruje hb_classify_path=hot položky priamo do živého cieľa. Všetko pod /etc/pve, /etc/network alebo cesty klasifikované ako reboot/dangerous je odložený."
},
{
"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."
},
{
"stage": "3b",
"name": "Import dátových poolov",
"reads": "manifest.storage_inventory + cieľový ZFS stav",
"action": "_rs_import_data_pools importuje každého ZFS pool každého iného typu než root, ktorého úplná sada diskov sa nachádza v cieli. Pools nesúci cudzí hostid sa zopakuje s zpool import -f. Pools chýbajúce disky sú preskočené s varovaním. Výsledok per-pool je zaznamenaný v /var/log/proxmenux/restore-datapools-<timestamp>.log."
},
{
"stage": "4",
"name": "Inštalácia balíka",
"reads": "metadata/packages.manual.list",
"action": "_rs_run_complete_extras spustí kaskádovo bezpečný filter a zavolá apt-get install -y so zoznamom prežitých balíkov. Celý výstup ide do /var/log/proxmenux/restore-apt-*.log."
},
{
"stage": "5",
"name": "Po štarte systému",
"reads": "rootfs (už použité) + components_status.json",
"action": "Po reštarte apply_pending_restore.sh použije odložené cesty a apply_cluster_postboot.sh spustí update-initramfs, update-grub alebo proxmox-boot-tool refresh. Potom prejde components_status.json a pre každý komponent spustí jeho --auto-reinstall hook."
}
]
},
"whyItWorks": {
"heading": "Prečo je záloha rozdelená na tri časti",
"body": "Rozdelenie sleduje životný cyklus údajov. Súborový systém sa prenáša cez rsync: rýchlo, prehľadne a atómovo po súboroch. Konfiguračný stav, ktorý treba vyhodnotiť pred zmenami, je štruktúrovaný JSON, samostatne čitateľný, verzovateľný schémou a strojovo porovnateľný so stavom cieľa. Softvér na reinštaláciu opisuje inventár názvov a verzií; správca balíkov a inštalátory ProxMenux vyberú vhodné binárne súbory. Každá časť plní vlastnú úlohu. Spolu smerujú ku konzistentnej obnove odolnej voči chybám: poškodený manifest ponecháva rootfs obnoviteľný, chýbajúci balík nebráni inštalácii komponentov a zlyhanie pri jednej položke nezastaví ďalšiu."
}
}