"title":"Restaurar una copia — flujos Completo y Personalizado | ProxMenux",
"description":"El flujo completo de restauración. Documenta las tres acciones disponibles sobre cualquier copia (ver, descargar, restaurar), la comprobación de compatibilidad y sus resultados, los modos Completo y Personalizado, la clasificación de rutas que decide qué se aplica en vivo y qué espera al siguiente arranque, el dispatcher de arranque y la pasada de reinstalación post-arranque de componentes.",
"ogTitle":"ProxMenux Backup — restaurar",
"ogDescription":"Flujos de restauración completo y personalizado con la comprobación de compatibilidad, la clasificación de rutas, el dispatcher post-arranque y la reinstalación de componentes.",
"twitterTitle":"Restaurar una copia | ProxMenux",
"twitterDescription":"Cómo se convierte una copia de host de ProxMenux en un host Proxmox operativo."
},
"header":{
"title":"Restaurar una copia",
"description":"El flujo completo de restauración: desde elegir una copia hasta un host operativo. Documenta la comprobación de compatibilidad, los dos modos de restauración, el dispatcher post-arranque, la pasada de reinstalación de componentes, y los mecanismos que hacen predecibles las restauraciones cross-host y cross-kernel.",
"section":"Backup & Restore"
},
"intro":{
"title":"La restauración reproduce el origen, no sólo los ficheros",
"body":"Restaurar una copia de ProxMenux no es una extracción. Los ficheros son sólo el primer paso: una vez colocado el sistema de ficheros, la restauración lee el manifiesto para detectar diferencias entre origen y destino, filtra rutas que romperían el arranque del destino, hidrata configuración propia del usuario que no puede copiarse verbatim, y — tras el reinicio obligatorio — reinstala cada componente que tuviera el origen (controlador NVIDIA, Coral TPU, herramientas GPU) contra el kernel actual del destino. Lo que el usuario elige del menú es una única copia; lo que realmente sucede involucra a la comprobación de compatibilidad, la clasificación de rutas, el dispatcher post-arranque y la pasada de reinstalación trabajando juntos para producir un host que se comporta como el origen."
},
"threeActions":{
"heading":"Tres acciones sobre una copia",
"intro":"Seleccionar una copia de la lista abre un menú con tres acciones.",
"actionRows":[
{
"action":"Ver",
"detail":"Abre una vista de sólo lectura del archivo: contenido de manifest.json (hostname de origen, versión de PVE, kernel, hardware, componentes instalados), la lista de rutas dentro de <code>rootfs/</code>, y un diff de qué cambiaría en el host actual si se aplicara la copia."
},
{
"action":"Descargar",
"detail":"Exporta el archivo como un fichero portable <code>.tar.zst</code> (tar comprimido con zstd). Se puede extraer en cualquier sistema Linux con <code>tar --zstd -xf FICHERO.tar.zst</code>, o desde macOS/Windows con herramientas que soporten zstd (7-Zip, PeaZip, Keka…). El árbol extraído contiene <code>manifest.json</code>, <code>metadata/</code> y <code>rootfs/</code>, exactamente el mismo layout que consume la restauración. Es útil para inspección offline o para restaurar en un host que no tiene acceso al destino original (PBS, Borg)."
},
{
"action":"Restaurar",
"detail":"La ruta que escribe. Extrae el archivo en un directorio de staging, ejecuta la comprobación de compatibilidad y presenta el selector de modo (Completo o Personalizado)."
}
]
},
"compatibilityCheck":{
"heading":"La comprobación de compatibilidad",
"intro":"Antes de escribir ningún fichero, <code>hb_compat_check</code> compara el estado descrito en el manifiesto contra el host de destino. La comprobación se ejecuta en sólo lectura y produce cuatro salidas independientes que dirigen el resto de la restauración.",
"outputRows":[
{
"output":"Flag de dirección",
"detail":"<code>HB_COMPAT_KERNEL_DIRECTION</code> — uno de <code>same</code>, <code>bk_newer</code> o <code>bk_older</code>. Compara la versión mayor del kernel de la copia contra la del destino. Dirige el filtro cross-kernel de subconjunto seguro (sólo dispara en <code>bk_older</code>) y la pasada de hidratación documentada en la página cross-kernel."
},
{
"output":"Lista de rutas a saltar",
"detail":"<code>RS_SKIP_PATHS</code> — cada ruta que la restauración NO debe aplicar. Se pobla por dos mecanismos: drift de hardware (NIC ausente, ID de storage ausente, pool ZFS que no pertenece a este host) y — cuando la dirección es <code>bk_older</code> — la lista cross-kernel de rutas no seguras."
},
{
"output":"Plan de remapeo de NICs",
"detail":"Cuando una NIC del destino tiene la misma MAC que una del origen pero con nombre distinto (típico tras cambiar la placa base), la comprobación registra un plan de renombrado (<code>HB_NIC_REMAP</code>) que reescribirá <code>/etc/network/interfaces</code> durante la restauración."
},
{
"output":"Plan de rollback",
"detail":"Lo calcula <code>compute_rollback_plan.sh</code>. Lista las VMs, LXCs y componentes presentes en el destino pero no en la copia. El usuario puede optar durante el diálogo de confirmación por eliminarlos como parte de la restauración, de modo que el destino termine casando exactamente con la copia."
}
],
"reportBody":"La comprobación también emite un informe estructurado (<code>HB_COMPAT_RESULTS</code>) categorizado como PASS / INFO / WARN / FAIL. Las entradas WARN y FAIL aparecen en el panel previo a la restauración; la restauración se niega a continuar sólo cuando hay un FAIL que el usuario no puede resolver pulsando Continuar."
},
"twoModes":{
"heading":"Restauración Completa vs Personalizada",
"intro":"Una vez completada la comprobación de compatibilidad, aparece el menú de modo de restauración. La elección determina <em>qué</em> se aplica, no <em>cómo</em> — ambos modos comparten el mismo pipeline subyacente.",
"modeRows":[
{
"mode":"Restauración Completa",
"detail":"Aplica cada ruta del archivo que sobreviva a los filtros de drift y cross-kernel. También ejecuta la instalación de paquetes y la pasada de reinstalación de componentes. Es la elección por defecto y la recomendada — el objetivo es reproducir el origen, no elegir trozos."
},
{
"mode":"Restauración Personalizada",
"detail":"Abre un checklist mostrando cada ruta que lleva el archivo. El usuario marca un subconjunto. Las rutas bloqueadas por el filtro cross-kernel aparecen en gris y no pueden seleccionarse. La instalación de paquetes y la reinstalación de componentes se omiten por defecto en modo Personalizado — el usuario está señalando que desea una aplicación parcial, no una reproducción completa."
}
]
},
"pathClassification":{
"heading":"Cómo se clasifican las rutas",
"intro":"Cada ruta seleccionada para la restauración se clasifica por <code>hb_classify_path</code> en una de tres categorías. La categoría determina el momento en que la ruta se aplica al sistema y por qué.",
"rows":[
{
"class":"hot",
"detail":"Rutas que se aplican <strong>de inmediato</strong> sobre el sistema en ejecución. El servicio que las consume detecta el cambio por sí mismo o al siguiente reload, sin necesidad de reiniciar. Son la mayoría del contenido de una copia: <code>/etc/ssh</code>, <code>/etc/apt</code>, <code>/etc/cron.*</code>, <code>/root</code>, <code>/usr/local/bin</code>, ficheros de configuración de servicios generales, etc."
},
{
"class":"reboot",
"detail":"Rutas que se aplican <strong>de inmediato</strong> también, pero cuyo efecto real sólo se manifiesta en el <strong>siguiente arranque</strong>: el kernel sólo lee <code>/etc/default/grub</code> al iniciar el bootloader, <code>/etc/fstab</code> al montar los filesystems, <code>/etc/modules</code> al cargar módulos, etc. El fichero está en su sitio nada más aplicarse, pero el sistema tiene que reiniciar para consumirlo. Ejemplos: <code>/etc/default/grub</code>, <code>/etc/kernel</code>, <code>/etc/modules</code>, <code>/etc/fstab</code>, <code>/etc/zfs</code>, <code>/etc/initramfs-tools</code>."
},
{
"class":"dangerous",
"detail":"Rutas que <strong>NO se aplican en el sistema en ejecución</strong> — la escritura viva podría corromper estado o cortar la conexión activa. Estas rutas se preparan en el conjunto pendiente y las escribe el dispatcher post-arranque después del reinicio, cuando el clúster está arriba pero antes de que el sistema esté completamente en uso. Ejemplos: <code>/etc/pve</code> (pmxcfs es un FUSE vivo; escribir directo en él lo saltea), <code>/var/lib/pve-cluster</code> (datos vivos del clúster), <code>/etc/network</code> (podría reconfigurar la misma interfaz por la que el usuario está conectado por SSH y cortar la sesión)."
}
]
},
"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 │ 5. _rs_run_comp