Problema

En muchos homelabs el punto crítico es garantizar copias de seguridad consistentes de máquinas virtuales (VMs) que pueden superar el terabyte de tamaño. El escenario típico incluye un nodo Proxmox (PVE) que ejecuta varias VMs y un servidor de almacenamiento separado, como Unraid, que expone sus discos mediante NFS o SMB. El objetivo es que los backups se guarden automáticamente en el almacenamiento externo sin interrumpir la operación de las VMs.

Los síntomas habituales son:

  • Fallos intermitentes de vzdump cuando el destino es un share NFS.
  • Tiempo de backup excesivo o cuelgues al copiar discos de >1 TB.
  • Inconsistencias detectadas al restaurar una VM.
  • Dudas sobre la fiabilidad de ejecutar un servidor de backup como VM dentro del mismo hardware que las VMs a proteger.

El reto consiste en elegir una arquitectura que minimice los errores de I/O, mantenga la integridad de los datos y sea fácil de gestionar con herramientas nativas de Proxmox.

Causa

1. Latencia y saturación del NFS

Los shares NFS expuestos por Unraid suelen estar basados en discos HDD o en configuraciones RAID que no están optimizadas para I/O intensivo de backup. Cuando vzdump intenta leer y escribir bloques de varios gigabytes de forma secuencial, cualquier cuello de botella en la red (cableado, switch) o en el servidor NFS (caché de escritura) genera time‑outs y errores de “permission denied” o “no space left”.

2. Falta de deduplicación y compresión

vzdump envía la imagen completa del disco en cada ejecución. Con discos de 1 TB o más, el tráfico de red y el uso de espacio en el NAS crecen rápidamente. Sin deduplicación, los backups sucesivos almacenan datos idénticos una y otra vez, lo que acelera el agotamiento del storage y aumenta la probabilidad de fallos por falta de espacio.

3. Backup dentro del mismo host

Ejecutar un servidor de backup (por ejemplo PBS) como una VM en el mismo nodo que aloja las VMs a respaldar introduce contención de recursos: CPU, RAM y, sobre todo, acceso a disco. Cuando la VM de backup y la VM fuente compiten por el mismo pool de I/O, la latencia se dispara y los procesos de backup pueden abortar.

4. Configuración de snapshots y quiescing

En discos de gran tamaño, los snapshots pueden quedar “pendientes” si el almacenamiento subyacente no soporta operaciones de freeze adecuadamente. Esto genera inconsistencias en los archivos de backup y, en el peor caso, corrupción al restaurar.

Solución

Una arquitectura robusta combina tres pilares:

  1. Almacenamiento de backup dedicado vía NFS o iSCSI

    • Usa un pool de discos rápido (SSD o RAID‑10) en Unraid exclusivamente para backups.
    • Configura el share NFS con opciones no_root_squash, async y rsize/wsize=1048576 para maximizar el throughput.
    • Asegúrate de que la red entre Proxmox y Unraid sea al menos 1 GbE; 10 GbE es recomendado para discos >1 TB.
  2. Proxmox Backup Server (PBS) como appliance física o VM aislada

    • Si el presupuesto lo permite, despliega PBS en hardware dedicado (una mini‑PC o un servidor de bajo consumo).
    • Si solo dispones de la infraestructura actual, crea una VM de PBS con dedicación de CPU y RAM (p.ej. 4 vCPU, 8 GB RAM) y almacénala en un disco virtual SSD dentro de Unraid.
    • Activa la característica de deduplicación y compresión de PBS; reduce drásticamente el espacio necesario y acelera los backups incrementales.
  3. Integración nativa con Proxmox

    • Añade el repositorio PBS como “Datastore” en la interfaz de Proxmox.
    • Configura vzdump para usar el modo snapshot (si el storage lo permite) o stop como fallback.
    • Programa backups incrementales diarios y full semanales. Los incrementales solo transfieren los bloques modificados, lo que evita el tráfico masivo de datos.

Pasos concretos

  1. Crear el share NFS en Unraid

    • En la UI de Unraid, crea un share llamado pve-backups.
    • En “Export NFS”, habilita “Export as read/write”.
    • Añade la opción rw,sync,no_root_squash en “Extra NFS Options”.
  2. Montar el share en Proxmox (una sola vez, en todos los nodos)

    mkdir -p /mnt/pve-backups
    echo "192.168.10.20:/mnt/user/pve-backups /mnt/pve-backups nfs rw,vers=4,soft,timeo=180,rsize=1048576,wsize=1048576 0 0" >> /etc/fstab
    mount -a
    
  3. Instalar PBS (opción VM)

    • Descarga la ISO oficial de PBS.
    • Crea una VM en Proxmox con 2 vCPU, 4 GB RAM, disco de 50 GB (SSD) y conecta la NIC a la misma red que Unraid.
    • Durante la instalación, elige el directorio /mnt/pve-backups/pbs-repo como repositorio principal (el directorio debe estar montado dentro de la VM mediante NFS).
  4. Añadir el datastore PBS a Proxmox

    • En la UI de Proxmox, ve a Datacenter → Storage → Add → Proxmox Backup Server.
    • Introduce la IP de la VM PBS, el token de acceso y el nombre del datastore (pbs-datastore).
    • Marca “Content: Backup”.
  5. Configurar vzdump

    • Edita /etc/vzdump.conf para usar el nuevo datastore como destino por defecto:
    storage: pbs-datastore
    mode: snapshot
    compress: lzo
    prune-backups: keep-last=7
    
  6. Programar backups

    • En la UI, crea una tarea de backup diaria (incremental) y una semanal (full) apuntando al datastore PBS.

Cuándo aplicar esta solución

  • Discos de VM > 500 GB: la deduplicación de PBS reduce dramáticamente el tráfico y el espacio usado.
  • Entornos homelab con un único nodo Proxmox: aislar PBS en una VM dedicada evita la contención de recursos.
  • Redes con al menos 1 GbE: garantiza que los backups no saturen la red.
  • Necesidad de restauraciones rápidas: PBS permite restaurar a nivel de bloque, mucho más veloz que copiar una imagen completa desde NFS.

No aplicar si:

  • El hardware disponible es insuficiente para ejecutar una VM de PBS con recursos dedicados (CPU/RAM).
  • El NAS solo tiene discos HDD en configuración RAID‑5/6 sin caché de escritura; la latencia será demasiado alta.
  • Se prefiere una solución “cold backup” donde las VMs se apagan antes de copiar; en ese caso vzdump con modo stop sobre NFS puede ser suficiente.

Código

# Montar NFS share (ejecutar en cada nodo Proxmox)
mkdir -p /mnt/pve-backups
mount -t nfs -o rw,vers=4,soft,timeo=180,rsize=1048576,wsize=1048576 192.168.10.20:/mnt/user/pve-backups /mnt/pve-backups

# Configuración mínima de vzdump para usar PBS
cat > /etc/vzdump.conf <<EOF
storage: pbs-datastore
mode: snapshot
compress: lzo
prune-backups: keep-last=7
EOF

# Crear tarea de backup diaria (ejemplo con CLI)
pveam update
pveam available
# Suponiendo VM ID 101
vzdump 101 --mode snapshot --storage pbs-datastore --compress lzo --schedule "0 2 * * *"

Verificación

  1. Comprobar montaje NFS

    df -h /mnt/pve-backups
    

    Debería mostrar el share con espacio libre correcto.

  2. Validar conexión PBS
    En la UI de Proxmox, verifica que el datastore PBS aparece bajo Datacenter → Storage y que muestra “Online”.

  3. Ejecutar backup de prueba

    vzdump 101 --mode snapshot --storage pbs-datastore --compress lzo --debug
    

    Observa que termina sin errores y que el backup aparece en el datastore PBS.

  4. Restaurar una VM de prueba

    • En la UI, selecciona el backup recién creado y elige “Restore”.
    • Verifica que la VM arranca correctamente y que los discos están íntegros.

Notas adicionales

  • Monitoreo: Configura alertas en Proxmox (via pveproxy o node-exporter) para detectar fallos de backup o espacio bajo en el datastore PBS.
  • Snapshots en Unraid: Si Unraid soporta snapshots a nivel de disco, habilítalos para proteger el propio storage de backup contra corrupción.
  • Retención: Ajusta la política prune-backups según la capacidad del NAS; una regla típica es mantener 7 incrementales y 4 full.
  • Seguridad: Usa TLS entre Proxmox y PBS (opción “Enable TLS” al crear el datastore) y restringe el acceso NFS a la IP del nodo Proxmox.
  • Escalabilidad: Cuando el número de VMs crezca, considera migrar PBS a hardware dedicado o a un nodo de almacenamiento con NVMe para acelerar los deduplicados.