{ "meta": { "title": "Crear copias — flujo interactivo de copia | ProxMenux", "description": "El flujo interactivo de copia en ProxMenux. Dos puntos de entrada (menú TUI de Scripts y UI Web del Monitor), tres destinos, dos modos de perfil, un paso común de staging y un diálogo de confirmación. Documenta la matriz de seis opciones, los perfiles Default y Custom, y qué ve el usuario entre seleccionar una copia y ver el archivo aterrizando en el destino.", "ogTitle": "ProxMenux Backup — crear copias", "ogDescription": "El flujo interactivo de copia con tres destinos, dos perfiles y un paso común de staging.", "twitterTitle": "Crear copias | ProxMenux", "twitterDescription": "Flujo interactivo de copia con tres destinos y dos modos de perfil." }, "header": { "title": "Crear copias", "description": "El flujo interactivo de copia: elegir un destino y un perfil, revisar el resumen de confirmación, y ver el archivo aterrizando. Dos puntos de entrada comparten el mismo backend y producen archivos idénticos.", "section": "Backup & Restore" }, "intro": { "title": "Dos puntos de entrada, funcionalidad idéntica", "body": "El TUI de Scripts y la UI Web del Monitor exponen exactamente la misma funcionalidad. Cada copia — manual o programada — pasa por la misma matriz de elección (tres destinos × dos perfiles) e invoca la misma función backend por celda (_bk_pbs, _bk_borg o _bk_local). Los archivos producidos desde uno u otro punto de entrada son indistinguibles. Cuál usar es una cuestión de preferencia: el TUI es amigable por SSH y admite scripting; el Monitor ofrece click-y-elegir y convive con las vistas de notificaciones y de tail del log." }, "entryPoints": { "heading": "Los dos puntos de entrada", "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." }, { "entry": "ProxMenux Monitor (UI Web)", "path": "Pestaña Backups → Create backup", "detail": "Flujo en estilo asistente. Las mismas seis opciones presentadas como formulario de dos pasos (destino → perfil). Se invocan las mismas funciones backend por la API Flask." } ] }, "modes": { "heading": "Copias manuales vs programadas", "body": "Las copias se pueden producir en dos modos: manuales (el flujo interactivo que documenta esta página — el usuario elige un destino y un perfil desde un menú y ve el archivo aterrizando) o programadas (un trabajo desatendido que se ejecuta en un timer estilo cron y aplica la retención configurada en el trabajo). Ambos modos soportan los mismos tres destinos y los mismos dos perfiles, y ambos están disponibles desde los dos puntos de entrada — el menú TUI de Scripts y la pestaña Backups del Monitor. Los trabajos programados usan las mismas funciones backend que el flujo manual a través de run_scheduled_backup.sh; los archivos producidos son indistinguibles.", "seeAlso": "La página de trabajos programados cubre el flujo completo, incluyendo cómo crear un trabajo, adjuntarlo a un timer vzdump de PVE existente, y configurar los valores de retención.", "monitorAlt": "Pestaña Backups del Monitor de ProxMenux mostrando el diálogo New scheduled backup con los campos de destino, perfil, horario y retención.", "monitorCaption": "Copia programada — Monitor de ProxMenux. El mismo diálogo estilo asistente que crea una copia manual lleva los campos de horario y retención al final para la ruta desatendida." }, "matrix": { "heading": "La matriz de seis opciones", "intro": "La elección determina qué backend se ejecuta y qué estrategia de selección de rutas se aplica. Consulta las páginas específicas de cada destino para los detalles de configuración de cada celda.", "rows": [ { "combo": "1", "destination": "PBS", "profile": "Default", "action": "Sube el perfil por defecto más los extras persistentes a un repositorio PBS configurado." }, { "combo": "2", "destination": "Borg", "profile": "Default", "action": "Crea un archivo con el perfil por defecto más los extras persistentes en el repositorio Borg seleccionado." }, { "combo": "3", "destination": "Local", "profile": "Default", "action": "Escribe un archivo .tar.zst con el perfil por defecto más los extras persistentes en el destino local configurado." }, { "combo": "4", "destination": "PBS", "profile": "Custom", "action": "Abre el path picker antes de la subida a PBS; el usuario marca rutas y puede añadir nuevas." }, { "combo": "5", "destination": "Borg", "profile": "Custom", "action": "Abre el path picker antes de crear el archivo Borg." }, { "combo": "6", "destination": "Local", "profile": "Custom", "action": "Abre el path picker antes de escribir el .tar.zst local." } ] }, "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 la copia 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 futuras copias 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 copia.", "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.", "customPickerCaption": "Perfil Custom — el path picker. Las rutas del perfil por defecto aparecen sin marcar; los extras persistentes aparecen premarcados con prefijo [+]. El usuario marca el conjunto para esa ejecución.", "manageCustomAlt": "Menú Manage custom paths mostrando la lista de extras persistentes y opciones para añadirlos, eliminarlos o editarlos.", "manageCustomCaption": "Manage custom paths — el punto de entrada donde se añaden o eliminan los extras persistentes. Cada ruta listada aquí se incluye automáticamente en las copias en modo Default sin necesidad de abrir el picker Custom." }, "commonPipeline": { "heading": "Qué se ejecuta con independencia del destino", "intro": "Después de resolver el perfil, cada backend ejecuta el mismo pipeline de staging antes de divergir a su propio camino de subida. hb_prepare_staging ensambla el árbol del archivo en /tmp/proxmenux-DESTINATION-stage.XXXXXX y pobla cada uno de los tres bloques.", "steps": [ { "step": "1", "name": "Ensamblado del rootfs", "detail": "Ejecuta rsync -a por cada ruta seleccionada hacia staging_root/rootfs/. Excluye subrutas volátiles (historial de bash, cachés, papelera) de /root/. Las rutas ausentes en el origen se registran en metadata/missing_paths.txt sin detener la copia." }, { "step": "2", "name": "Generación del manifiesto", "detail": "build_manifest.sh orquesta los seis colectores y escribe manifest.json en la raíz del staging. Si un colector falla, la sección afectada hace fallback a un default vacío documentado; el manifiesto sigue siendo válido." }, { "step": "3", "name": "Inventario de paquetes", "detail": "apt-mark showmanual se captura tal cual en metadata/packages.manual.list. El estado de componentes ya está dentro del rootfs restaurado (components_status.json) porque /usr/local/share/proxmenux/ forma parte del perfil por defecto." }, { "step": "4", "name": "Info de la ejecución", "detail": "metadata/run_info.env registra la identidad de la ejecución de copia — hostname, timestamp, versión del kernel — usada por el chequeo de compatibilidad de la restauración para determinar la dirección cross-kernel." }, { "step": "5", "name": "Notificación (start)", "detail": "Se dispara hb_notify_lifecycle \"start\". Si las notificaciones están configuradas en el Monitor, se emite un evento usuario-facing Host backup started. Silencioso si no hay canales configurados." } ] }, "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.", "globalTitle": "Exclusiones globales (aplican a cada ruta)", "globalItems": [ "images/ — dumps de imágenes.", "dump/ — salidas de vzdump.", "tmp/ — ficheros temporales.", "*.log — ficheros de log." ], "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": [ ".bash_history", ".cache/", "tmp/", ".local/share/Trash/" ], "proxmenuxTitle": "Exclusiones de /usr/local/share/proxmenux/", "proxmenuxBody": "Este directorio contiene sólo estado de usuario — components_status.json, preferencias, caché post-install. El código que el destino ya tendrá de su propia instalación de ProxMenux se excluye para que una restauración no sobrescriba los binarios actuales del destino con versiones más antiguas:", "proxmenuxItems": [ "restore-pending/, scripts/, web/", "monitor-app/, monitor-app.*/, AppImage/", "images/, json/", "utils.sh, helpers_cache.json", "ProxMenux-Monitor.AppImage*, install_proxmenux*.sh" ], "notInProfileTitle": "Rutas fuera del perfil", "notInProfileBody": "Todo lo que no esté listado en hb_default_profile_paths y no se haya añadido como ruta custom o extra persistente no forma parte de la copia. Ejemplos notables:", "notInProfileItems": [ "Discos de VMs y LXCs — los gestiona vzdump, no esta funcionalidad. Los ficheros de configuración de los invitados bajo /etc/pve/nodes/*/qemu-server/*.conf y lxc/*.conf sí se capturan (viven bajo /etc/pve) para que la restauración reproduzca el inventario; los discos se re-adjuntan desde una copia existente de vzdump/PBS.", "/boot y /boot/efi — los binarios del kernel, el initramfs y la partición ESP UEFI los regenera el propio destino con update-initramfs, update-grub o proxmox-boot-tool refresh tras la restauración. El bootloader nunca se copia verbatim.", "Filesystems runtime del kernel y sistema/proc, /sys, /dev y /run son pseudo-filesystems que produce el kernel y udev; no se persisten en ningún sitio.", "Binarios de paquetes bajo /usr/bin, /usr/lib, /lib, /sbin — los reinstala el APT del destino a partir de packages.manual.list.", "/var/log/, /var/tmp/, /var/cache/ — estado runtime por host, no se restaura.", "/home/USUARIO — 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 la copia." }, "archiveStructure": { "heading": "Estructura del archive", "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\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/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, /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 la copia 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." }, "writing": { "heading": "Escritura en el destino", "intro": "Una vez el usuario confirma, cada backend ejecuta su propio paso de escritura. La mecánica está cubierta en las páginas de cada destino; la superficie compartida son el log, el sidecar y la notificación de finalización.", "rows": [ { "topic": "Fichero de log", "detail": "Cada backend escribe su salida completa en /tmp/proxmenux-DESTINATION-backup-YYYYMMDD_HHMMSS.log y, en caso de fallo, ofrece abrirlo en un diálogo scrollable. La ruta al log se imprime en el resumen de finalización sólo cuando el fichero tiene contenido." }, { "topic": "Sidecar (sólo local)", "detail": "hb_write_archive_sidecar deposita un *.proxmenux.json junto al archivo local para que el Monitor lo identifique como copia de host de ProxMenux incluso tras movimientos o renombrados." }, { "topic": "Notificación (complete/fail)", "detail": "Se dispara hb_notify_lifecycle \"complete\" o \"fail\" con duración, tamaño del archivo y — en fallos — la última línea del log que parezca un error." } ] }, "finishedScreens": { "heading": "Cómo se ve una copia finalizada", "intro": "El mismo evento de finalización lo exponen los dos puntos de entrada. El TUI escribe un bloque resumen en el terminal; la pestaña Backups del Monitor muestra la ejecución en la lista de archivos con badges de tamaño, duración y estado.", "scriptsAlt": "TUI de ProxMenux Scripts mostrando una copia de host finalizada — destino, backup ID, ruta del snapshot, tamaño de datos, duración y estado de cifrado.", "scriptsCaption": "Copia finalizada — ProxMenux Scripts (TUI). El bloque de finalización imprime el destino, backup ID, nombre del snapshot o archivo resultante, tamaño de datos, duración y estado de cifrado.", "monitorAlt": "Pestaña Backups del Monitor de ProxMenux mostrando una entrada de copia de host finalizada con tamaño, duración, badge del método y indicador de cifrado.", "monitorCaption": "Copia finalizada — pestaña Backups del Monitor de ProxMenux. La nueva copia aparece en la lista de archivos con el badge del método del destino, tamaño, duración y — cuando aplica — el indicador de cifrado." }, "whereNext": { "heading": "A dónde seguir", "items": [ { "label": "Destinos", "href": "/docs/backup-restore/destinations", "tail": " — detalles de configuración para Local, PBS y Borg." }, { "label": "Trabajos programados", "href": "/docs/backup-restore/scheduled-jobs", "tail": " — ejecutar la misma copia desatendida en un horario en lugar de interactivamente." }, { "label": "Restauración", "href": "/docs/backup-restore/restoring", "tail": " — el flujo que consume lo que esta página produce." } ] } }