CT217: cobertura de backup declarada y observada¶
20 de octubre de 2026. Sólo fuentes y cuatro llamadas PVE autorizadas desde pmx2: recursos217, config217 filtrada, jobs y una consulta de snapshots. Sin backup, sync, verify, restore, drill, SQL/export, NAS walk, lectura de payload/secretos o cambios runtime. Sólo se redactó este informe.
Declaración runtime, 02:45:36.705338 CEST¶
CT217 figura running en proxmox2. Su config proyectada contiene rootfs zfs-ha:subvol-217-disk-0, size40G; ningún mpN declarado. Se descartaron env y campos lxc.*. /opt/observa y /home/monxas/appdata son rutas de guest bajo el rootfs declarado, sin un mount point PVE separado declarado para ellas; esto no descarta submontajes manuales, NFS interno o exclusiones de paths.
| Job que selecciona217 | enabled | schedule | storage | Selección/exclusión |
|---|---|---|---|---|
backup-lxc-terra |
1 | 01:00 | pbs |
vmid217 explícito, no excluido, nodo compatible |
Es el único job seleccionante observado; no quedaron selecciones pool sin resolver. No se copiaron targets ajenos ni se crea otro scheduler. Declaración de job no equivale a ejecución satisfactoria.
Snapshots listados, 02:46:41.579069 CEST¶
La llamada adicional exacta fue /nodes/proxmox2/storage/pbs/content --content backup --vmid217. Se conservaron hasta tres entradas recientes; la respuesta contenía dos:
| Volid | ctime CEST | size informado |
|---|---|---|
pbs:backup/ct/217/2026-10-19T23:02:36Z |
20oct01:02:36 | 19.924.189.387 B (~18,56 GiB) |
pbs:backup/ct/217/2026-10-19T07:08:28Z |
19oct09:08:28 | 17.079.081.109 B (~15,91 GiB) |
Edad del último ctime: 1h44m05,58s. Size es metadata API, no uso deduplicado ni bytes verificados. No se consultaron worker status/endtime, integridad ni contenido. Los snapshots listados no prueban restore, coherencia de aplicaciones o inclusión de cada ruta.
El último ctime precede a Required instalada a las02:12: no se acredita que ese snapshot contenga esa versión; tampoco se infiere su exclusión sin payload/intervalo del job. La regla tiene su fuente Git. La auditoría anterior registraba a las23:02 «28 invitados con copia PBS<26h»: evidencia agregada reciente compatible con217, no un restore suyo.
Matriz de configuración y persistencia¶
El perfil declara diez servicios y 16 binds Docker absolutos: siete de configuración/secretos y nueve de datos. Un Docker bind dentro del guest no es por ello un mount PVE externo excluido de vzdump. Para todos los paths siguientes rige la condición rootfs anterior, sin comprobación de payload:
| Paths de guest | Fuente disponible / límite de recuperación |
|---|---|
/opt/observa/compose.yaml |
Perfil/hash e identidades de imágenes; no Compose completo ni bindings de secretos reconstruidos |
/opt/observa/conf/prometheus.yml |
Template reconciliado26jobs; autenticación no acreditada por esta auditoría; hash c8… previo no comparado con PBS |
/home/monxas/appdata/prometheus/alerts.yml |
Fuente versionada87reglas; versión actual en PBS no comprobada |
appdata/alertmanager/{alertmanager.yml,telegram-bot-token,vera-alert-secret} |
YAML candidato Git; contenido runtime y secretos no verificados; tres mounts RO |
appdata/blackbox/blackbox.yml, appdata/loki-config/loki-config.yaml |
Paths observados; no fuente completa actual localizada; ausencia Git no demuestra ausencia PBS |
Datos appdata/{alertmanager/data,grafana,healthchecks,loki,prometheus/data,pushgateway,scrutiny/config,scrutiny/influxdb,uptime-kuma} |
Nueve binds de datos; JSON Grafana parciales no equivalen a sus bases; sin prueba de consistencia/restore |
| Named/anonymous volumes | Cero named volumes declarados; no descarta image-declared VOLUME, anónimos ni Docker data-root separado: no se inspeccionó Mounts |
appdata/… abrevia /home/monxas/appdata/…. RepoDigests observados no sustituyen backups de datos ni acreditan disponibilidad de registry. El perfil conserva complete_recovery_spec: false.
Huecos concretos y propuesta mínima¶
- backup-retention.md conserva targets verificados en agosto, anteriores a217. La lectura actual sí acredita su selección: no interpretar la tabla antigua como ausencia de backup ni como inventario actual completo.
- backup-appdata-fixed.sh, líneas28–39, pertenece a VM208; horario retirado el8sept. No declara una copia diaria de
/opt/observani del appdata trasladado. No se propone reactivarlo. - pbs_restore_drill.py, líneas42–44, permite LXC100/123/155/200/251 y config123: excluye217. El drill19oct probó123. No se encontró prueba de restore217; no añadirlo sin más al pool aleatorio con su pila de diez servicios.
normalidadcomprueba jobs y frescura, no mounts/payload/coherencia. El éxito agregado no cierra esos huecos.
Siguiente cambio fuente acotado: registrar esta evidencia individual fechada en documentación/perfil, separando job declarado, snapshot listado, paths comprobados y restore probado. Sólo las dos primeras están acreditadas. Antes de un ensayo futuro, revisar metadata de submontajes, volúmenes Docker y exclusiones, y preparar extracción/restore aislado específico con límites revisados. No se ejecutó ni autorizó aquí esa ampliación; no requiere otro daemon, cron o backup.
Evidencia privada y cierre¶
Archivos0600, fsync de archivo/directorio, sólo metadata filtrada:
~/.local/state/homelab-incident-evidence/ct217-backup-metadata-20261020T004541Z.json, SHA256<REDACTED>.~/.local/state/homelab-incident-evidence/ct217-pbs-snapshots-20261020T004641Z.json, SHA256<REDACTED>.
Las cuatro llamadas terminaron rc0. No hubo más SSH/PVE tras snapshots, ni cambios en código, perfiles, jobs o almacenamiento.