Skip to content

Proxmox kernel jump

Procedimiento para upgrade de kernel mayor en nodos Proxmox (e.g. salto 6.17 → 7.0.2-4-pve ocurrido el 2026-05-16). El gotcha grande es el reboot del nodo con VMs grandes — puede quedarse colgado >10 minutos en shutdown.

Lecciones aprendidas 2026-05-16

Reboot de pmx-50 con VM 208 viva quedó atascado en "Stopping pve-guests..." durante >10min. Causa probable: timeout shutdown insuficiente para el stack Docker grande. Hubo que power-cycle físico. A partir de ahora: parar VM 208 graceful ANTES de reboot del host.

Pre-flight

```bash

Ver kernel actual y el instalado

ssh pmx-50 'uname -r; ls /boot/vmlinuz-* | sort'

Confirmar que el nuevo kernel ya está en /boot

(el upgrade apt full-upgrade deja el binario pero requiere reboot)

```

Snapshot ZFS protector antes de tocar nada:

bash ssh pmx-50 'zfs snapshot zfs-ha/ROOT/pve-1@pre-kernel-$(date +%Y%m%d)'

Lista de workloads críticos a apagar gracefully:

  • VM 208 (Docker hub, 40+ containers).
  • VM 171 (Home Assistant — puede tardar 1-2min en flush).
  • LXCs Caddy 270/271: dejarlos; HA cubre la caída de uno.
  • LXC 186 (PBS) si el reboot es en pmx-50 (donde vive PBS).

Procedimiento

1. Migrar / detener workloads críticos

```bash

Stop graceful VM 208 (espera hasta 5min)

ssh pmx-50 'qm stop 208 --timeout 300'

Verificar

ssh pmx-50 'qm status 208' # debe decir "stopped" ```

Para Home Assistant igual:

bash ssh pmx-50 'qm stop 171 --timeout 180'

2. Snapshot de configs PVE (por si el kernel nuevo rompe algo)

bash ssh pmx-50 'tar czf /root/etc-pve-pre-kernel-$(date +%Y%m%d).tgz /etc/pve'

3. Reboot

bash ssh pmx-50 'systemctl reboot'

Esperar 2-3 minutos. Monitorizar:

```bash

Desde la Mac o pmx-51

while ! ssh -o ConnectTimeout=3 pmx-50 'uname -r' 2>/dev/null; do echo "waiting..." sleep 5 done echo "pmx-50 back up" ```

4. Post-boot checks

bash ssh pmx-50 'uname -r' # nuevo kernel ssh pmx-50 'zpool status' # ZFS healthy ssh pmx-50 'pvecm status' # cluster quorum ssh pmx-50 'systemctl --failed' # nada roto ssh pmx-50 'journalctl -k -p err -b' # errores kernel

5. Arrancar workloads

bash ssh pmx-50 'qm start 208' ssh pmx-50 'qm start 171'

Verificar VM 208:

bash sleep 60 # dale tiempo a Docker ssh [email protected] 'docker ps --format "{{.Names}}: {{.Status}}" | head -20'

Si el reboot se queda atascado

Síntoma: SSH al host muere, ping responde pero ningún servicio levanta tras 10min.

```bash

Probar reset suave vía IPMI/iLO si existe

pmx-50 mini-PC NO tiene IPMI → power cycle físico

```

Pasos físicos:

  1. Mantener power button 10s para force-off.
  2. Esperar 5s.
  3. Power on.

Tras volver:

bash ssh pmx-50 'zpool status' # ZFS scrub si reporta CKSUM errors ssh pmx-50 'journalctl -b -1 -p err' # logs del boot anterior

Rollback (si el kernel nuevo rompe algo crítico)

Proxmox mantiene los últimos 2 kernels en /boot. Para arrancar con el viejo:

```bash

Lista kernels disponibles

ssh pmx-50 'proxmox-boot-tool kernel list'

Fijar el anterior como default

ssh pmx-50 'proxmox-boot-tool kernel pin 6.17.0-X-pve'

Reboot

ssh pmx-50 'systemctl reboot' ```

Plan futuro

  • IP-KVM USB (TinyPilot o similar) por nodo: evita el viaje al armario para power-cycle. Pendiente compra.
  • Ansible playbook kernel-upgrade.yml que automatice los pasos 1-2-3-5. Aún no escrito (parte de F2).