Problema
Instalar Proxmox VE por primera vez en un servidor de escritorio o workstation suele generar dudas sobre la arquitectura de almacenamiento, la configuración de red y la estrategia de backups. El patrón típico es: un hardware potente (CPU multi‑core, RAM DDR5, SSD NVMe) se combina con una única unidad para el sistema operativo y otra para datos, pero la distribución de particiones, el tipo de filesystem y la forma de exponer la red a las máquinas virtuales pueden quedar sin una guía clara. El resultado frecuente son cuellos de botella de I/O, pérdida de datos tras reinicios inesperados o dificultad para migrar VMs entre nodos.
Causa
- Elección de filesystem sin considerar redundancia – Usar ext4 en un solo disco para datos críticos expone a fallos de hardware.
- Bridge de red mal aislado – Conectar todas las VMs al mismo bridge sin VLAN o firewall interno genera conflictos de IP y exposición innecesaria.
- Instalación del host en el mismo disco que las VMs – El sistema operativo compite por I/O con las máquinas virtuales, reduciendo el rendimiento de los servicios (SIEM, Home Assistant, Jellyfin, etc.).
- Ausencia de snapshots o backups automáticos – En entornos de pruebas, los cambios frecuentes hacen que la restauración manual sea costosa.
- Configuración de CPU y memoria sin afinación – Proxmox permite asignar sockets y cores; una asignación genérica puede saturar la CPU host o dejar recursos sin usar.
Solución
1. Separar el boot del almacenamiento de datos
- Boot SSD (500 GB – 1 TB): Instalar Proxmox en una unidad dedicada. Formatear con
ext4obtrfs(sin RAID). - Pool de datos (4 TB NVMe): Crear un pool ZFS con
raid0(si solo hay un disco) oraid1/raidz1si se añaden discos laterales. ZFS brinda checksums, snapshots y compresión automática, ideal para logs de SIEM y bases de datos pequeñas.
2. Configurar ZFS como backend de almacenamiento
- Durante la instalación, elige “ZFS (RAID 0)” para el disco de datos.
- Después de la instalación, crea datasets específicos:
tank/vms– para discos de máquinas virtuales (compression=lz4).tank/containers– para LXC (compression=offpara evitar overhead).tank/backups– para backups (compression=zstd).
Esto permite limitar el I/O por dataset y aplicar cuotas si es necesario.
3. Red de gestión y tráfico de VMs
- Bridge
vmbr0: Conecta la NIC física avmbr0y asigna una IP estática para el host (ej. 192.168.10.10/24). - Bridge
vmbr1: Crea un segundo bridge sin IP para tráfico interno de VMs. Asigna VLANs si tu switch lo soporta (ej. VLAN 10 para Home Assistant, VLAN 20 para SIEM). - Firewall de Proxmox: Activa el firewall a nivel de nodo y de VM. Define reglas de “allow‑established” y bloquea puertos no usados.
4. Plantillas y contenedores
- Usa plantillas LXC oficiales (
ubuntu-22.04-standard,debian-11-standard) para servicios ligeros como Home Assistant o Zentyal. - Reserva al menos 2 GB de RAM y 1 vCPU para cada contenedor; ajusta según carga.
- Para aplicaciones que requieren GPU o acceso directo al hardware (ej. Frigate con aceleración de video), crea VMs con passthrough PCIe.
5. Backups automáticos
- Configura
vzdumpconmode=snapshotycompress=zstd. - Programa backups diarios a
tank/backupsy una replicación semanal a un USB externo o a un NAS mediantersync. - Habilita retención: 7 copias diarias, 4 semanales, 12 mensuales.
6. Afinación de CPU y memoria
- En la pestaña “Options” de cada VM, define
coresysocketsacorde al número de hilos físicos. - Habilita
NUMAsi la CPU tiene múltiples dies (Ryzen 9 9955HX tiene 2 dies). - Usa “Ballooning” para ajustar RAM dinámicamente y evitar sobreasignación.
7. Monitoreo básico
- Instala
prometheus-node-exporteren el host y habilita el plugin de Proxmox en Grafana. - Configura alertas para uso de I/O > 80 % en
tanko temperatura > 80 °C del CPU.
Cuándo aplicar esta solución
- Entornos homelab con un solo nodo donde se pretende ejecutar varios servicios críticos (SIEM, AD, Home Assistant).
- Hardware con al menos un SSD NVMe para el pool de datos y otro SSD para el boot.
- Necesidad de snapshots y restauraciones rápidas (p.ej., pruebas de actualizaciones de Home Assistant).
- No se requiere alta disponibilidad multi‑nodo; la solución está pensada para un solo host.
No es adecuada cuando:
- Solo se dispone de discos HDD; ZFS en HDD pierde gran parte de su ventaja.
- Se planea un clúster con migración en vivo; entonces se necesita Ceph o DRBD.
- El presupuesto es extremadamente limitado y no se puede separar discos.
Código
# Crear pool ZFS en el disco de datos (asumiendo /dev/nvme0n1)
zpool create -f -o ashift=12 tank /dev/nvme0n1
# Datasets con compresión y cuotas opcionales
zfs create -o compression=lz4 tank/vms
zfs create -o compression=off tank/containers
zfs create -o compression=zstd tank/backups
# Configurar bridge vmbr1 sin IP (edita /etc/network/interfaces)
cat <<EOF >> /etc/network/interfaces
auto vmbr1
iface vmbr1 inet manual
bridge_ports none
bridge_stp off
bridge_fd 0
EOF
systemctl restart networking
# Programar backup diario con vzdump
cat <<EOF > /etc/vzdump.conf
dumpdir /tank/backups
mode snapshot
compress zstd
mailnotification always
mailto [email protected]
EOF
Verificación
- Pool ZFS:
zpool status -v tankdebe mostrar el disco sin errores y los datasets listados. - Bridge:
brctl showdebe listarvmbr0con la NIC física yvmbr1sin puertos. - VMs: Inicia una VM de prueba y verifica que el disco provenga de
tank/vms(qm listmuestra el storage). - Backup: Ejecuta
vzdump 101 --mode snapshot --compress zstdy confirma que el archivo aparece en/tank/backups. - Monitoreo: Accede a Grafana y verifica que los métricos de
node_exporteraparecen y que las alertas no están disparadas.
Notas adicionales
- Wear leveling: En SSD NVMe, habilita
ssd_spreaden ZFS solo si el controlador muestra desgaste rápido; de lo contrario, usa la configuración por defecto. - Actualizaciones: Proxmox se actualiza con
apt update && apt full-upgrade. Después de una actualización del kernel, reinicia y verifica que el pool ZFS sigue montado. - Seguridad: Cambia el puerto por defecto del web UI (8006) y usa autenticación de dos factores si el entorno lo permite.
- Escalabilidad: Si en el futuro añades discos, convierte el pool a
raidz1conzpool addy migra los datasets; esto evita una re‑instalación completa.