# P2602 - Automatización de Backups DTIC UTNLR > Manifiesto de Proyecto | Referencia: [`adn/07_proyectos.md`](../../../adn/07_proyectos.md) ## Identificación | Campo | Valor | | :--- | :--- | | **Código** | P2602 | | **Nombre** | Automatización de Backups DTIC UTNLR | | **Versión** | v2601 | | **Estado** | ⏳ En Ejecución | | **Inicio** | 28/02/2026 | | **Fin Estimado** | Por definir | ## Ventana Operativa | Campo | Valor | | :--- | :--- | | **Día** | Todos los **jueves** | | **Inicio** | 00:00 hs | | **Deadline** | 08:00 hs (inicio de jornada de usuarios) | | **Modo** | Operador presente para resolver problemas durante la noche | | **SLA** | Todo debe estar operativo antes de las 08:00 para los usuarios de la Facultad | > ⚠️ **Restricción crítica**: Si hay fallos durante el pipeline, el operador debe resolverlos antes de las 08:00. El objetivo de la automatización es minimizar la intervención nocturna y eventualmente permitir ejecución desatendida vía cron/timer. **Cronograma típico (actual, manual):** ``` 00:00 ━━━━━━━━━━━ Etapa 1+2 ━━━━━━━━━━━ 03:00 ━━━━━ Etapa 3 ━━━━━ ~08:00 📦 Vzdump + ⚙️ Procesamiento ☁️ Upload Nube ~3 hs | Vigilancia requerida Desatendido (rclone) ``` ## Objetivo Automatizar el ciclo completo de backup de la DTIC — actualmente un proceso manual de varias horas — en un **pipeline de 3 etapas desatendido y auditado**. ### Pipeline Operativo Completo ``` ┌──────────────────┐ ┌──────────────────────┐ ┌──────────────────┐ │ ETAPA 1 │ │ ETAPA 2 │ │ ETAPA 3 │ │ 📦 Vzdump │ → │ ⚙️ Procesamiento │ → │ ☁️ Upload Nube │ │ │ │ │ │ │ │ • Limpieza >6d │ │ • Descarga a NS8 │ │ • rclone sync │ │ • Shutdown VM │ │ • Retención local │ │ • Auto-resume │ │ • vzdump stop │ │ (mín 2 por VM) │ │ • Por subdir │ │ • Por servidor │ │ • Compresión tar.gz │ │ • OneDrive │ │ │ │ • Organiza por host │ │ │ └──────────────────┘ └──────────────────────┘ └──────────────────┘ srv-pmox1/2/3 srv-ns8 local rmOneDrive remoto ``` ### Problemática actual | Etapa | Manual Actual | Automatizado (meta) | | :--- | :--- | :--- | | **Vzdump** | GUI Proxmox, VM por VM, borrar viejos a mano | SSH vzdump batch, retención automática | | **Procesamiento** | Descarga manual, compresión, verificar archivos viejos | Descarga + retención inteligente (mín 2) + compresión | | **Upload** | Lanzar rclone, reiniciar si falla internet | rclone con reintentos y resume automático | ## Stakeholders | Rol | Persona | Visibilidad | | :--- | :--- | :--- | | **Responsable Técnico** | Lic. Ricardo MONLA | Operador directo | | **Dirección de TIC** | (Jerárquico superior) | Dashboard asíncrono | ## Nodos Involucrados ### Infraestructura de Gestión | Nodo | IP | Rol | | :--- | :--- | :--- | | [**srv-ns8**](../../../nodos/srv-ns8.md) | `10.0.10.8` | Centro de operaciones. Ejecuta ns8-bkps. | | [**srv-pmox1**](../../../nodos/srv-pmox1.md) | `10.0.10.201` | Pool master Proxmox. Gateway SSH a todas las VMs. | | [**srv-pmox2**](../../../nodos/srv-pmox2.md) | `10.0.10.202` | Nodo Proxmox secundario. | | [**srv-pmox3**](../../../nodos/srv-pmox3.md) | `10.0.10.203` | Nodo Proxmox terciario (64GB RAM). | ### VMs/CTs a Respaldar (Inventario Auditado 28/02) | Server | VMID | Nodo | OS | Grupo | Ventana | SSH VM | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | pmox1 | 101 | srvv-sitio | Ubuntu | linux | Libre | ✅ rmonla | | pmox1 | 102 | srvv-sitio0 | Debian | linux | Libre | ✅ rmonla | | pmox1 | 103 | srvv-dtic | Debian | linux | Libre | ✅ rmonla | | pmox1 | 104 | srvv-docs | Debian | linux | Libre | ✅ rmonla | | pmox1 | 112 | srvv-dns | Debian | linux | Libre | ✅ rmonla | | pmox2 | 105 | srvv-koha | Linux | linux | Libre | ✅ rmonla | | pmox2 | 108 | pcv-dasu1 | Win10 | windows | Libre | ❌ pendiente | | pmox2 | 109 | pcv-dasu2 | Win10 | windows | Libre | ❌ pendiente | | pmox2 | 110 | pcv-serviio | Win10 | windows | Libre | ❌ pendiente | | pmox3 | 111 | srvv-fenix | WinSrv 2019 | windows | 🌙 00:00-06:00 | ✅ monlaricardo | | pmox3 | 106 | srvv-uptime | Debian | lxc | Libre | ✅ rmonla | | pmox3 | 107 | srvv-data | Debian | lxc | Libre | ✅ rmonla | | pmox3 | 113 | srvv-sitio2 | Debian | lxc | Libre | ✅ rmonla | | **xen1** | — | **srvv-maurik** | **WinSrv 2019** | **windows** | **Libre** | **✅ monlaricardo** | | **xen1** | — | **srvv-sysacadweb** | **WinSrv 2008R2** | **windows** | **Libre** | **✅ monlaricardo:7022** | **Excluidos** (stopped, sin auto-inicio, en preparación): docker (100), srvv-N8N VM (114), srvv-N8N CT (115). ## Hitos Clave | Fecha | ID | Estado | Hito | | :--- | :--- | :---: | :--- | | 28/02 | INIT | ✅ | Inicialización del proyecto. Análisis de pipeline manual existente. | | — | R01-R05 | 📍 | Fase 1: Reconocimiento de campo (acceso SSH, inventario VMs, ventanas horarias) | | — | D01-D05 | 📍 | Fase 2: Procesador Vzdump remoto | | — | L01-L04 | 📍 | Fase 3: Procesamiento local con retención inteligente | | — | U01-U04 | 📍 | Fase 4: Upload a la nube con resume | | — | V01-V05 | 📍 | Fase 5: Validación end-to-end | | — | P01-P04 | 📍 | Fase 6: Producción (cron + dashboard) | ## Herramientas | Herramienta | Uso | | :--- | :--- | | **ns8-bkps v6.0** | Procesador de backups (Ruby, modular) | | **ns8-candados** | Gestión de secretos y autorización SSH | | **vzdump** | Herramienta nativa de backup de Proxmox | | **SSH** | Canal de ejecución remota | | **rclone** | Sincronización a almacenamiento cloud | | **GNU Screen** | Ejecución desatendida | ## Fases del Proyecto ### 🔍 Fase 1 — Reconocimiento de Campo > *"No se puede proteger lo que no se conoce."* | ID | Estado | Tarea | | :--- | :---: | :--- | | R01 | 📍 | Validar acceso SSH desde srv-ns8 a cada hipervisor (pmox1/2/3). | | R02 | 📍 | Auditar inventario real de VMs: `qm list` y `pct list` vs. nodos documentados. | | R03 | 📍 | Verificar que vzdump funcione remotamente desde pmox1 como pool master. | | R04 | 📍 | Documentar ventanas horarias operativas por VM (producción vs. mantenimiento). | | R05 | 📍 | Verificar/crear fichas de nodo (`nodos/*.md`) para VMs no documentadas. | --- ### 🔧 Fase 2 — Etapa 1: Procesador Vzdump (Backup Remoto) > SSH a pool master → limpieza remota → shutdown → vzdump → verificación | ID | Estado | Tarea | | :--- | :---: | :--- | | D01 | 📍 | Crear `lib/proc_vzdump.rb` con lógica de backup remoto vía SSH. | | D02 | 📍 | Retención remota: eliminar backups >6 días en `zfsDISCO1` antes de cada vzdump. | | D03 | 📍 | Apagado graceful SSH para VMs Windows (`shutdown /s /t 30`), skip si no responde. | | D04 | 📍 | Filtro de ventana horaria (skip VM si fuera de su horario). | | D05 | 📍 | Separar tareas YAML: `bkps_proxmox_linux` y `bkps_proxmox_windows`. | --- ### ⚙️ Fase 3 — Etapa 2: Procesamiento Local > Descarga desde Proxmox → retención local inteligente → compresión por host | ID | Estado | Tarea | | :--- | :---: | :--- | | L01 | ✅ | Descarga de backups desde `zfsDISCO1` a NS8 via rclone mount (ya existe en `proc_proxmox.rb`). | | L02 | 📍 | **Retención local inteligente**: antes de procesar, verificar cada directorio de VM y mantener mínimo 2 archivos (el nuevo + 1 de seguridad). Borrar los más antiguos si hay >2 con antigüedad >6 días. | | L03 | ✅ | Compresión tar.gz organizada por hostname (ya existe en `proc_proxmox.rb`). | | L04 | 📍 | Integrar retención local en el procesador Proxmox existente. | **Política de retención local:** ``` Directorio: /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes// Antes de procesar un nuevo backup: 1. Listar archivos en el directorio de la VM 2. Si hay archivos con antigüedad >6 días: → Mantener el más reciente de los viejos (seguridad) → Borrar el resto de los viejos 3. Resultado: mínimo 2 backups por VM (el nuevo + 1 de seguridad) ``` --- ### ☁️ Fase 4 — Etapa 3: Upload a la Nube > rclone sync a OneDrive con reintentos y resume automático | ID | Estado | Tarea | | :--- | :---: | :--- | | U01 | ✅ | Sync a OneDrive: `bkps-SERVIDORes`, `bkps-ANTIGUOS`, `bkps-USERs` (ya existe en `sync_rclone.rb`). | | U02 | ✅ | Reintentos automáticos: `--retries 5 --retries-sleep 10s --timeout 30m` (ya implementado). | | U03 | 📍 | **Resume automático**: si rclone falla a mitad, el próximo `rclone sync` retoma desde donde quedó (verificar comportamiento actual). | | U04 | 📍 | Logeo de resultado de upload con estadísticas (bytes transferidos, errores). | --- ### 🧪 Fase 5 — Validación | ID | Estado | Tarea | | :--- | :---: | :--- | | V01 | 📍 | Test vzdump con VM no-crítica (ej: srvv-docs). | | V02 | 📍 | Test retención local (verificar min 2 por directorio). | | V03 | 📍 | Test pipeline completo Linux: vzdump → procesamiento → upload. | | V04 | 📍 | Test shutdown SSH graceful en VM Windows. | | V05 | 📍 | Test de corte de internet durante upload (verificar resume). | --- ### 🚀 Fase 6 — Producción | ID | Estado | Tarea | | :--- | :---: | :--- | | P01 | 📍 | Crear comando compuesto `full_backup` (vzdump + procesamiento + upload). | | P02 | 📍 | Documentar procedimiento operativo en ADN. | | P03 | 📍 | Evaluar cron/systemd timer para ejecución programada nocturna. | | P04 | 📍 | Dashboard P2602 (si aplica). | ## Arquitectura ``` ┌──────────────────────────────────────────────────────────────────┐ │ ns8-bkps — Pipeline de Backup Completo │ │ │ │ ┌──────────────┐ │ │ │ ns8-candados │ ← RSA passphrase │ │ └──────┬───────┘ │ │ │ │ │ ═══════╪══════════════════════════════════════════════════════ │ │ ETAPA 1│ 📦 VZDUMP (remoto) │ │ ═══════╪══════════════════════════════════════════════════════ │ │ ▼ │ │ srv-ns8 ──SSH──▶ srv-pmox1 (Pool Master) │ │ │ │ │ ├─ Limpieza remota (>6 días) │ │ ├─ Shutdown VM (graceful/SSH) │ │ ├─ vzdump --mode stop --storage zfsDISCO1 │ │ └─ pmox1/pmox2/pmox3 VMs │ │ │ │ ═══════════════════════════════════════════════════════════════ │ │ ETAPA 2 ⚙️ PROCESAMIENTO (local) │ │ ═══════════════════════════════════════════════════════════════ │ │ │ │ rclone mount zfsDISCO1 → /tmp/bkps_* │ │ │ │ │ ├─ Retención local: min 2 por VM, borrar excedentes >6d │ │ ├─ Compresión: tar.gz por hostname │ │ └─ Destino: /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/ │ │ │ │ ═══════════════════════════════════════════════════════════════ │ │ ETAPA 3 ☁️ UPLOAD NUBE (remoto) │ │ ═══════════════════════════════════════════════════════════════ │ │ │ │ rclone sync → rmOneDrive:/dtic-BACKUPS/ │ │ ├─ bkps-SERVIDORes/ │ │ ├─ bkps-ANTIGUOS/ │ │ └─ bkps-USERs/ │ │ (--delete-before --retries 5 --timeout 30m) │ │ │ └──────────────────────────────────────────────────────────────────┘ ``` ## Referencias - **Bitácoras**: Consultar en DB vía `./adn/tools/run db evento:listar` - **ADN**: [Ontología](../../../adn/01_ontologia.md) | [Proyectos](../../../adn/07_proyectos.md) - **Proyecto Relacionado**: [P2601 DASUTEN](../P2601_Dasuten/P2601_dasuten.md) (srv-dasu backups)