One‑liners de PowerShell que reemplazan 10 clics de la GUI (Úsalos a diario)

Cada vez que te conectas por RDP a una máquina Windows solo para “echar un vistazo rápido”, pagas un impuesto invisible: latencia, cambio de contexto y la probabilidad real de hacer clic en lo incorrecto en el servidor equivocado. Las GUIs son geniales para demostraciones y terribles para la respuesta a incidentes. Durante una caída, una GUI es como una máquina tragamonedas: sigues tirando de la palanca esperando que la próxima ventana revele la verdad.

Los one-liners de PowerShell no se tratan de ser ingeniosos. Se trata de ser rápido, repetible y auditable. Transforman “creo que está bien” en “esto es lo que dice el sistema”. Úsalos a diario y dedicarás menos tiempo a hacer clic y más tiempo a tomar decisiones que resistan en un postmortem.

Por qué ganan los one-liners en producción

Un buen one-liner hace tres cosas: consulta el sistema de registro, formatea el resultado en algo con lo que puedas razonar y hace obvia la siguiente acción. Ese es todo el punto. No es una competición de sintaxis.

La versión GUI de las tareas comunes suele ser:

  • Conectarse al host correcto (o al equivocado; aún no lo sabrás).
  • Abrir el complemento correcto.
  • Esperar a que cargue y renderice.
  • Hacer clic, filtrar, ordenar, hacer clic otra vez.
  • Tomar una captura de pantalla porque no puedes comparar fácilmente capturas.

La versión PowerShell es:

  • Ejecutar un comando que devuelve objetos estructurados.
  • Pasar por la tubería para ordenar, filtrar, agrupar.
  • Guardar la salida (o exportarla) para que puedas compararla más tarde.

Además: cada vez que copias/pegas “lo que viste en la GUI” en un ticket, estás traduciendo. La traducción introduce errores. Los datos más seguros son los que no reinterpretas.

Idea parafraseada de Gene Kim (autor sobre DevOps/operaciones): las mejoras provienen de acortar los ciclos de retroalimentación y hacer el trabajo visible. Los one-liners hacen ambas cosas cuando los usas de forma consistente.

Broma #1: Hacer clic por el Administrador del servidor durante un incidente es como depurar con una linterna: técnicamente posible, pero te vas a tropezar con algo.

Hechos y contexto histórico (breve, útil)

  • PowerShell se lanzó en 2006 como “Monad”, construido sobre objetos .NET en vez de flujos de texto plano. Por eso canaliza objetos, no cadenas.
  • WMI es anterior a PowerShell; muchas comprobaciones “modernas” de PowerShell aún envuelven clases WMI/CIM que existen desde los años 90.
  • WinRM se convirtió en el caballo de batalla remoto para el remoting de PowerShell, acercando las operaciones de Windows a flujos de trabajo tipo SSH — excepto con más Kerberos y menos sorpresas agradables.
  • PowerShell 5.1 se distribuyó con Windows 10/Server 2016 y sigue siendo el predeterminado en muchos servidores; PowerShell 7+ es separado y multiplataforma.
  • Get-WmiObject es legado; Get-CimInstance es el patrón más reciente (basado en WS-Man), generalmente más compatible con firewall y remoting.
  • Los contadores de rendimiento son antiguos pero valiosos; siguen siendo una de las formas más fiables de ver presión de CPU, memoria, disco y red en Windows.
  • Los registros de eventos son lo más cercano a una caja negra para Windows: son imperfectos, pero cuando se usan con filtros superan el “te juro que pasó”.
  • Hyper-V y Storage Spaces apostaron fuertemente por PowerShell desde temprano; muchas acciones de GUI son literalmente envoltorios alrededor de cmdlets.
  • Group Policy y Active Directory tienen cmdlets que reducen los “ajustes misteriosos” al convertir el estado de la política en datos consultables.

One-liners diarios: tareas, salidas y la decisión que tomas

A continuación hay comandos prácticos y ejecutables. Cada uno incluye (a) qué hace, (b) qué significa la salida y (c) la decisión que tomas a partir de ella. Ejecútalos localmente o de forma remota (muchos admiten -ComputerName o funcionan vía remoting).

Nota sobre los bloques de código: Los muestro como si se ejecutaran desde un prompt de shell. En la práctica los ejecutarás en PowerShell. Los comandos son PowerShell reales.

1) Comprobar espacio libre en disco (rápido, ordenable, sin el Explorador)

cr0x@server:~$ powershell -NoProfile -Command "Get-Volume | Where-Object DriveLetter | Select-Object DriveLetter,FileSystemLabel,@{n='SizeGB';e={[math]::Round($_.Size/1GB,1)}},@{n='FreeGB';e={[math]::Round($_.SizeRemaining/1GB,1)}},@{n='FreePct';e={[math]::Round(($_.SizeRemaining/$_.Size)*100,1)}} | Sort-Object FreePct | Format-Table -Auto"
DriveLetter FileSystemLabel SizeGB FreeGB FreePct
----------- -------------- ------ ------ -------
C           OS              127.9   11.8     9.2
E           Logs            500.0  210.5    42.1
F           Data           2048.0 1530.2    74.7

Qué significa: FreePct es el primer indicador de triaje. Por debajo de ~10–15% en volúmenes del sistema, deberías asumir que las cosas se romperán de formas extrañas (parches, archivos temporales, rotación de logs, volcados de crash).

Decisión: Si C: está bajo, deja de “optimizar” y comienza a liberar espacio: limpiar caches conocidos, rotar logs, mover volcados o ampliar el volumen. Si un volumen de datos está bajo, busca los mayores consumidores a continuación.

2) Encontrar directorios más grandes (la respuesta a “qué se comió mi disco”)

cr0x@server:~$ powershell -NoProfile -Command "Get-ChildItem -Directory 'E:\' -Force | ForEach-Object { $s=(Get-ChildItem $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; [pscustomobject]@{Path=$_.FullName; SizeGB=[math]::Round($s/1GB,2)} } | Sort-Object SizeGB -Descending | Select-Object -First 10 | Format-Table -Auto"
Path                 SizeGB
----                 ------
E:\IISLogs            96.41
E:\App\Cache          51.08
E:\App\Temp           23.77
E:\Windows\Installer  12.30

Qué significa: Esto es costoso en árboles grandes, pero es honesto. Úsalo cuando necesites hechos, no corazonadas.

Decisión: Si los logs dominan, arregla la retención/rotación. Si cache/temp domina, confirma si es seguro limpiar y por qué está creciendo. Si Windows\Installer crece, no borres al azar—limpia mediante métodos soportados.

3) Procesos con más CPU (Task Manager, pero scriptable)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name,Id,CPU,WorkingSet64 | Format-Table -Auto"
Name           Id      CPU WorkingSet64
----           --      --- -----------
sqlservr     2440  8123.54  9126807552
w3wp         4012  1022.10   785334272
MsMpEng      1780   331.92   402653184

Qué significa: CPU aquí es tiempo de CPU acumulado desde el inicio del proceso, no “porcentaje actual”. Responde a “qué ha estado consumiendo CPU a lo largo del tiempo”, que a menudo es lo que realmente necesitas.

Decisión: Si el mismo proceso domina y el rendimiento está actualmente mal, pasa a contadores de rendimiento para CPU en tiempo real y colas. Si es un escáner AV, considera exclusiones (con cuidado) o programar escaneos.

4) Presión de CPU en tiempo real y cola de ejecución (evita adivinar)

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Processor(_Total)\% Processor Time','\System\Processor Queue Length' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                              CookedValue
----                                              -----------
\\SERVER\processor(_total)\% processor time              87.12
\\SERVER\system\processor queue length                    14
\\SERVER\processor(_total)\% processor time              92.44
\\SERVER\system\processor queue length                    18

Qué significa: Sustentar un alto % Processor Time más una cola que se mantiene elevada sugiere contención de CPU. La cola es especialmente reveladora en máquinas con pocos núcleos.

Decisión: Si la cola se mantiene alta, identifica la carga (procesos principales, tareas programadas, AV, backup). Si es una máquina virtual, comprueba la contención en el host también. No “añadas vCPUs” sin medir el ready time del host (otro conjunto de herramientas), pero trata la cola sostenida como una señal real.

5) Presión de memoria: bytes disponibles y actividad de paginación

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                  CookedValue
----                                  -----------
\\SERVER\memory\available mbytes            312.00
\\SERVER\memory\pages/sec                    86.50
\\SERVER\memory\available mbytes            280.00
\\SERVER\memory\pages/sec                    95.00

Qué significa: Pocos MB disponibles más pages/sec sostenidos sugiere paginación activa. La paginación no es mala per se; la paginación sostenida bajo carga sí lo es.

Decisión: Si la paginación es alta durante quejas de latencia, o (a) necesitas más RAM, (b) hay una fuga de memoria, o (c) hay una caché que creció porque tu conjunto de trabajo aumentó. Valida con working sets de procesos y telemetría de la aplicación.

6) Latencia de disco y longitud de cola (los ingenieros de almacenamiento viven aquí)

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Avg. Disk sec/Write','\PhysicalDisk(_Total)\Current Disk Queue Length' -SampleInterval 2 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                                             CookedValue
----                                                             -----------
\\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.045
\\SERVER\physicaldisk(_total)\avg. disk sec/write                     0.112
\\SERVER\physicaldisk(_total)\current disk queue length               23

Qué significa: Lecturas de 45ms y escrituras de 112ms con una cola de 23 no es “aceptable”. Para muchos workloads de servidor, quieres latencias de milisegundos de un solo dígito. Hay excepciones, pero deben ser intencionales.

Decisión: Si latencia y cola son altas, identifica el volumen ocupado y luego el proceso que lo ocupa. En VMs, confirma si es problema del invitado o del host. No persigas CPU si el disco está ahogándose.

7) ¿Quién está martillando el disco? (E/S por proceso)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Select-Object Name,Id,@{n='ReadMB';e={[math]::Round($_.IOReadBytes/1MB,1)}},@{n='WriteMB';e={[math]::Round($_.IOWriteBytes/1MB,1)}} | Sort-Object WriteMB -Descending | Select-Object -First 10 | Format-Table -Auto"
Name      Id ReadMB WriteMB
----      -- ------ -------
sqlservr 2440  5120.3  9032.8
backup   3112   120.1  2201.4
w3wp     4012   980.7   610.2

Qué significa: Son contadores acumulativos. Apuntan rápidamente a los sospechosos habituales: motores de base de datos, agentes de backup, indexación, antivirus, logging descontrolado.

Decisión: Si backup o AV dominan durante horas de negocio, arregla la programación. Si el logging domina, corrige el nivel de logging o envíalo a otro volumen.

8) Comprobar qué puertos están escuchando (la GUI no está invitada)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object LocalPort | Select-Object -First 20 | Format-Table -Auto"
LocalAddress LocalPort OwningProcess
------------ --------- -------------
0.0.0.0      80        4012
0.0.0.0      135       968
0.0.0.0      443       4012
0.0.0.0      3389      1156

Qué significa: Esto responde “qué está realmente escuchando”, no “qué creemos que debería estar corriendo”. Empareja esto con nombres de procesos a continuación.

Decisión: Si un puerto crítico no está escuchando, investiga el servicio/aplicación. Si un puerto inesperado está escuchando, tienes deriva o compromiso—trátalo en serio.

9) Mapear puertos escuchando a nombres de proceso (hazlo accionable)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen | ForEach-Object { $p=Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue; [pscustomobject]@{Port=$_.LocalPort; Process=$p.Name; PID=$_.OwningProcess; Address=$_.LocalAddress} } | Sort-Object Port | Format-Table -Auto"
Port Process PID  Address
---- ------- ---  -------
80   w3wp    4012 0.0.0.0
135  svchost 968  0.0.0.0
443  w3wp    4012 0.0.0.0
3389 TermService 1156 0.0.0.0

Qué significa: Ahora “el puerto 443 está caído” se convierte en “w3wp no está corriendo”, que es la diferencia entre pánico y reparación.

Decisión: Si el PID no es el esperado, comprueba la configuración del servicio, bindings de IIS o parámetros de lanzamiento de la aplicación. Si es desconocido, no te encoges de hombros—identifica la ruta del binario.

10) Verificar que un servicio de Windows esté en ejecución (y por qué no lo está)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service -Name 'Spooler','W32Time','WinRM' | Select-Object Name,Status,StartType | Format-Table -Auto"
Name    Status  StartType
----    ------  ---------
Spooler Running Automatic
W32Time Running Automatic
WinRM   Running Automatic

Qué significa: Esto es higiene básica. Si WinRM está apagado, tu jornada de operaciones remotas se convierte en un día de viaje.

Decisión: Si un servicio crítico está detenido, revisa cambios recientes y los registros del sistema antes de reiniciarlo. Reinicios a ciegas pueden ocultar evidencia y repetir fallos.

11) Extraer los últimos 50 errores del sistema (Event Viewer es un laberinto)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; Level=2} -MaxEvents 50 | Select-Object TimeCreated,Id,ProviderName,Message | Format-Table -Wrap"
TimeCreated           Id ProviderName           Message
-----------           -- ------------           -------
02/05/2026 09:14:02  11 Disk                   The driver detected a controller error on \Device\Harddisk2\DR2.
02/05/2026 09:11:47 7031 Service Control Manager The SQLAgent$INST service terminated unexpectedly...

Qué significa: Level=2 es “Error.” Buscas patrones: errores de disco/controlador, caídas de servicios, fallos de sincronización de tiempo, reinicios de red.

Decisión: Errores de disco/controlador te desplazan de “depuración de aplicación” a “integridad de datos y ruta de hardware”. Las caídas de servicio te mueven a “qué cambió” y volcados de crash.

12) Extraer errores de aplicación para un proveedor específico (triaje dirigido)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Application Error'} -MaxEvents 20 | Select-Object TimeCreated,Id,Message | Format-Table -Wrap"
TimeCreated           Id Message
-----------           -- -------
02/05/2026 09:12:10 1000 Faulting application name: w3wp.exe...

Qué significa: Esta es la fuente “por qué se estrelló”. Verás módulos con fallos, códigos de excepción y nombres de aplicaciones.

Decisión: Si el mismo módulo falla repetidamente tras un parche o cambio de configuración, revierte o actualiza. Si es aleatorio, sospecha corrupción de memoria, controladores defectuosos o dependencias inestables.

13) Comprobar reinicios recientes y por qué (la verdad está en los logs)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; Id=1074} -MaxEvents 10 | Select-Object TimeCreated,Message | Format-Table -Wrap"
TimeCreated           Message
-----------           -------
02/04/2026 23:01:12  The process C:\Windows\System32\svchost.exe (SERVER) has initiated the restart...

Qué significa: El evento ID 1074 suele registrar reinicios iniciados por un usuario o proceso e incluye la cadena de razón si se proporcionó.

Decisión: Si los reinicios son inesperados, deja de tratar la disponibilidad como clima aleatorio. Relaciona los reinicios con ventanas de parcheo, automatizaciones u operadores. Arregla el proceso, no el síntoma.

14) Comprobar actualizaciones instaladas (nivel de parches sin hacer clic)

cr0x@server:~$ powershell -NoProfile -Command "Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID,InstalledOn,Description | Format-Table -Auto"
HotFixID  InstalledOn Description
-------   ----------- -----------
KB5034765 02/02/2026  Update
KB5034123 01/15/2026  Security Update

Qué significa: Confirmación rápida de la vigencia de parches. No es perfecto (algunos mecanismos de actualización no aparecen claramente), pero es un primer paso sólido.

Decisión: Si un bug se correlaciona con un KB reciente, ahora tienes una hipótesis creíble de rollback. Si un servidor está muy atrasado, deja de fingir que está “estable”; simplemente no está parcheado.

15) Validar resolución DNS y tipo de registro (evita el teatro de “la red está caída”)

cr0x@server:~$ powershell -NoProfile -Command "Resolve-DnsName -Name 'app01.corp.local' -Type A | Select-Object Name,Type,IPAddress | Format-Table -Auto"
Name             Type IPAddress
----             ---- ---------
app01.corp.local A    10.40.12.21

Qué significa: Si esto falla o devuelve la IP incorrecta, la mitad de tu “incidente de aplicación” es en realidad resolución de nombres.

Decisión: IP incorrecta significa DNS antiguo o registro erróneo; corrige expectativas de TTL, integración DHCP/DNS o registros manuales. Sin respuesta significa investigar servidores DNS, reenvíos o firewall.

16) Probar un servicio TCP de extremo a extremo (ping no es un health check)

cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'app01.corp.local' -Port 443 | Select-Object ComputerName,RemotePort,TcpTestSucceeded,SourceAddress | Format-List"
ComputerName     : app01.corp.local
RemotePort       : 443
TcpTestSucceeded : True
SourceAddress    : 10.40.10.55

Qué significa: Responde “puedo establecer una conexión TCP desde aquí hacia allá”. No valida certificados TLS ni la corrección de la aplicación, pero reduce rápidamente el campo del problema.

Decisión: Si TcpTestSucceeded es false, verifica reglas de firewall, ruteo, estado del listener y balanceadores. Si es true, sube en la pila: TLS, HTTP, auth, logs de la app.

17) Encontrar tareas programadas fallidas (los saboteadores silenciosos)

cr0x@server:~$ powershell -NoProfile -Command "Get-ScheduledTask | Get-ScheduledTaskInfo | Where-Object {$_.LastTaskResult -ne 0} | Sort-Object LastRunTime -Descending | Select-Object -First 15 TaskName,LastRunTime,LastTaskResult | Format-Table -Auto"
TaskName                 LastRunTime           LastTaskResult
--------                 -----------           --------------
DailyLogRotate           02/05/2026 01:00:01   2147942401
BackupSnapshot           02/05/2026 02:00:03   1

Qué significa: Resultados distintos de cero indican fallo. El código numérico suele corresponder a “archivo no encontrado”, “acceso denegado”, etc.

Decisión: Si tareas de mantenimiento fallan, espera incidentes por disco lleno y muerte por mil cortes de rendimiento. Arregla permisos, rutas y cuentas de servicio antes del próximo pico.

18) Comprobar shares SMB y quién está conectado (realidad de servidores de archivos)

cr0x@server:~$ powershell -NoProfile -Command "Get-SmbShare | Select-Object Name,Path,Description | Format-Table -Auto"
Name        Path         Description
----        ----         -----------
Finance     D:\Finance   Finance share
Profiles    E:\Profiles  User profiles

cr0x@server:~$ powershell -NoProfile -Command "Get-SmbSession | Select-Object ClientComputerName,ClientUserName,NumOpens,Dialect | Sort-Object NumOpens -Descending | Select-Object -First 10 | Format-Table -Auto"
ClientComputerName ClientUserName     NumOpens Dialect
------------------ --------------     -------- -------
WS123              CORP\j.smith             42 3.1.1

Qué significa: Así confirmas “¿alguien está usando el share ahora?” antes de mantenimiento, y ayuda a identificar un cliente que causa tormentas de locks.

Decisión: Si un cliente tiene un número absurdo de opens, investiga esa estación/aplicación. Si necesitas reiniciar un share, coordina con los usuarios en vez de arruinarles el día.

19) Comprobación de permisos: ¿quién tiene acceso a una carpeta?

cr0x@server:~$ powershell -NoProfile -Command "(Get-Acl 'D:\Finance').Access | Select-Object IdentityReference,FileSystemRights,AccessControlType,IsInherited | Format-Table -Auto"
IdentityReference     FileSystemRights               AccessControlType IsInherited
-----------------     ----------------               ----------------- -----------
CORP\Finance-Users    Modify, Synchronize            Allow             True
CORP\Domain Admins    FullControl                    Allow             True

Qué significa: Muestra entradas efectivas de ACL, incluida la herencia. Es la diferencia entre “debería funcionar” y “funciona”.

Decisión: Si falta acceso, arregla membresías de grupo o herencia en el nivel correcto. Evita ACLs únicas por usuario a menos que disfrutes de la arqueología futura.

20) Remoto: ejecutar una comprobación de salud en varios servidores (flota, no mascotas)

cr0x@server:~$ powershell -NoProfile -Command "$servers='web01','web02','web03'; Invoke-Command -ComputerName $servers -ScriptBlock { [pscustomobject]@{ ComputerName=$env:COMPUTERNAME; UptimeDays=[math]::Round((New-TimeSpan -Start (Get-CimInstance Win32_OperatingSystem).LastBootUpTime -End (Get-Date)).TotalDays,1); FreeC=[math]::Round((Get-PSDrive C).Free/1GB,1) } } | Format-Table -Auto"
ComputerName UptimeDays FreeC
------------ --------- -----
WEB01            12.4  18.7
WEB02             2.1   6.3
WEB03            56.0  22.9

Qué significa: Un comando, tres máquinas, datos consistentes. Además: WEB02 tiene poco espacio libre y se reinició recientemente. Esa correlación rara vez es accidental.

Decisión: Prioriza el outlier. No promediess y te confíes en la complacencia. Arregla WEB02 primero y luego pregunta por qué se comporta diferente.

Broma #2: La GUI dice “No responde” como si fuera un límite personal. El servidor lo dice porque está en llamas.

Guía de diagnóstico rápido: qué comprobar primero/segundo/tercero

Esta es la secuencia que uso cuando alguien dice “la app está lenta” o “el servidor se está muriendo” y el único detalle que tienes es un hostname y pavor. El objetivo no es resolver todo en 60 segundos; el objetivo es encontrar la clase de cuello de botella para dejar de adivinar.

Primero: confirma que la queja es real y está acotada

  1. Desde el lado del cliente: ¿puedes conectarte al puerto del servicio?
    cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'app01.corp.local' -Port 443 | Select-Object TcpTestSucceeded,RemoteAddress,RemotePort | Format-List"
    TcpTestSucceeded : True
    RemoteAddress    : 10.40.12.21
    RemotePort       : 443
    

    Interpretación: Si TCP falla, es red/listener/LB/seguridad. Si TCP tiene éxito, avanza hacia adentro.

  2. En el servidor: ¿está escuchando el puerto relevante y es propiedad del proceso correcto?
    cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 443 | ForEach-Object { $p=Get-Process -Id $_.OwningProcess; [pscustomobject]@{Port=$_.LocalPort; Process=$p.Name; PID=$p.Id} } | Format-Table -Auto"
    Port Process PID
    ---- ------- ---
    443  w3wp    4012
    

    Interpretación: Sin listener significa que la app está caída. Proceso equivocado significa mala configuración o algo peor.

Segundo: clasifica el cuello de botella (CPU, memoria, disco, red o “app”)

  1. Presión de CPU: % processor time + cola de procesador.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Processor(_Total)\% Processor Time','\System\Processor Queue Length' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                              CookedValue
    ----                                              -----------
    \\SERVER\processor(_total)\% processor time              91.33
    \\SERVER\system\processor queue length                    16
    

    Decisión: Si la CPU está al máximo con colas, identifica el proceso caliente y qué lo desencadenó (deploy, job, scan, tormenta de reintentos).

  2. Presión de memoria: MB disponibles + pages/sec.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                  CookedValue
    ----                                  -----------
    \\SERVER\memory\available mbytes            190.00
    \\SERVER\memory\pages/sec                   120.00
    

    Decisión: Si estás paginando mucho, espera latencia en todas partes. Captura datos de memoria de procesos; considera un reinicio controlado solo después de recopilar evidencia.

  3. Presión de disco: latencia + cola.
    cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Avg. Disk sec/Write','\PhysicalDisk(_Total)\Current Disk Queue Length' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
    Path                                                             CookedValue
    ----                                                             -----------
    \\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.060
    \\SERVER\physicaldisk(_total)\avg. disk sec/write                     0.140
    \\SERVER\physicaldisk(_total)\current disk queue length               27
    

    Decisión: Si el disco está mal, deja de buscar “consultas lentas” hasta confirmar que el almacenamiento no es el limitador. Latencia aguas arriba suele significar problema aguas abajo.

Tercero: decide “mitigar ahora” versus “investigar”

  • Mitigar ahora cuando el impacto al usuario es severo y la solución es reversible: parar un job descontrolado, limitar una cola, conmutar por error, añadir capacidad temporal, mover logs.
  • Investigar primero cuando la acción destruye evidencia: reinicios, reinicios de servicio, borrar logs, eliminar árboles temporales sin snapshots.

Usa los comandos anteriores para apoyar esa decisión y luego escribe lo que viste. Si no puedes explicar tu cadena de acciones más tarde, no operaste realmente—actuaste.

Tres mini-historias corporativas (qué salió mal, qué nos salvó)

Mini-historia 1: el incidente causado por una suposición equivocada

Heredamos un servidor de archivos Windows que “nunca tenía problemas”. La creencia compartida del equipo era que las alertas de disco detectarían cualquier cosa seria. El monitoreo alertó—eventualmente. El problema fue la suposición de que “espacio en disco” significaba “espacio libre” y que eso era todo lo que importaba.

Una mañana de lunes llegó una ola de tickets: perfiles itinerantes fallando, procesamiento de GPO lento, aplicaciones que se caían aleatoriamente cuando los usuarios iniciaban sesión. El on-call hizo lo clásico: RDP, abrir el Explorador, ver que C: tenía algunos GB libres y declarar “el disco no está lleno”. Luego reiniciaron un par de servicios. Parecía productivo. No sirvió de nada.

Ejecutamos one-liners: espacio libre en volúmenes (más o menos bien), luego logs de eventos (no bien). El log System tenía errores de disco/controlador y advertencias NTFS. El disco no estaba lleno; estaba enfermo. La latencia se disparaba, las escrituras se bloqueaban y el servidor de archivos estaba en efecto con I/O a cámara lenta.

La suposición equivocada fue sutil: “el espacio es el único problema de disco”. La salud del disco no es una variable única; es latencia, colas, tasas de error y estabilidad de la ruta. Cuando el almacenamiento empieza a fallar, Windows no siempre te da un pop-up amistoso. Te da timeouts y riesgo de corrupción.

La solución no fue un reinicio heroico. Failover de cargas, implicar al equipo de almacenamiento y reemplazar una ruta HBA defectuosa. La lección quedó: las comprobaciones de capacidad son necesarias; las comprobaciones de comportamiento del disco previenen desastres.

Mini-historia 2: la optimización que salió mal

Un ingeniero bienintencionado quería búsquedas de logs más rápidas. Activó logging verborreico en la aplicación y luego escribió una tarea programada para comprimir logs cada hora y moverlos a un share central. El plan sonaba razonable: archivos más pequeños, troubleshooting centralizado, menos uso de disco.

En producción se convirtió en una caída lenta. El job de compresión se lanzaba en la hora en punto en cada servidor—al mismo tiempo. La CPU se disparó, escrituras en disco se inflaron y el share central quedó saturado. El rendimiento de metadatos del share se desplomó porque miles de archivos se creaban, renombraban y eliminaban en ráfagas.

Los usuarios no se quejaron de “compresión de logs”. Se quejaron de que la app “se cuelga cada hora por unos minutos”. Ese síntoma está hecho a medida para el diagnóstico erróneo. La gente culpó GC, locks de BD y jitter de red. El verdadero culpable fue una “optimización” que creó contención sincronizada.

Lo demostramos con dos comprobaciones rápidas: longitud de cola de disco y E/S por proceso. El proceso de compresión no era el mayor consumidor de CPU todo el día, pero dominaba la E/S de escritura durante la ventana exacta de las quejas. Ese es el tipo de evidencia que zanja discusiones.

Lo arreglamos espaciando los horarios con jitter, reduciendo la verbosidad y cambiando el pipeline: comprimir una vez al día fuera del host, no cada hora en cada nodo. Las optimizaciones que ignoran patrones de contención no son optimizaciones; son denegación de servicio distribuida con mejores intenciones.

Mini-historia 3: la práctica aburrida pero correcta que salvó el día

Un equipo distinto ejecutaba una práctica pequeña pero disciplinada: cada mañana ejecutaban un corto “latido de servidor” contra su flota. Uptime, espacio libre, fecha del último parche y errores principales del log System. No lo hacían por amor a los dashboards. Lo hacían porque odiaban las sorpresas.

Un martes el latido marcó un solo servidor con una combinación extraña: espacio en E: cayendo rápido, fallos en tareas programadas y advertencias repetidas de un agente de backup. Nadie se quejaba aún. Ese es el punto clave: el sistema susurró antes de gritar.

Investigaron los fallos de la tarea programada y descubrieron que la tarea de rotación de logs empezó a fallar tras un cambio de permisos. Los logs se acumulaban, el backup fallaba por directorios de logs gigantes y el volumen se proyectaba a llenarse en 24 horas.

Arreglaron el ACL, ejecutaron la rotación manual una vez y validaron que la tarea programada terminó con éxito. El servidor nunca llegó a 0 bytes libres, el backup se recuperó y el negocio no se enteró.

Esto no es sexy. No gana premios de arquitectura. Gana el sueño del on-call. La práctica aburrida no fue el script; fue el hábito de mirar las mismas señales cada día y tratar las desviaciones como reales.

Errores comunes: síntomas → causa raíz → arreglo

1) “El servidor está lento” pero la CPU parece bien

Síntoma: Utilización de CPU moderada, pero usuarios ven timeouts y bloqueos.

Causa raíz: Latencia/colade disco o presión de paginación es el cuello de botella. La CPU está esperando, no trabajando.

Arreglo: Revisa contadores de disco y memoria primero, no las sensaciones del Task Manager.

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\PhysicalDisk(_Total)\Avg. Disk sec/Read','\PhysicalDisk(_Total)\Current Disk Queue Length','\Memory\Pages/sec' -SampleInterval 2 -MaxSamples 3 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -Auto"
Path                                                             CookedValue
----                                                             -----------
\\SERVER\physicaldisk(_total)\avg. disk sec/read                      0.080
\\SERVER\physicaldisk(_total)\current disk queue length               31
\\SERVER\memory\pages/sec                                            110

2) “El puerto está abierto” porque ping funciona

Síntoma: Alguien insiste que el servicio es accesible porque ICMP responde.

Causa raíz: Ping prueba ICMP, no la accesibilidad de la aplicación. Firewalls, balanceadores y listeners no se preocupan por tu ping exitoso.

Arreglo: Prueba el puerto TCP real desde la red del cliente real.

cr0x@server:~$ powershell -NoProfile -Command "Test-NetConnection -ComputerName 'db01.corp.local' -Port 1433 | Select-Object TcpTestSucceeded,RemoteAddress,RemotePort | Format-List"
TcpTestSucceeded : False
RemoteAddress    : 10.40.20.10
RemotePort       : 1433

3) “El servicio está en ejecución” pero la app sigue caída

Síntoma: Get-Service dice Running; los usuarios aún no pueden conectarse.

Causa raíz: El servicio está vivo pero no está escuchando, está atascado o enlazado a la interfaz/puerto equivocado. O una dependencia (cert, backend) está rota.

Arreglo: Valida el listener y mapea al proceso; revisa errores en el log de Aplicación.

cr0x@server:~$ powershell -NoProfile -Command "Get-NetTCPConnection -State Listen -LocalPort 443 | Measure-Object | Select-Object Count"
Count
-----
0

4) “Limpamos espacio” y ahora la app no arranca

Síntoma: Después de borrar “basura”, fallan servicios, instaladores o parches.

Causa raíz: Alguien borró archivos que no eran basura (cache de instalador, estado de app, bases de datos, backups de configuración de IIS).

Arreglo: Sé específico: identifica la fuente de crecimiento, corrige la retención y borra solo objetivos seguros. Si debes borrar, toma snapshot primero (snapshot de VM o shadow copy según política).

5) Remoting funciona a algunos servidores pero no a otros

Síntoma: Invoke-Command falla intermitentemente en la flota.

Causa raíz: WinRM deshabilitado, reglas de firewall diferentes, fallos de resolución DNS o configuración de hosts no confiables.

Arreglo: Estandariza: asegura que el servicio WinRM esté en ejecución, que las reglas de firewall sean consistentes y que el DNS sea correcto. Evita poner “TrustedHosts = *” como parche rápido en producción.

6) Ordenar la salida parece incorrecto

Síntoma: Ordenas por una columna y el orden es absurdo (por ejemplo, “100” antes que “9”).

Causa raíz: Formateaste demasiado pronto; convertiste objetos en cadenas con Format-Table antes de ordenar.

Arreglo: Ordena objetos primero, formatea al final.

Listas de verificación / plan paso a paso

Rutina diaria de operaciones de 10 minutos (hazlo, no lo debatas)

  1. Chequeo de espacio: encuentra volúmenes bajo 15% libre; crea un ticket antes de que sea urgente.
  2. Escaneo de errores: últimos 50 errores del System; identifica repeticiones (disco, resets de NIC, caídas de servicios).
  3. Sanidad de parches: confirma hotfixes recientes; marca máquinas que se desvían.
  4. Fallas de tareas: tareas programadas con resultados distintos de cero; arregla las aburridas primero.
  5. Chequeo de outliers: ejecuta el mismo one-liner en la flota y busca el servidor raro.

Lista de verificación de respuesta a incidentes (primeros 15 minutos)

  1. Confirmar alcanzabilidad: Test-NetConnection al puerto del servicio desde un segmento de red relevante.
  2. Confirmar listener/proceso: Get-NetTCPConnection + mapeo a proceso.
  3. Clasificar cuello de botella: cola de CPU, paginación de memoria, latencia/cola de disco.
  4. Capturar evidencia: procesos principales, slice de logs de eventos, muestras de contadores.
  5. Mitigar de forma segura: solo después de poder justificar la acción con datos observados.

Lista de verificación para verificación de cambios (después de despliegues/parches)

  1. Confirmar estado de servicios: servicios esperados en ejecución, tipos de inicio correctos.
  2. Confirmar puertos: puertos esperados escuchando, propiedad de binarios esperados.
  3. Confirmar logs: escanear errores de Application y System desde el tiempo de despliegue.
  4. Confirmar rendimiento: comparar instantáneas de contadores (latencia, colas) con la línea base.

Preguntas frecuentes

1) ¿Debo usar Windows PowerShell 5.1 o PowerShell 7?

Usa 5.1 cuando necesites máxima compatibilidad con módulos antiguos en Windows Server. Usa 7 cuando controles el entorno y quieras características modernas y paridad multiplataforma. En empresas mixtas acabarás usando ambos.

2) ¿Por qué sigues usando contadores de rendimiento en vez de solo ver procesos “top”?

Porque los contadores te dicen presión (colado, latencia, paginación) mientras que las listas de procesos te dicen atribución. Necesitas ambos. Si solo miras procesos puedes perder la clase real de cuello de botella por completo.

3) ¿Está muerto Get-WmiObject?

No está muerto, solo es legado. Prefiere Get-CimInstance para patrones de scripting más nuevos, especialmente con remoting. Pero en la vida real seguirás viendo WMI en scripts de terceros y de proveedores.

4) ¿Por qué algunos contadores muestran números que no coinciden con lo que veo en el Administrador de tareas?

Muestreo y definiciones difieren. Task Manager a menudo muestra valores instantáneos o promediados; los contadores pueden muestrearse en intervalos distintos y representar modelos de cálculo diferentes. Haz explícito tu intervalo de muestreo y toma múltiples muestras.

5) ¿Puedo ejecutar estos one-liners contra servidores remotos sin RDP?

Sí, con remoting de PowerShell (Invoke-Command) cuando WinRM esté configurado. Para algunas comprobaciones de red también puedes consultar desde tu propia máquina (p. ej., Test-NetConnection). Estandariza WinRM pronto; compensa cada semana.

6) ¿Cómo evito problemas de “formatear demasiado pronto”?

Regla: realiza todo el filtrado/ordenado/agrupado mientras la tubería todavía contiene objetos, luego formatea al final. Si haces pipe a Format-Table, básicamente terminas el flujo de datos.

7) ¿Los one-liners son seguros para pegar en producción?

Los de solo lectura son generalmente seguros. Cualquier cosa que borre, pare servicios, reinicie o cambie configuración debe convertirse en un script con logging y modo dry-run. Si no puedes explicar su radio de impacto, no lo ejecutes.

8) ¿Cuál es la forma más rápida de detectar “este servidor es diferente” en un clúster?

Ejecuta el mismo comando en todos los nodos y ordena por la métrica que te importa (espacio libre, uptime, conteo de errores, valores de contadores). Los outliers son donde se esconde la verdad.

9) Mi comando es lento (como los cheques de tamaño de directorio). ¿Qué hago?

Usa las comprobaciones costosas solo cuando sean necesarias y delimítalas: rutas más pequeñas, menos objetivos recursivos o ejecútalas en horas no pico. Para monitoreo continuo instrumenta logs y cuotas en vez de volver a escanear el filesystem cada vez.

Próximos pasos prácticos

Haz esto mañana por la mañana:

  1. Elige cinco servidores que tocas semanalmente. Ejecuta el one-liner de flota para uptime y espacio libre. Encuentra el outlier y arréglalo.
  2. Añade una muestra de contadores de 2 minutos para cola de CPU, paginación y latencia de disco a tus notas estándar de incidentes. Deja de diagnosticar a partir de capturas de pantalla.
  3. Construye (o toma prestado) un pequeño script de “pulse check” con los comandos de arriba y ejecútalo diariamente. El objetivo no es la perfección; es notar la deriva antes de que sea una caída.
  4. Cuando necesites la GUI, úsala intencionalmente: para configuración profunda, no para descubrimiento impulsado por pánico.

Si quieres una prueba de toque para saber si tu práctica de ops está mejorando: mide con qué frecuencia puedes responder “¿qué cambió?” con evidencia en menos de cinco minutos. Los one-liners no son magia. Son palanca.

SR-IOV vs Passthrough: cuándo IOMMU ayuda (y cuándo no)

Unos días tu NIC “virtualizada” consume 2% de CPU y entrega 25 Gbps como un campeón. Otros días pierde paquetes bajo carga, la latencia p99 parece un sismógrafo, y alguien sugiere “simplemente activa SR-IOV” como si fuera un solvente universal.

Esta es la versión adulta de esa conversación: qué te ofrecen realmente SR-IOV y el passthrough, qué hace en realidad la IOMMU, y las formas específicas en que puedes empeorar el rendimiento mientras te felicitas por “ir más cerca del hardware”.

El modelo mental: PFs, VFs, DMA y por qué existe la IOMMU

Definamos términos como lo hace tu kernel, no como lo hacen las presentaciones comerciales.

Passthrough (VFIO) en un párrafo

El passthrough PCI asigna una función PCIe completa a una VM (o carga tipo contenedor) para que el invitado sea el propietario del dispositivo. En Linux/KVM esto suele ser VFIO: el host enlaza el dispositivo a vfio-pci, y QEMU lo mapea dentro del invitado. El dispositivo realiza DMA hacia la memoria del invitado, y la IOMMU (si está activada) aplica que el DMA se mantenga dentro de lo que el invitado puede tocar.

SR-IOV en un párrafo

SR-IOV divide una función PCIe física (PF) en múltiples funciones PCIe ligeras (VFs). Cada VF parece un dispositivo PCI distinto con su propio espacio de configuración, BARs y colas (depende de la implementación), por lo que puedes entregar VFs individuales a invitados. La PF queda gestionada por el host (o a veces por una “VM de servicio”), y la VF es “principalmente hardware”, con perillas de política expuestas a través del driver de la PF y el firmware.

Dónde encaja el DMA, y por qué debería importarte

Tanto SR-IOV como el passthrough tratan de una cosa: quién puede ejecutar DMA y cuán caro es hacerlo de forma segura. Los dispositivos no “envían paquetes”; hacen DMA de descriptores y cargas útiles hacia/desde memoria. Si un dispositivo puede hacer DMA a cualquier lugar, puede leer tus secretos, garabatear en tu kernel y convertir la fiabilidad en danza interpretativa.

Esto es el trabajo de la IOMMU: traducir y limitar las direcciones DMA del dispositivo, similar a cómo la MMU de la CPU limita la memoria de un proceso. Sin IOMMU, los dispositivos “asignados” todavía pueden hacer DMA en la memoria del host si fallas en el aislamiento. Con IOMMU, pagas un coste de traducción (a veces pequeño, a veces no), pero obtienes contención real y características como el remapeo de interrupciones.

Regla práctica: si haces passthrough en producción y no usas una IOMMU, no eres “valiente”, simplemente estás corriendo con un modelo de amenazas distinto al que crees.

Broma #1: La IOMMU es como el portero de un club nocturno para el DMA. No evita malas decisiones adentro, pero mantiene fuera a los extraños aleatorios.

Qué significa realmente “rendimiento” aquí

La gente dice “SR-IOV es más rápido que virtio.” A veces. Pero necesitas especificar en qué eje de rendimiento:

  • Rendimiento (Throughput) (Gbps o IOPS) con un presupuesto de CPU dado
  • Latencia en la cola (p99/p999), especialmente bajo contención
  • Jitter (variación), que rompe aplicaciones casi en tiempo real
  • Eficiencia de CPU (ciclos por paquete/IO)
  • Rendimiento operativo (qué tan rápido puedes depurar y restaurar servicio)

SR-IOV y passthrough pueden ser fantásticos para throughput y eficiencia de CPU. También pueden empeorar la latencia en las colas si manejas mal las interrupciones, no fijas afinidades y dejas que el planificador del host improvise.

SR-IOV vs passthrough: las verdaderas compensaciones

Aquí la versión opionada:

  • Si necesitas que una VM posea un dispositivo de forma completa (GPU, FPGA, HBA): usa passthrough. SR-IOV no siempre está disponible, y aun cuando lo esté, la paridad de características es desigual.
  • Si necesitas que muchos invitados obtengan rendimiento de NIC cercano al metal: usa SR-IOV, pero trata la gestión de VFs como parte de tu plataforma, no como un hobby por VM.
  • Si necesitas flexibilidad (migración en caliente, snapshots, hosts heterogéneos): prefiere virtio y acepta el coste de CPU, a menos que tengas una razón probada para no hacerlo.

Seguridad y aislamiento: no cuentan la misma historia

Con passthrough, el invitado obtiene el dispositivo completo. Eso es estupendo para rendimiento y acceso a funciones, y terrible para compartir. El aislamiento depende mucho de la corrección de la IOMMU y del comportamiento del dispositivo. Con SR-IOV compartes un dispositivo físico entre inquilinos, y el aislamiento depende de la implementación de VF de la NIC (separación de colas, limitación de tasa, comprobaciones anti-spoof) además del driver de la PF. Algunas VFs pueden hacer cosas que no deberían si dejas activadas banderas tipo “trust”.

Guía práctica:

  • SR-IOV multi-inquilino es viable, pero debes configurar explícitamente el chequeo anti-spoof de VF, la aplicación de VLAN y los ajustes de trust en la PF.
  • Passthrough para invitados no confiables está fuertemente ligado a IOMMU y remapeo de interrupciones. Si falta cualquiera, estás aceptando riesgo.

Operaciones: SR-IOV gana hasta que deja de ganar

SR-IOV parece operacionalmente “simple” porque puedes repartir VFs como caramelos. Luego aparecen las complejidades ocultas:

  • Provisionamiento de VFs y recolección de basura en reinicios
  • Incompatibilidades firmware/driver que solo fallan bajo ciertos conteos de colas
  • Brechas de observabilidad (las herramientas del host ven estadísticas de PF; el invitado ve estadísticas de VF; nadie ve “end-to-end”)
  • Dirección de paquetes y afinidad de IRQ que se vuelven requisito de plataforma

Passthrough es más simple en el sentido de que un invitado posee el dispositivo y depuras una sola pila. Es más difícil en el sentido de que pierdes muchas comodidades de la virtualización (migración, instantáneas, sobresuscripción) y puedes dejar inservible la red de un host si pasas la cosa equivocada.

El secreto sucio: ambos enfoques siguen necesitando higiene Linux aburrida

Fijado de CPU, alineación NUMA, afinidad de IRQ, dimensionado de anillos y decisiones sensatas de MTU siguen importando. SR-IOV no te salva de una VM que corre en el socket equivocado, y passthrough no te salva de un driver de invitado configurado como experimento científico.

Cuándo la IOMMU ayuda (y por qué)

1) Contención: el aislamiento DMA es el objetivo principal

Sin IOMMU, un dispositivo que haga DMA puede acceder a direcciones de memoria física que no pretendías. En passthrough, eso puede significar que un dispositivo controlado por el invitado (o la programación del dispositivo desde el invitado) pueda leer o corromper la memoria del host. Con IOMMU, el espacio de direcciones DMA (IOVA) se traduce mediante tablas que controla el host.

En SR-IOV, las VFs también hacen DMA. Si asignas VFs a invitados, aún quieres la IOMMU activada para confinar el DMA de la VF a la memoria del invitado. Sí, la NIC está “virtualizada”, pero sigue siendo un dispositivo que hace DMA.

2) Remapeo de interrupciones: menos formas de arruinar tu día

Las IOMMUs modernas también pueden remapear interrupciones (MSI/MSI-X) para que un dispositivo no inyecte interrupciones de formas extrañas. Eso importa cuando pasas dispositivos a invitados. Sin remapeo de interrupciones, puedes verte forzado a modos inseguros, o tendrás comportamiento inestable según el soporte de la plataforma.

3) Puedes activar funciones seguras que de otro modo serían peligrosas

Si haces asignación de dispositivos a escala, la IOMMU es la capa habilitadora para “este dispositivo solo toca lo que debe tocar”. Desbloquea hacer passthrough para cargas de trabajo reales, no solo para montajes de laboratorio.

4) Algunas rutas de rendimiento las asumen

Contrario a la intuición: a veces dejar la IOMMU desactivada dispara retrocesos del kernel, desactiva el remapeo de interrupciones o fuerza diferentes estrategias de mapeo DMA. En algunas plataformas, “IOMMU off” no es “modo rápido”, es “modo compatibilidad”. No eliges la aventura; tu placa base ya lo decidió.

Cuándo la IOMMU no ayuda (y puede perjudicar)

Ahora la parte que a la gente no le gusta oír: la IOMMU no es un interruptor mágico de rendimiento. Es una característica de seguridad con implicaciones de rendimiento. A veces esas implicaciones son despreciables. A veces son tu p99.

1) Redes de alta tasa con paquetes pequeños pueden amplificar la sobrecarga de traducción

Si tu carga son paquetes de 64 bytes a PPS muy altos, el coste de mapear/desmapear DMA, la presión de TLB en la IOMMU y los fallos de IOTLB pueden aparecer. Los buenos drivers amortizan costes de mapeo (mapeos de larga vida, hugepages, batching). Las configuraciones malas churnean mapeos y lo pagan.

2) Hugepages mal configuradas o fragmentación de memoria lo empeoran

Si la memoria que respalda al invitado está fragmentada, la IOMMU necesita más entradas de tabla de páginas, lo que aumenta la probabilidad de fallos de IOTLB. Con hugepages (y fijado correcto), reduces la huella de traducción. Por eso a veces “SR-IOV es más lento que virtio”: no es SR-IOV; es la estrategia de mapeo y la disposición de memoria.

3) Puedes perder funciones que asumías disponibles

Algunos entornos activan la IOMMU en un modo que rompe o desactiva DMA peer-to-peer (dispositivo a dispositivo), o cambia cómo funcionan ATS/PRI (cuando están presentes). Para stacks de almacenamiento que dependen de ciertos patrones DMA, puedes ver regresiones que parecen “bug de driver” pero son cambios de comportamiento de la traducción.

4) Depurar se complica porque los modos de fallo se multiplican

Cuando la IOMMU está involucrada, una falla puede ser:

  • bug del driver del invitado
  • bug de VFIO/QEMU en el host
  • bug/quirk de la IOMMU de la plataforma
  • desajuste de configuración de BIOS
  • extrañezas de agrupamiento ACS
  • comportamiento del firmware bajo carga

Broma #2: Activar IOMMU para “arreglar rendimiento” es como comprar una llave dinamométrica para arreglar una rueda pinchada. Herramienta útil, problema equivocado.

Hechos interesantes y contexto histórico

  • Las IOMMU preceden al hype de la nube. Aparecieron en varias formas para resolver límites de direccionamiento DMA y aislamiento mucho antes de que “multi-tenant” fuera un pitch comercial.
  • El direccionamiento DMA solía ser una limitación real. Los primeros sistemas tenían dispositivos que solo podían DMA en rangos de direcciones limitados; las IOMMUs ayudaron remapeando las direcciones visibles para el dispositivo.
  • Intel VT-d y AMD-Vi hicieron la asignación de dispositivos mainstream. El remapeo DMA de hardware se convirtió en una característica estándar para servidores que querían virtualización seria.
  • MSI-X cambió el juego para NICs de alto rendimiento. Múltiples vectores de interrupción permitieron diseños de cola-por-core, en los que SR-IOV confía en gran medida.
  • SR-IOV es un estándar de PCI-SIG. No es magia del proveedor, aunque las implementaciones de los proveedores varían enormemente en calidad y controles.
  • “Grupos IOMMU” tratan sobre límites de aislamiento. El agrupamiento refleja lo que el hardware puede aislar; no es una invención de Linux, es Linux exponiendo la realidad.
  • ACS fue el héroe incómodo. Access Control Services influyen cómo los dispositivos se aíslan detrás de switches PCIe; la falta de ACS puede forzar grupos IOMMU más grandes.
  • Virtio maduró porque las operaciones lo exigieron. Virtio no es solo “emulación más lenta”. Evolucionó en una interfaz paravirtual sólida y depurable que encaja con operaciones en la nube.
  • DPDK y la red en espacio de usuario elevaron expectativas. Una vez que la gente vio line rate en espacio de usuario, exigieron comportamiento similar en VMs, lo que empujó la adopción de SR-IOV.

Guía de diagnóstico rápido

El objetivo es encontrar el cuello de botella rápido, no “entender PCIe por completo”. Eso puede esperar.

Primero: confirma qué desplegaste realmente

  1. ¿La carga usa virtio, VF SR-IOV o passthrough completo?
  2. ¿La IOMMU está activada y funcionando (no solo “activada en BIOS”)?
  3. ¿Se remapean las interrupciones y está habilitado MSI-X?

Segundo: localiza el dominio de contención

  1. Alineación NUMA: ¿la VM está en el mismo socket que el dispositivo PCIe?
  2. Afinidad de IRQ: ¿las interrupciones están fijadas a CPUs apropiadas?
  3. Número de colas: ¿tienes suficientes colas, o demasiadas?

Tercero: decide si estás limitado por CPU, IRQ o DMA/IOMMU

  1. Si la CPU está al tope en softirq/ksoftirqd: es procesamiento de paquetes e interrupciones/steering.
  2. Si la CPU está bien pero la p99 es mala: revisa migración de IRQ, estados de energía y churn de IOTLB.
  3. Si el throughput está capado sospechosamente: verifica velocidad/ancho del enlace, negociación de PCIe y offloads.

Cuarto: demuéstralo con un experimento dirigido

  • Fija vCPUs y memoria al nodo NUMA del dispositivo, vuelve a probar.
  • Cambia afinidad de IRQ para colas VF, vuelve a probar.
  • Alterna hugepages (o 2M vs 1G) en un host, vuelve a probar.

No cambies cinco variables y declares victoria. Así se crea folklore.

Tareas prácticas: comandos, salidas y decisiones

Estos son los chequeos que realmente ejecuto cuando alguien dice “SR-IOV va lento” o “passthrough es inestable”. Cada tarea incluye la decisión que tomo según la salida.

Task 1: Confirmar que IOMMU está habilitada en el kernel

cr0x@server:~$ dmesg | egrep -i 'iommu|vt-d|amd-vi|dmari' | head -n 25
[    0.142311] DMAR: IOMMU enabled
[    0.142355] DMAR: Host address width 46
[    0.142360] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.381200] DMAR-IR: Enabled IRQ remapping in x2apic mode

Qué significa: Tienes remapeo DMA (DMAR: IOMMU enabled) y remapeo de interrupciones (DMAR-IR).

Decisión: Si no ves estas líneas, no finjas que existe aislamiento de passthrough. Arregla BIOS/args del kernel antes de diagnosticar rendimiento.

Task 2: Verificar cmdline del kernel para modo IOMMU y trampas comunes

cr0x@server:~$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.8.0 root=/dev/mapper/vg0-root ro quiet intel_iommu=on iommu=pt mitigations=auto

Qué significa: intel_iommu=on la habilita; iommu=pt usa mapeos de passthrough para dispositivos del host (a menudo reduce sobrecarga para dispositivos no asignados).

Decisión: Para cargas mixtas, iommu=pt suele ser sensato. Si depuras aislamiento, puedes quitarlo temporalmente para ver si cambia el comportamiento—pero documenta por qué.

Task 3: Identificar si usas VFs SR-IOV o dispositivos completos

cr0x@server:~$ lspci -D | egrep -i 'ethernet|network' | head
0000:3b:00.0 Ethernet controller: Intel Corporation Ethernet Controller XXV710 for 25GbE SFP28
0000:3b:02.0 Ethernet controller: Intel Corporation Ethernet Virtual Function
0000:3b:02.1 Ethernet controller: Intel Corporation Ethernet Virtual Function

Qué significa: La PF es 3b:00.0, y las VFs existen en 3b:02.x.

Decisión: Si esperabas SR-IOV pero solo ves PFs, no estás usando SR-IOV; estás depurando la cosa equivocada.

Task 4: Confirmar el conteo de VFs creadas en la PF

cr0x@server:~$ sudo cat /sys/class/net/enp59s0f0/device/sriov_numvfs
8

Qué significa: La PF tiene 8 VFs habilitadas actualmente.

Decisión: Si es 0, no existen VFs. Si es mayor que lo planeado, puedes estar agotando recursos de la PF (colas, TCAM, interrupciones). Reduce el conteo de VFs y vuelve a probar estabilidad.

Task 5: Comprobar grupos IOMMU para límites de aislamiento

cr0x@server:~$ for g in /sys/kernel/iommu_groups/*; do echo "Group $(basename $g):"; ls -1 $g/devices; done | sed -n '1,40p'
Group 12:
0000:3b:00.0
0000:3b:00.1
Group 13:
0000:3b:02.0
0000:3b:02.1

Qué significa: Dispositivos en el mismo grupo no pueden aislarse de forma segura entre sí por la plataforma.

Decisión: Si tu dispositivo objetivo comparte un grupo con algo que no puedes pasar (como un controlador de almacenamiento), no uses passthrough en ese diseño de host. Arregla la topología PCIe o acepta virtio.

Task 6: Comprobar qué driver está enlazado (lado host)

cr0x@server:~$ lspci -nnk -s 0000:3b:02.0
3b:02.0 Ethernet controller [0200]: Intel Corporation Ethernet Virtual Function [8086:154c]
	Subsystem: Intel Corporation Device [8086:0000]
	Kernel driver in use: vfio-pci
	Kernel modules: iavf

Qué significa: VF está enlazada a VFIO para passthrough; el módulo driver nativo de VF existe pero no está activo en el host.

Decisión: Si esperabas red del host vía VF, ver vfio-pci es correcto. Si esperabas que el host lo usara, esto es tu mala configuración.

Task 7: Verificar que la VM realmente tiene el dispositivo adjunto (QEMU/libvirt)

cr0x@server:~$ sudo virsh domiflist vm-netperf-01
Interface  Type     Source     Model   MAC
-------------------------------------------------------
vnet0      bridge   br0        virtio  52:54:00:aa:bb:cc

Qué significa: Esta VM sigue usando virtio en un bridge, no SR-IOV VF passthrough.

Decisión: Deja de debatir afinado de SR-IOV. Primero adjunta el dispositivo VF y confirma los cambios de driver dentro del invitado.

Task 8: Comprobar velocidad/ancho negociado PCIe (cap común silencioso)

cr0x@server:~$ sudo lspci -s 3b:00.0 -vv | egrep -i 'LnkSta:|LnkCap:' | head -n 4
LnkCap:	Port #0, Speed 8GT/s, Width x8
LnkSta:	Speed 8GT/s, Width x4

Qué significa: La tarjeta soporta x8 pero está funcionando a x4. Eso es un problema físico/topológico/BIOS, no un bug de driver.

Decisión: Si los límites de throughput alinean con x4, mueve la tarjeta, cambia el riser o arregla la bifurcación de lanes en BIOS. No afines colas para solucionar lanes faltantes.

Task 9: Comprobar localidad NUMA del dispositivo PCI

cr0x@server:~$ cat /sys/bus/pci/devices/0000:3b:00.0/numa_node
1

Qué significa: El dispositivo está atado al nodo NUMA 1.

Decisión: Coloca las vCPUs y la memoria de la VM en el nodo 1. Si no puedes, acepta latencia más alta y menor throughput, o mueve el dispositivo al otro socket.

Task 10: Encontrar IRQs de colas VF y ver dónde caen

cr0x@server:~$ grep -E 'enp59s0f0v0|iavf|vfio|msi' /proc/interrupts | head -n 8
 178:     120433          0          0          0  IR-PCI-MSI 524288-edge      vfio-msi[0]
 179:     118901          0          0          0  IR-PCI-MSI 524289-edge      vfio-msi[1]
 180:     119552          0          0          0  IR-PCI-MSI 524290-edge      vfio-msi[2]

Qué significa: Todas las interrupciones están golpeando la CPU0 (primera columna) porque la afinidad no está configurada, o irqbalance hizo una elección “creativa”.

Decisión: Fija IRQs a CPUs locales a la NIC, y idealmente reparte colas entre cores aislados. Luego vuelve a probar la latencia p99.

Task 11: Comprobar estado de irqbalance (puede ayudar o perjudicar)

cr0x@server:~$ systemctl status irqbalance --no-pager
● irqbalance.service - irqbalance daemon
     Loaded: loaded (/lib/systemd/system/irqbalance.service; enabled)
     Active: active (running) since Mon 2026-02-02 09:14:12 UTC; 1 day ago

Qué significa: irqbalance está en ejecución y puede mover IRQs dinámicamente.

Decisión: Para cargas sensibles a la latencia SR-IOV/passthrough, considera deshabilitar irqbalance y fijar afinidad explícitamente—especialmente en hosts con aislamiento de CPU.

Task 12: Comprobar configuración de hugepages (host)

cr0x@server:~$ grep -i huge /proc/meminfo | head -n 6
HugePages_Total:    2048
HugePages_Free:     1980
HugePages_Rsvd:       12
Hugepagesize:       2048 kB
Hugetlb:         4194304 kB

Qué significa: Hay hugepages de 2M disponibles y mayormente libres.

Decisión: Si persigues sobrecarga IOMMU/IOTLB, las hugepages son una palanca. Si HugePages_Free es bajo, podrías estar fragmentando o filtrando reservas; arregla antes de culpar a SR-IOV.

Task 13: Comprobar si la VM usa hugepages (libvirt)

cr0x@server:~$ sudo virsh dumpxml vm-netperf-01 | egrep -n 'memoryBacking|hugepages|locked'
112:  
113:    
114:    
115:  

Qué significa: La memoria de la VM está respaldada por hugepages y bloqueada (reduce churn de páginas y sorpresas).

Decisión: Si usas SR-IOV/passthrough y te importa la latencia en la cola, esto suele valer la pena. Si no puedes bloquear memoria, espera variabilidad bajo presión del host.

Task 14: Buscar fallos de IOMMU (te asombrarías)

cr0x@server:~$ dmesg | egrep -i 'DMAR:.*fault|IOMMU.*fault|AMD-Vi:.*Event' | tail -n 10
[12345.671234] DMAR: [DMA Read] Request device [3b:02.0] fault addr 0x7f3a1000 [fault reason 0x05] PTE Read access is not set

Qué significa: El dispositivo intentó hacer DMA fuera de los mapeos permitidos, o los mapeos se están derribando incorrectamente.

Decisión: Para. Esto no es un tema de afinado; es un tema de corrección. Revisa versiones de VFIO/QEMU, bugs de drivers y si estás hot-unplugging dispositivos de forma insegura.

Task 15: Comprobar offloads de NIC dentro del invitado (las VFs SR-IOV varían)

cr0x@server:~$ sudo ethtool -k ens5 | egrep -i 'rx-checksumming|tx-checksumming|tso|gso|gro|lro'
rx-checksumming: on
tx-checksumming: on
tcp-segmentation-offload: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off

Qué significa: Los offloads están activados donde se espera; LRO está desactivado (a menudo bueno para latencia/observabilidad).

Decisión: Si offloads están inesperadamente off, pagarás CPU. Si están on pero ves trazas de paquetes raras, considera deshabilitar GRO para depurar—no como solución permanente.

Task 16: Verificar anti-spoofing y settings de trust de VF en la PF (host)

cr0x@server:~$ sudo ip link show enp59s0f0
2: enp59s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 3c:fd:fe:aa:bb:cc brd ff:ff:ff:ff:ff:ff
cr0x@server:~$ sudo ip link show enp59s0f0 vf 0
vf 0 MAC 52:54:00:11:22:33, vlan 100, spoof checking on, link-state auto, trust off, query_rss on

Qué significa: La VF tiene VLAN aplicada, chequeo anti-spoof activado, trust desactivado. Es un buen valor por defecto para entornos compartidos.

Decisión: Si aparece trust on “porque arregló algo”, exige una razón concreta y añade controles compensatorios. Trust tiende a propagarse como moho.

Task 17: Confirmar governor/frecuencia CPU (causa común de latencia en cola)

cr0x@server:~$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave

Qué significa: La CPU puede bajar frecuencia agresivamente, dañando la p99.

Decisión: Para hosts dataplane de alto rendimiento, usa el governor performance o tuning de plataforma apropiado. Si no puedes, deja de esperar latencia determinista.

Task 18: Comprobar presión de softirq (salud del dataplane de red)

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.8.0 (server)  02/04/2026  _x86_64_  (32 CPU)

02:11:01 PM  CPU   %usr %nice %sys %iowait %irq %soft %steal %idle
02:11:02 PM  all   12.5  0.0   9.8    0.0   2.1  18.7    0.0   56.9

Qué significa: Alto %soft sugiere procesamiento heavy de softirqs; común en cargas con muchos paquetes.

Decisión: Añade colas/cores, mejora afinidad IRQ/RPS/XPS, o mueve a SR-IOV/DPDK si virtio es el cuello de botella. Si ya estás en SR-IOV, esto apunta a steering y colocación de CPU.

Tres mini-historias corporativas desde el campo

Mini-historia 1: El incidente causado por una suposición equivocada

Estaban desplegando passthrough de NIC para un servicio sensible a latencia. El pitch era claro: “elimina el switch virtual, reduce overhead, baja la p99.” El host de prueba se veía bien. El canario se veía bien. Entonces la producción se volvió… embrujada.

Un cluster empezó a reiniciarse bajo carga. No todos los nodos. Solo los de una fila de rack concreta. Los logs mostraban fallos DMA esporádicos y a veces un bloqueo duro sin pánico limpio del kernel. La primera suposición del equipo fue la habitual: “bug del driver.” Actualizaron drivers invitados. Actualizaron QEMU. Alternaron offloads. Las apariciones continuaron.

La suposición equivocada fue creer que “IOMMU habilitada en BIOS” significaba “IOMMU realmente funciona end-to-end”. En los nodos afectados, la opción de BIOS estaba presente pero la plataforma venía con remapeo de interrupciones deshabilitado por una versión de firmware más antigua. Linux activó remapeo DMA pero no pudo activar remapeo de interrupciones limpiamente en esa revisión de hardware.

Habían pasado un dispositivo que generaba MSI-X en masa bajo carga máxima, y sin garantías de remapeo correcto, la plataforma se comportó de forma impredecible. No era que la IOMMU “estuviera apagada”; era que una parte crítica de ella no estaba fiable.

La solución fue aburrida: estandarizar perfiles de BIOS, añadir una puerta de arranque que falle el nodo si DMAR-IR no está habilitado, y rechazar programación de passthrough en esos hosts. El rendimiento mejoró después, pero el incidente terminó porque dejaron de mentirse sobre las capacidades de la plataforma.

Mini-historia 2: La optimización que salió mal

Otra compañía ejecutaba VFs SR-IOV para cargas de alto throughput. Alguien notó que la sobrecarga de traducción IOMMU podría contribuir al coste de CPU en PPS extremos. Encontraron iommu=pt y decidieron “optimizar” más: deshabilitar la IOMMU para el host, porque “los invitados sólo tienen VFs y la NIC ya los aísla”.

Al principio pareció una victoria. Microbenchmarks mejoraron ligeramente y los gráficos de CPU se veían más bonitos. Luego la carga real golpeó: corrupción de datos esporádica dentro de un servicio respaldado por almacenamiento que también usaba otro dispositivo passthrough en algunos nodos. No en todos—solo donde la programación alineó una combinación particular de asignación de dispositivos y presión de memoria.

Sin IOMMU, un dispositivo mal comportado (o una interacción bug del sistema) podía DMA en memoria que no debía. La corrupción no era ruidosa. Fue sutil: fallos de checksum raros, crashes ocasionales de procesos, transiciones de estado “imposibles”. El peor tipo de outage: el que hace dudar de las leyes de la física.

Revirtieron el cambio y la corrupción cesó. El postmortem no fue amable: la optimización perseguía una sobrecarga teórica mientras eliminaba la barandilla de seguridad. El coste de la “ganancia” fueron días de respuesta a incidentes, revisiones de riesgo y una nueva política: IOMMU se queda activada; si el rendimiento es un problema, arregla la estrategia de mapeo (hugepages, pinning) o cambia el diseño del dataplane.

Mini-historia 3: La práctica aburrida pero correcta que salvó el día

Un equipo de plataforma tenía una flota mixta: algunos hosts para virtualización genérica (virtio en todas partes), y una pool más pequeña para SR-IOV de alto rendimiento y passthrough ocasional de GPU. Tenían reputación de ser terriblemente estrictos sobre perfiles de host.

Cada arranque ejecutaba una lista de verificación: validar IOMMU habilitada, validar remapeo de interrupciones, validar ancho de enlace NIC, validar versiones de firmware contra una whitelist, validar conteo de VFs, validar restricciones de localidad NUMA. Si alguna comprobación fallaba, el nodo se drenaba automáticamente. Sin heroísmos. Sin negociación.

Un día, llegó un lote de servidores con una sutil diferencia de topología PCIe. La NIC negoció x4 en lugar de x8 en una configuración de ranura. Nada “se rompió”. Ninguna alerta del driver de NIC saltó. Las aplicaciones simplemente se volvieron más lentas de una forma que parecía “pico de tráfico”.

La puerta de arranque lo detectó: LnkSta no coincidía con lo esperado. Los nodos nunca entraron en la pool SR-IOV. Las cargas se quedaron en hosts sanos, y el único “incidente” fue un ticket a ops del datacenter para mover las tarjetas a las ranuras correctas.

La práctica que los salvó no fue un tweak ingenioso del kernel. Fue la negativa a aceptar degradación silenciosa. La ingeniería de fiabilidad es, en gran parte, decidir qué no tolerarás.

Errores comunes: síntomas → causa raíz → solución

1) Síntoma: “Passthrough está habilitado, pero el rendimiento es peor que virtio”

Causa raíz: La VM está en NUMA remoto respecto al dispositivo; interrupciones caen en CPUs incorrectas; memoria no fijada; churn de IOTLB por memoria fragmentada.

Solución: Alinea vCPUs y memoria al nodo NUMA de la NIC, habilita hugepages + memoria bloqueada, fija afinidad IRQ, ajusta número de colas para empatar con cores.

2) Síntoma: “La VF SR-IOV pierde enlace aleatoriamente o se bloquea bajo carga”

Causa raíz: Bug del driver/firmware de PF desencadenado por conteo de VFs, conteo de colas o combinación de offloads; a veces exacerbado por resets.

Solución: Actualiza firmware de NIC + driver de PF; reduce VFs/colas; evita combos exóticos de offloads; añade health checks que recrean VFs en fallo.

3) Síntoma: “Adjuntar VFIO falla: el dispositivo está ocupado / no puede resetear”

Causa raíz: El dispositivo está enlazado al driver del host o forma parte de un grupo con otras funciones en uso; limitaciones de FLR/reset.

Solución: Desenlaza correctamente, asegura aislamiento por grupo IOMMU, evita pasar dispositivos sin semántica de reset fiable, o usa SR-IOV en lugar de eso.

4) Síntoma: “Los grupos IOMMU son enormes; no puedo aislar la NIC”

Causa raíz: La topología PCIe carece de ACS, o los dispositivos comparten componentes ascendentes que no pueden aplicar aislamiento.

Solución: Cambia ranura/topología, usa hosts con switches ACS-capables, o deja de intentar passthrough seguro en esa plataforma.

5) Síntoma: “Alta latencia p99 solo durante contención en el host”

Causa raíz: Escalado de frecuencia CPU, migración de IRQ, reclaim de memoria, o vecinos ruidosos en el mismo socket.

Solución: Aislamiento CPU para cores del dataplane, governor performance, deshabilitar irqbalance (o configurarlo), reservar hugepages, bloquear memoria, establecer políticas NUMA reales.

6) Síntoma: “Paquetes se pierden en el invitado, el host parece bien”

Causa raíz: Hambruna de colas VF, tamaños de ring insuficientes, moderación de interrupciones demasiado agresiva, o driver del invitado mal ajustado.

Solución: Aumenta tamaños de ring, ajusta coalescing, asegura vectores MSI-X, asegura suficientes colas, fija vCPUs y valida versión del driver del invitado.

7) Síntoma: “Seguridad dice que SR-IOV es inseguro”

Causa raíz: Políticas de trust/spoof/VLAN de VF dejadas permisivas; malentendido del riesgo de hardware compartido.

Solución: Aplica políticas de VF en la PF, restringe características por inquilino, audita asignación de dispositivos, asegura IOMMU activada y documenta el modelo de amenazas.

Listas de verificación / planes paso a paso

Lista A: Elegir SR-IOV vs passthrough (toma de decisiones, no sensaciones)

  1. ¿Necesitas compartir el dispositivo entre muchos invitados? SR-IOV. Si el dispositivo no soporta bien SR-IOV, replantea el hardware.
  2. ¿Necesitas características completas del dispositivo (GPU, modos avanzados HBA, herramientas del proveedor)? Passthrough.
  3. ¿Necesitas migración en vivo/snapshots? Prefiere virtio. SR-IOV/passthrough complican o bloquean esto.
  4. ¿Tolerancia al riesgo multi-inquilino baja? Passthrough con IOMMU y chequeos de plataforma estrictos, o evita asignación de dispositivos.
  5. Madurez operativa: Si no puedes estandarizar BIOS/firmware/versiones del kernel, no hagas asignación de dispositivos a escala.

Lista B: Plan de despliegue SR-IOV (qué hacer en orden)

  1. Estandariza ajustes de BIOS (VT-d/AMD-Vi on, SR-IOV on, configuraciones PCIe consistentes).
  2. Estandariza cmdline del kernel y valida vía puertas dmesg.
  3. Elige un conteo de VFs por PF basado en límites de hardware y necesidades de colas (no lo rellenes por defecto).
  4. Define política de VF: spoof checking on, trust off por defecto, política de VLAN explícita.
  5. Define política de colocación NUMA para hosts SR-IOV y hazla cumplir vía scheduler.
  6. Implementa estrategia de afinidad IRQ; no confíes en la suerte.
  7. Canary bajo patrones reales de tráfico (PPS + tamaños de paquete + conteo de flujos).
  8. Observa p99/p999, drops, resets y fallos IOMMU; avanza solo cuando sea aburrido.

Lista C: Plan de despliegue Passthrough (no quemes tu host)

  1. Verifica que IOMMU y remapeo de interrupciones estén habilitados y estables tras reinicios.
  2. Verifica grupos IOMMU y asegura que el dispositivo pueda aislarse.
  3. Verifica soporte de reset del dispositivo (FLR o comportamiento de reset del proveedor) funciona de forma fiable.
  4. Enlaza dispositivo a vfio-pci y confirma que servicios del host no lo necesitarán.
  5. Fija vCPUs y memoria de la VM al nodo NUMA del dispositivo; usa hugepages si te importa jitter.
  6. Instrumenta: recopila fallos IOMMU en dmesg, errores PCIe AER y métricas de distribución de interrupciones.
  7. Tener rollback: desacoplar el dispositivo, volver a enlazar al driver del host, restaurar rutas de red/almacenamiento.

Preguntas frecuentes

1) ¿SR-IOV siempre es más rápido que virtio?

No. SR-IOV suele reducir CPU por paquete y mejorar throughput, pero puede perder en latencia en cola si IRQ/NUMA/mapeo de memoria están descuidados. Virtio puede ser “suficientemente rápido” y mucho más fácil de operar.

2) ¿El passthrough siempre es la opción más rápida?

A menudo para propiedad de dispositivo single-tenant, sí. Pero “más rápido” depende de colocación y manejo de interrupciones. Un dispositivo passthrough en NUMA remoto puede ser más lento que una ruta virtio bien afinada.

3) ¿Necesito IOMMU para SR-IOV?

Si asignas VFs a invitados, quieres IOMMU para aislamiento DMA. Si mantienes todo en el host, tiene menos que ver con aislamiento—pero muchas plataformas siguen comportándose mejor con una configuración IOMMU consistente.

4) ¿Qué hace realmente iommu=pt?

Típicamente configura mapeos identidad/passthrough para dispositivos del host para que no paguen sobrecarga de traducción, mientras permite mapeos traducidos para dispositivos asignados. Es un compromiso común entre rendimiento y seguridad.

5) ¿Por qué mis grupos IOMMU son “demasiado grandes”?

Porque tu hardware no puede aislar esos dispositivos entre sí. La topología PCIe y el soporte ACS determinan el agrupamiento. Linux reporta el límite en el que confía, no el que desearías tener.

6) ¿Puedo migrar en caliente una VM que usa SR-IOV o passthrough?

No en la forma habitual de “simplemente funciona”. La asignación de dispositivo liga la VM a un estado de hardware específico. Algunos ecosistemas tienen enfoques especializados de migración, pero trátalo como un proyecto especial, no como una casilla para marcar.

7) ¿Cuál es la causa principal de reportes “SR-IOV es inestable”?

Incompatibilidad firmware/driver y sobrecommit de recursos en la NIC (demasiadas VFs, demasiadas colas, settings demasiado agresivos). La segunda causa es operacional: VFs no recreadas consistentemente tras reinicio o eventos de enlace.

8) ¿La IOMMU añade latencia medible?

Puedes verla, especialmente cuando los mapeos churnean o los fallos de IOTLB aumentan. Con memoria fijada, hugepages y mapeos estables, la sobrecarga a menudo es pequeña comparada con el resto del dataplane.

9) ¿Debería deshabilitar irqbalance en hosts SR-IOV/passthrough?

Para cargas sensibles a latencia, sí—a menos que hayas configurado irqbalance explícitamente para respetar aislamiento y localidad. La migración dinámica de IRQ y una p99 determinista no son amigas.

10) ¿Cuál es la arquitectura “segura por defecto” más simple?

Virtio para cómputo general, una pool separada SR-IOV para cargas de rendimiento, y passthrough solo para dispositivos que realmente requieran propiedad completa. Mantén perfiles de host estrictos y validados.

Siguientes pasos prácticos

Toma la decisión basada en tu realidad operativa, no en la captura de pantalla de tu benchmark.

  1. Elige una línea base: Si actualmente usas virtio, primero consigue higiene NUMA/IRQ limpia. Si no, no sabrás qué mejoró SR-IOV.
  2. Activa IOMMU correctamente: Confirma remapeo DMA y remapeo de interrupciones en dmesg. Bloquea tu flota con esa condición.
  3. Elige el modelo adecuado: SR-IOV para aceleración NIC compartida, passthrough para propiedad single-tenant de dispositivo, virtio por flexibilidad.
  4. Operativiza: Estandariza firmware, BIOS, args del kernel, conteos de VF y política de seguridad de VF. Automatiza chequeos; drena en caso de desajuste.
  5. Mide lo correcto: Rastrea latencias p99/p999 y pérdidas, no solo throughput promedio. La mayoría de outages viven en las colas.

Una cita para pegar en un post-it, porque resume todo el trabajo: “La esperanza no es una estrategia.” — General Gordon R. Sullivan

Clúster Proxmox: por qué Corosync parece estar bien mientras tu clúster se degrada

Abres la interfaz web de Proxmox y se queda colgada. Las migraciones se estancan. HA hace flapping. Las máquinas virtuales están funcionando—hasta que dejan de hacerlo.
Entonces revisas lo obvio: el quorum de Corosync. Dice que todo está bien.

Ahí está la trampa. Corosync puede estar “bien” en el sentido estrictamente limitado—membresía y quorum intactos—mientras
el resto del clúster se asfixia por latencia, contención de bloqueos del sistema de archivos, paradas del almacenamiento o deriva del tiempo.
Corosync es el pulso. Tu clúster aún puede estar perdiendo vida.

Qué es Corosync (y qué no es)

Corosync proporciona membresía de clúster y mensajería. En Proxmox VE, es el componente que decide
quién está en el grupo y si el grupo tiene quorum. No garantiza que tu plano de gestión
responda, que tu almacenamiento esté sano, o que tus hipervisores puedan realmente realizar trabajo al ritmo
que necesitas.

Proxmox apila muchas cosas sobre la base de que “los nodos pueden verse entre sí”:
pmxcfs (el sistema de archivos de clúster de Proxmox que almacena el estado de configuración),
pveproxy y pvedaemon (servicios API/UI),
pve-ha-lrm/crm (lógica HA),
pvestatd (estadísticas),
y lo que sea que esté haciendo hoy tu backend de almacenamiento (ZFS, iSCSI, NFS, Ceph, LVM local… escoge tu pesadilla favorita).

La membresía de Corosync puede permanecer estable incluso mientras:

  • pmxcfs está atascado esperando operaciones FUSE y no puedes confirmar cambios de configuración
  • la red pierde paquetes o sufre picos de latencia—simplemente no lo suficiente como para perder el quorum
  • la deriva de tiempo provoca raros fallos de autenticación y fencing
  • paradas del almacenamiento congelan los hilos de I/O de QEMU y las migraciones expiran
  • los demonios de gestión están bloqueados por DNS, PAM/LDAP o llamadas al sistema de archivos

Dos hechos secos que salvan carreras

  1. El quorum es binario; la salud no lo es. Puedes tener quorum y aun así ser inutilizable.
  2. La mayoría de los “problemas de clúster” en Proxmox son en realidad problemas de latencia. No siempre es la red—a menudo es el almacenamiento o la contención de CPU que se manifiestan como latidos perdidos en otro lado.

Datos interesantes y contexto histórico (porque los sistemas arrastran equipaje)

  • Corosync evolucionó desde el proyecto OpenAIS, que buscaba implementar conceptos de especificación de interfaz de aplicación para clustering en Linux.
  • Totem es la capa de comunicación de grupo de Corosync; su mecanismo de token es por qué el ajuste de “token timeout” te hace sentir poderoso—y luego arrepentido.
  • El quorum en Corosync es un problema de votación (vía votequorum) más que un sistema de puntuación de salud; no mide la capacidad de respuesta a nivel de servicio.
  • pmxcfs es un sistema de archivos distribuido basado en FUSE; es excelente para archivos de configuración pequeños y terrible para tu paciencia cuando se bloquea.
  • El “sistema de archivos de clúster” de Proxmox no es un sistema de archivos general; es un almacén replicado de configuraciones. Tratarlo como almacenamiento compartido es cómo terminas en terapia.
  • La prevención de split-brain es un sesgo de diseño en la mayoría de pilas de clúster; Proxmox tiende a preferir “detener escrituras” sobre “posiblemente corromper cosas en silencio”.
  • El punto de dolor histórico de CEPH fue la amplificación de escrituras pequeñas; las versiones modernas mejoraron mucho, pero tu red y tus discos siguen decidiendo si es un Ferrari o un cortacésped.
  • La planificación del kernel Linux y la presión de I/O pueden crear modos de fallo de “todo parece activo pero nada se mueve”—especialmente en hipervisores sobrecargados.

Una cita que vale la pena tener pegada en el monitor:
La esperanza no es una estrategia. — Gen. Gordon R. Sullivan

Broma #1: Que Corosync diga “quorum” mientras tu GUI se cuelga es como que el detector de humo diga “pilas OK” durante un incendio en la cocina.

Guía de diagnóstico rápido

Cuando el clúster se está muriendo, no tienes tiempo para leer logs interpretativos. Necesitas un camino corto hasta el cuello de botella.
Aquí está el orden que encuentra causas raíz rápido en entornos reales.

Primero: ¿es un problema de membresía de red o una parada del plano de gestión?

  • Comprueba la estabilidad de la membresía de Corosync (pvecm status, corosync-cfgtool -s).
  • Comprueba si pmxcfs es responsivo (pvecm updatecerts se colgará si el fs de clúster está atascado; además lecturas simples en /etc/pve pueden bloquear).
  • Comprueba si la API/UI está bloqueada (estado systemd y journal para pveproxy/pvedaemon).

Segundo: ¿cuál es la fuente dominante de latencia ahora mismo?

  • Latencia/pérdida de paquetes de red (ping -f no es la respuesta; usa mtr, ethtool -S, contadores del switch).
  • Latencia de almacenamiento (ZFS zpool iostat -v, Ceph ceph -s y slow ops, estadísticas de cliente NFS).
  • Steal de CPU / cola de ejecución / presión de memoria (el promedio de carga no basta; revisa vmstat, top, pressure-stall-information si está disponible).

Tercero: ¿algo está “reintentando para siempre” de forma “útil”?

  • Consultas DNS y LDAP (inicios de sesión en la GUI que se quedan colgados, llamadas a la API que se estancan).
  • Multipath oscilante (rutas iSCSI que mueren y vuelven como una telenovela).
  • Backfill/recuperación de Ceph saturando el clúster (está “más o menos sano” pero lo suficientemente lento como para que todo expire).

Decisiones rápidas de triaje

  • Si la membresía es estable pero pmxcfs está bloqueado: trátalo como una interrupción del plano de control. Deja de cambiar la configuración y encuentra el bloqueo.
  • Si hay picos de latencia en el almacenamiento: detén migraciones, detén backups, detén cualquier cosa que multiplique I/O. Restaura la línea de base primero.
  • Si hay pérdida/latencia de red: prioriza estabilizar la red del ring antes de “ajustar timeouts de token.” El ajuste es un último recurso, no una cura.

Modos de fallo donde Corosync parece saludable

1) pmxcfs está atascado: Corosync está bien, pero las escrituras de configuración bloquean

pmxcfs es donde Proxmox almacena la configuración a nivel de clúster: definiciones de VM, configuraciones de almacenamiento, reglas de firewall, ámbitos de usuario y más.
Está respaldado por la mensajería de Corosync y se monta en /etc/pve usando FUSE.

Cuando pmxcfs está lento o atascado, verás síntomas como:

  • Acciones en la GUI se quedan colgadas (crear una VM, editar almacenamiento, cambiar HA)
  • Comandos qm/pct se congelan cuando tocan configs
  • SSH funciona; las VMs siguen corriendo; pero la gestión está “bajo el agua”

Causas comunes: presión extrema de CPU, deadlocks en FUSE, paradas de disco que afectan al journaling local, o retrasos en mensajes de corosync que aún no rompen el quorum.

2) Los timeouts de token no están rotos; tu presupuesto de latencia sí

El mecanismo de token de Corosync espera entrega oportuna de mensajes. Puedes tener quorum estable incluso con picos intermitentes de latencia que
no superan tu token timeout—pero esos picos siguen siendo lo bastante largos para congelar migraciones, backups y decisiones de HA.

Un patrón clásico: “arreglaste” corosync aumentando el token timeout. La membresía deja de hacer flapping.
Mientras tanto, el clúster ahora tolera latencias tan malas que todo lo demás sufre. No arreglaste la red.
Solo enseñaste a Corosync a dejar de quejarse.

3) Paradas del almacenamiento congelan el hipervisor, no a Corosync

Los incidentes más desagradables en Proxmox son inducidos por el almacenamiento. Una escritura de VM se bloquea en el kernel o en QEMU,
el host experimenta I/O wait, y de repente todos tus demonios de gestión responden como si estuvieran hablando desde un túnel.

Corosync aún puede intercambiar latidos si la CPU se programa ocasionalmente. Eso basta para mantener el quorum.
Pero no es suficiente para un sistema con respuesta aceptable.

4) Deriva del tiempo: el veneno lento

Problemas de NTP/chrony no siempre rompen el quorum. Pero pueden romper todo aquello que asume monotonicidad temporal:
handshakes TLS, autenticación, correlación de logs, decisiones de fencing, y “¿por qué ese nodo pensó que estaba 5 minutos en el futuro?”

También perseguirás fantasmas en los logs porque los eventos aparecen fuera de orden. Eso no es “divertido.” Es cómo pierdes horas.

5) HA no está “caída”, está indecisa bajo fallos parciales

HA de Proxmox depende de una visión coherente de recursos, estados de nodos y disponibilidad de almacenamiento.
Con quorum intacto pero latencia subyacente, HA puede quedarse atascada: intentando repetidamente iniciar recursos, esperando bloqueos, o rechazando acciones
porque no puede verificar el estado con seguridad. Desde fuera parece “HA rota.” Desde dentro está siendo cautelosa.

6) La GUI es lenta porque pveproxy espera algo tonto

Culpables comunes: búsquedas DNS inversas, timeouts LDAP/PAM, lecturas bloqueadas en /etc/pve,
o un camino de manejo de peticiones saturado y monohilo en algún punto.

Tareas prácticas: comandos, salidas, decisiones

Estas son las comprobaciones que realmente ejecuto cuando estoy de guardia. Cada tarea incluye qué significa la salida y qué decisión tomar.
Ejecútalas en al menos dos nodos: uno “bueno” y uno “malo.” Las diferencias son tu pista.

Task 1: Verify quorum and expected votes

cr0x@server:~$ pvecm status
Cluster information
-------------------
Name:             prod-cluster
Config Version:   42
Transport:        knet
Secure auth:      on

Quorum information
------------------
Date:             Tue Feb  4 10:12:31 2026
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000001
Ring ID:          1.2c
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate

Significado: Corosync ve 3 nodos, el quorum está logrado, los votos coinciden con la expectativa.
Decisión: Si esto es “Yes” pero aún tienes problemas, deja de culpar al quorum y comienza a medir latencia, pmxcfs y almacenamiento.

Task 2: Check Corosync link status and MTU mismatches

cr0x@server:~$ corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
        id      = 10.10.10.11
        status  = ring 0 active with no faults
RING ID 1
        id      = 10.10.20.11
        status  = ring 1 active with no faults

Significado: Los rings están arriba. “No faults” no significa “buena latencia.”
Decisión: Si los rings muestran fallos de forma intermitente, arregla primero problemas L2/L3 (bonding, MTU, errores del switch) antes de tocar el ajuste de Corosync.

Task 3: Read Corosync’s own complaints (they’re subtle)

cr0x@server:~$ journalctl -u corosync -S -2h --no-pager | tail -n 30
Feb 04 09:41:02 pve01 corosync[1267]:   [KNET  ] link: host: 2 link: 0 is down
Feb 04 09:41:03 pve01 corosync[1267]:   [KNET  ] host: 2 link: 0 recovered
Feb 04 09:58:19 pve01 corosync[1267]:   [TOTEM ] Token has not been received in 1800 ms
Feb 04 09:58:19 pve01 corosync[1267]:   [TOTEM ] A processor failed, forming new configuration.

Significado: Caídas cortas de enlace y retrasos de token. Puedes permanecer quorate mientras ocurren reconfiguraciones.
Decisión: Si ves advertencias de token, trátalo como un incidente real: investiga errores de red, inanición de CPU o tormentas de IRQ.

Task 4: Confirm pmxcfs is mounted and responsive

cr0x@server:~$ mount | grep /etc/pve
pve on /etc/pve type fuse.pve (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

Significado: El montaje existe. Aun así puede ser lento.
Decisión: A continuación, prueba la capacidad de lectura/escritura.

Task 5: Test whether /etc/pve operations hang

cr0x@server:~$ time ls -l /etc/pve/nodes/pve01/qemu-server | head
total 8
-rw-r----- 1 root www-data 1324 Feb  4 09:55 101.conf

real    0m0.012s
user    0m0.002s
sys     0m0.004s

Significado: Una respuesta rápida es lo normal. Si esto tarda segundos o se cuelga, pmxcfs está ahogándose.
Decisión: Si es lento/colgado en un solo nodo, sospecha presión local de recursos. Si es lento en todos los nodos, sospecha latencia de corosync o contención de pmxcfs a nivel de clúster.

Task 6: Check pmxcfs and pve services health

cr0x@server:~$ systemctl status pve-cluster pvedaemon pveproxy --no-pager
● pve-cluster.service - The Proxmox VE cluster filesystem
     Loaded: loaded (/lib/systemd/system/pve-cluster.service; enabled)
     Active: active (running) since Tue 2026-02-04 08:01:12 UTC; 2h 11min ago
   Main PID: 1123 (pmxcfs)
      Tasks: 13 (limit: 154263)
     Memory: 52.4M
        CPU: 2min 1.911s

● pvedaemon.service - Proxmox VE API Daemon
     Active: active (running)

● pveproxy.service - Proxmox VE API Proxy Server
     Active: active (running)

Significado: Los servicios están “running.” Eso no significa que sean responsivos.
Decisión: Si están “active” pero la UI cuelga, inspecciona logs y llamadas bloqueantes (tareas siguientes).

Task 7: See if pveproxy is timing out on auth/DNS

cr0x@server:~$ journalctl -u pveproxy -S -2h --no-pager | tail -n 25
Feb 04 10:01:18 pve02 pveproxy[2044]: proxy detected vanished client connection
Feb 04 10:02:41 pve02 pveproxy[2044]: authentication failure; rhost=10.10.30.50 user=admin@pam msg=timeout
Feb 04 10:02:41 pve02 pveproxy[2044]: failed login attempt; user=admin@pam

Significado: Timeouts de autenticación pueden ser lentitud en LDAP/PAM/DNS, no contraseñas erróneas.
Decisión: Si ves timeouts, prueba resolución de nombres y accesibilidad del directorio; no “reinicies servicios al azar” todavía.

Task 8: Validate time sync and drift across nodes

cr0x@server:~$ chronyc tracking
Reference ID    : 192.0.2.10
Stratum         : 3
Ref time (UTC)  : Tue Feb 04 10:11:32 2026
System time     : 0.000347812 seconds slow of NTP time
Last offset     : -0.000112345 seconds
RMS offset      : 0.000251901 seconds
Frequency       : 12.345 ppm fast
Leap status     : Normal

Significado: Un buen sincronismo muestra offsets pequeños y estado de leap “Normal”.
Decisión: Si el offset es grande o el estado de leap no es normal, arregla el tiempo ahora. No investigues comportamiento del clúster hasta que los relojes coincidan.

Task 9: Detect CPU pressure and I/O wait that starves everything

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 812344  54212 9248120    0    0     4    21  920 1800  6  2 88  4  0
 3  1      0 790112  54180 9249008    0    0   120  8020 1100 2100  9  3 44 44  0
 4  2      0 780004  54140 9249912    0    0   200  9100 1200 2400  8  4 36 52  0

Significado: Un wa alto (I/O wait) indica que el sistema está bloqueado en almacenamiento. Un b alto sugiere procesos bloqueados.
Decisión: Si wa es consistentemente alto durante el incidente, deja de perseguir configuraciones de Corosync y pasa a diagnóstico de almacenamiento.

Task 10: ZFS health and latency on a node using local ZFS

cr0x@server:~$ zpool status -x
all pools are healthy

Significado: No hay errores conocidos en el pool. Aún así no te dice la latencia.
Decisión: Si las cosas están lentas, revisa iostat y comportamiento de sync a continuación.

cr0x@server:~$ zpool iostat -v 1 3
              capacity     operations     bandwidth
pool        alloc   free   read  write   read  write
rpool       320G   1.45T     80   1200  5.4M   98.2M
  mirror    320G   1.45T     80   1200  5.4M   98.2M
    nvme0n1    -      -      40    610  2.7M   49.1M
    nvme1n1    -      -      40    590  2.7M   49.1M

Significado: Escritos intensivos. Si esto se correlaciona con cuelgues del plano de gestión, puede que estés saturando el almacenamiento.
Decisión: Considera limitar backups/replicación y verifica escrituras sync (bases de datos, NFS sync, o ZFS mal ajustado).

Task 11: Ceph cluster state (if you run it)

cr0x@server:~$ ceph -s
  cluster:
    id:     1b2c3d4e-5555-6666-7777-88889999aaaa
    health: HEALTH_WARN
            12 slow ops, oldest one blocked for 38 sec
  services:
    mon: 3 daemons, quorum a,b,c (age 2h)
    mgr: x(active, since 2h)
    osd: 9 osds: 9 up (since 2h), 9 in (since 2h)
  data:
    pools:   6 pools, 512 pgs
    usage:   12 TiB used, 18 TiB / 30 TiB avail
    pgs:     512 active+clean

Significado: “slow ops” es Ceph diciéndote educadamente que tu almacenamiento está sufriendo.
Decisión: Trata slow ops como un incidente de producción. Pausa operaciones intensivas de I/O. Investiga latencia de OSD, red y ajustes de recuperación/backfill.

Task 12: Check for network errors on Corosync interfaces

cr0x@server:~$ ip -s link show dev bond0
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:aa:bb:cc brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets errors dropped  missed   mcast
    1234567890  987654      12      0       0       0
    TX:  bytes packets errors dropped carrier collsns
    2233445566  876543       0      0       0       0

Significado: Errores RX no nulos son una pista. Doce errores pueden ser “nada” o la punta de un iceberg—correlaciona con el tiempo.
Decisión: Si los errores aumentan durante incidentes, revisa cableado, ópticas, firmware de NIC, puertos de switch y consistencia de MTU extremo a extremo.

Task 13: Measure latency and loss between nodes (without fooling yourself)

cr0x@server:~$ mtr -r -c 50 -n 10.10.10.12
Start: 2026-02-04T10:12:01+0000
HOST: pve01                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.10.10.12               0.0%    50    0.4   0.6   0.3   2.1   0.3

Significado: Bueno: promedio bajo, peor caso bajo, sin pérdida.
Decisión: Si el peor caso sube a decenas/centenas de ms o aparece pérdida, Corosync puede seguir viéndose “bien” mientras el resto expira. Arregla la calidad del camino de red.

Task 14: Check for stuck tasks and why migrations/backs ups don’t finish

cr0x@server:~$ pvesh get /cluster/tasks --limit 5
[
  {
    "endtime": 0,
    "id": "UPID:pve02:0000A1B2:00C3D4E5:67A1B2C3:vzdump:105:root@pam:",
    "node": "pve02",
    "pid": 41394,
    "starttime": 1707040801,
    "status": "running",
    "type": "vzdump",
    "user": "root@pam"
  }
]

Significado: Un backup corriendo “por siempre” a menudo se correlaciona con paradas de almacenamiento o commits de snapshot que no pueden vaciarse.
Decisión: Revisa logs del nodo específico y latencia del almacenamiento subyacente. No mates la tarea a la ligera a menos que entiendas si está sosteniendo bloqueos o snapshots.

Task 15: Spot HA manager indecision

cr0x@server:~$ ha-manager status
quorum OK
master pve01 (active, Tue Feb  4 10:12:12 2026)
lrm pve01 (active, Tue Feb  4 10:12:11 2026)
lrm pve02 (active, Tue Feb  4 10:12:10 2026)
lrm pve03 (active, Tue Feb  4 10:12:09 2026)

service vm:101 (started)
service vm:102 (freeze) (request_stop)
service ct:203 (started)

Significado: “freeze” indica que HA no puede avanzar—a menudo por contención de bloqueos, indisponibilidad de almacenamiento o acciones de agente atascadas.
Decisión: Investiga el almacenamiento del recurso afectado y los bloqueos de configuración. No “forces” acciones de HA hasta saber qué espera.

Task 16: Find config lock contention (the quiet killer)

cr0x@server:~$ ls -l /var/lock/pve-manager
total 0
-rw-r----- 1 root www-data 0 Feb  4 10:08 vzdump.lock
-rw-r----- 1 root www-data 0 Feb  4 10:09 pve-storage-lock

Significado: Los locks existen durante operaciones normales, pero si persisten mucho tiempo, algo está atascado.
Decisión: Correlaciona la antigüedad del lock con la lista de tareas y el rendimiento de almacenamiento. Si un lock está obsoleto por un proceso caído, resuelve la tarea atascada de forma segura antes de eliminar locks.

Tres micro-historias corporativas desde las trincheras

Mini-historia 1: El incidente causado por una suposición equivocada

Una empresa mediana corría un clúster Proxmox de tres nodos para servicios internos. Todo era “redundante”: NICs duales, dos switches,
RAID en los hipervisores. Estaban orgullosos. Se lo habían ganado.

Entonces, un lunes por la mañana, la GUI se congelaba de forma intermitente. Las migraciones colgaban. Backups que normalmente tomaban minutos tardaban horas.
El de guardia hizo el ritual: comprobó pvecm status. Quorate. Ningún nodo fuera. Corosync parecía limpio.
Así que supusieron que la red del clúster estaba bien y se pusieron a buscar en los logs de la UI de Proxmox.

La suposición equivocada: “Si Corosync tiene quorum, la red del clúster está sana.”
El quorum solo significaba que los nodos todavía podían intercambiar suficientes mensajes para ponerse de acuerdo sobre la membresía. No decía nada sobre la latencia de cola.

La causa real fue un puerto de switch que fallaba de una manera que no caía totalmente el enlace. Introdujo microburstes intermitentes y errores CRC.
Los enlaces knet de Corosync se recuperaban rápido, así que la membresía se mantuvo estable. Pero las escrituras de pmxcfs se retrasaban, y la API estaba continuamente esperando respuestas del sistema de archivos de clúster.

La solución fue aburrida: reemplazaron el cable y el SFP sospechoso, movieron el puerto y verificaron que los contadores de error se mantuvieran planos.
El “misterio” desapareció al instante. El postmortem añadió una línea que importaba: mide contadores de error de red y latencia, no solo el quorum.

Mini-historia 2: La optimización que salió mal

Otra organización tenía una implementación Proxmox+Ceph. Querían menos advertencias de “Corosync token timeout” durante ventanas de carga intensa.
Alguien sugirió aumentar token timeout y los timeouts de consenso para que Corosync resistiera la lentitud temporal.
El cambio redujo el ruido en los logs. Todos celebraron. Por un tiempo.

Semanas después, un mantenimiento de almacenamiento disparó una recuperación de Ceph que saturó la red backend.
El clúster permaneció quorate. Ese fue el problema. Los nodos se mantuvieron como miembros mientras se volvían progresivamente no responsivos por I/O wait.
Las decisiones de HA se retrasaron. Las migraciones se acumularon. La GUI funcionaba a medias—lo suficiente para crear falsa confianza.

La “optimización” empeoró el modo de fallo al ampliar la ventana en la que todo estaba técnicamente conectado pero prácticamente inutilizable.
Los operadores esperaron más tiempo antes de declarar un incidente porque “Corosync es estable.” Mientras tanto, el impacto al negocio creció.

La solución final no fue solo revertir los timeouts. Separaron el tráfico: Corosync en una red de baja latencia y no congestionada;
recovery de Ceph ajustado para no saturar; y añadieron alertas sobre latencia de cola y slow ops en lugar de flaps de membresía.
Los token timeouts volvieron cerca de los valores por defecto. El ruido en logs aumentó; los incidentes reales disminuyeron.

Mini-historia 3: La práctica aburrida pero correcta que salvó el día

Un entorno regulado ejecutaba Proxmox para cargas de negocio. El equipo era conservador hasta el punto de resultar molesto.
Mantenían una regla estricta: cada nodo tenía gestión fuera de banda configurada, un procedimiento documentado de “apagado seguro”,
y un simulacro trimestral donde practicaban recuperar fallos parciales sin improvisar.

Durante un evento de energía, un nodo volvió con un pool de almacenamiento degradado y errores de I/O intermitentes. El quorum de Corosync se mantuvo,
pero las operaciones de gestión se volvieron poco fiables: cambios de configuración a veces colgaban, backups se estancaban, y HA dudaba en reubicar cargas.

En lugar de entrar en pánico, siguieron el playbook: congelaron cambios, identificaron el nodo malo, evacuaron VMs que podían moverse con seguridad,
y mantuvieron el resto estable. Usaron acceso fuera de banda para confirmar errores de hardware, luego quitaron el nodo de la programación.

La práctica aburrida—pasos documentados, un orden conocido de operaciones y negarse a “simplemente hacer clic”—impidió que un problema de hardware desordenado
se convirtiera en un incidente de clúster. El negocio apenas lo notó. El equipo volvió a estar molesto por su propio proceso,
que es exactamente la vibra que quieres en trabajo de fiabilidad.

Broma #2: Si tu clúster funciona con “conocimiento tribal”, felicidades—has inventado un punto único de fallo con sentimientos.

Errores comunes: síntoma → causa raíz → solución

1) Síntoma: Quorum es “Yes”, pero acciones de la GUI cuelgan

  • Causa raíz: Latencia o contención de bloqueos en pmxcfs; llamadas API bloqueadas esperando /etc/pve.
  • Solución: Prueba latencia de ls /etc/pve en varios nodos; revisa CPU/I/O wait; reduce carga; resuelve tareas atascadas que mantienen locks.

2) Síntoma: HA muestra “freeze” o intentos repetidos de reinicio

  • Causa raíz: HA no puede confirmar estado por timeouts de almacenamiento, locks o actualizaciones retrasadas del sistema de archivos de clúster.
  • Solución: Revisa ha-manager status, tareas y salud de almacenamiento; estabiliza el almacenamiento primero; evita forzar starts hasta que el estado sea consistente.

3) Síntoma: Las migraciones arrancan y luego se quedan atascadas en un porcentaje fijo

  • Causa raíz: El backend de almacenamiento no puede seguir el ritmo (Ceph slow ops, latencia NFS, presión de sync en ZFS), o el throughput de red colapsa bajo contención.
  • Solución: Mide latencia de almacenamiento, revisa slow ops de Ceph, revisa errores de NIC; pausa otras actividades intensivas en I/O; asegura que la red de migración no comparta tramo con almacenamiento saturado.

4) Síntoma: Logs de Corosync muestran advertencias de token pero el quorum se mantiene

  • Causa raíz: Picos de latencia de cola por congestión, problemas de IRQ o inanición de CPU; se dan reconfiguraciones sin pérdida total de membresía.
  • Solución: Trátalo como incidente de red/host; revisa ip -s link, ethtool -S, mtr y espera de CPU; arregla el camino subyacente.

5) Síntoma: “Permiso denegado” aleatorio o problemas TLS/auth tras “no cambiar nada”

  • Causa raíz: Deriva del tiempo entre nodos; validación de certificados violada por ventanas temporales; Kerberos/LDAP sensible al tiempo falla.
  • Solución: Arregla chrony/NTP, valida deriva en todos los nodos y luego prueba los flujos de autenticación. No rote certificados como primer paso.

6) Síntoma: Solo un nodo está “lento”, pero no abandona el clúster

  • Causa raíz: Problemas locales de hardware o kernel: errores de disco, degradación ZFS, errores de NIC, presión de memoria.
  • Solución: Compara métricas y logs con un nodo sano; evacua cargas; investiga hardware; no dejes que un nodo enfermo envenene el plano de control.

7) Síntoma: Todo empeora durante los backups

  • Causa raíz: I/O de backups satura almacenamiento o red; commits de snapshot lentos; locks mantenidos más tiempo; operaciones de gestión se acumulan.
  • Solución: Escalonar backups, limitar ancho de banda de backups, separar tráfico de backups y asegurar que el almacenamiento tenga margen. Los backups deben ser aburridos, no una prueba de carga.

Listas de verificación / plan paso a paso

Checklist A: Cuando el clúster “se siente lento” pero el quorum está bien

  1. Congelar cambios. No nuevas configuraciones de almacenamiento, no ediciones de firewall, no reordenamientos de HA hasta entender el bloqueo.
  2. Elige un nodo “malo” y uno “bueno”. Ejecuta las mismas comprobaciones; las diferencias son oro.
  3. Confirma estabilidad de membresía: pvecm status, corosync-cfgtool -s, journal de Corosync.
  4. Prueba la capacidad de respuesta de pmxcfs: un rápido ls en /etc/pve con temporización.
  5. Revisa locks y tareas atascadas: pvesh get /cluster/tasks, inspecciona archivos de lock.
  6. Mide presión del host: vmstat, carga, I/O wait, presión de memoria.
  7. Mide calidad de la red: contadores de errores + mtr entre nodos en el ring de Corosync.
  8. Mide salud del almacenamiento: ZFS iostat/status o slow ops de Ceph.
  9. Solo entonces considera ajustes. Ajustar sin medir es cómo construyes un desastre “estable” pero lento.

Checklist B: Estabilizar primero, luego recuperar funcionalidad

  1. Detén los multiplicadores de carga: pausa migraciones, pospone backups, limita recuperación/backfill si estás en Ceph (con cuidado).
  2. Aísla el nodo enfermo: si un nodo tiene errores/latencia, migra lo que puedas y quítalo de decisiones HA hasta arreglarlo.
  3. Verifica sincronización de tiempo: asegúrate de que los relojes coincidan antes de interpretar logs y eventos de fencing.
  4. Restaura la red a la línea base: elimina pérdida de paquetes, errores CRC, desajustes de MTU y enlaces congestionados.
  5. Restaura el almacenamiento a la línea base: limpia errores de disco, repara pools degradados, aborda slow ops y asegura espacio libre suficiente.
  6. Vuelve a habilitar operaciones gradualmente: migraciones/backups de una en una, observa latencia y logs.

Checklist C: Endurecimiento para que esto no vuelva a pasar

  1. Separa clases de tráfico: Corosync en enlaces de baja latencia; almacenamiento en su propia red; migraciones separadas si es posible.
  2. Alerta sobre latencia de cola, no solo “arriba/abajo”. Las alarmas de quorum son necesarias pero insuficientes.
  3. Planifica capacidad para backups y recuperación. Si tu clúster no puede manejar un evento de recuperación más la carga normal, no es resiliente.
  4. Prueba simulacros de fallo. Practica “un nodo lento”, “un enlace oscilante”, “slow ops de almacenamiento.” Los incidentes reales no deberían ser tu primer ensayo.

Preguntas frecuentes

1) ¿Por qué pvecm status muestra “Quorate: Yes” cuando la GUI es inutilizable?

Porque el quorum trata sobre membresía y votación, no sobre capacidad de respuesta. La GUI depende de pmxcfs y demonios API que pueden bloquearse por I/O, locks, DNS o latencia de almacenamiento.

2) Si Corosync no muestra fallos, ¿puede la red seguir siendo el problema?

Sí. Picos cortos, microburstes, errores CRC y jitter pueden arruinar la latencia de cola sin perder la membresía. Revisa contadores y mtr, no solo el estado del ring.

3) ¿Debo aumentar el token timeout de Corosync para dejar de hacer flapping?

Solo después de probar que la red y la planificación del host son estables y aún así lo necesitas. Aumentar timeouts puede ocultar problemas reales de latencia y retrasar la detección de fallos.

4) ¿Cuál es la forma más rápida de saber si pmxcfs es el cuello de botella?

Cronometra un simple ls en /etc/pve en varios nodos. Si es lento o se cuelga, pmxcfs está involucrado. Luego revisa CPU e I/O wait.

5) ¿De verdad los problemas de almacenamiento pueden afectar a Corosync y la gestión del clúster?

Absolutamente. Las paradas de almacenamiento generan I/O wait, que retrasa procesos y planificación. Corosync puede seguir intercambiando suficientes mensajes, pero pmxcfs y llamadas API sufrirán.

6) ¿Cómo rompe la deriva del tiempo un clúster Proxmox si el quorum está bien?

La deriva puede romper TLS/auth, confundir logs y provocar decisiones inconsistentes en workflows de HA o fencing. Arregla la sincronización de tiempo antes de profundizar en el diagnóstico.

7) ¿Por qué las migraciones se cuelgan más a menudo que el “runtime normal” de una VM durante incidentes?

Las migraciones amplifican requisitos de ancho de banda y almacenamiento y son sensibles a la latencia. Una VM puede seguir funcionando con cachés y reintentos; una migración es un bucle estricto que expira.

8) ¿Qué debo hacer si un nodo está lento pero sigue siendo parte del clúster?

Trátalo como una falla parcial: evacua cargas donde sea seguro, reduce lo que depende de ese nodo e investiga hardware/red/almacenamiento en ese host específicamente.

9) ¿Es seguro reiniciar corosync o pmxcfs durante un incidente?

A veces, pero no es una primera medida. Reiniciar puede causar cambios de membresía y churn de locks. Estabiliza red/almacenamiento primero, luego reinicia con un objetivo claro.

10) ¿Cuál es la mejor “métrica única” para alertar sobre estos problemas?

No existe una. Combina: capacidad de respuesta de pmxcfs (chequeos sintéticos), pérdida/jitter de red, latencia de almacenamiento/slow ops y I/O wait del host. El quorum por sí solo es una métrica reconfortante.

Próximos pasos que puedes hacer esta semana

Si ejecutas Proxmox en producción, aquí está el camino práctico que realmente cambia resultados:

  1. Añade una comprobación sintética de pmxcfs: mide y alerta si ls /etc/pve supera un umbral pequeño en cualquier nodo.
  2. Alerta sobre errores de red en las interfaces de Corosync: errores CRC, drops, flaps de enlace. Esto detecta degradaciones “quorum está bien” temprano.
  3. Alerta sobre latencia de almacenamiento: anomalías de iostat en ZFS, slow ops de Ceph, retransmisiones cliente NFS. El almacenamiento es la mayoría silenciosa de estos incidentes.
  4. Mantén timeouts de Corosync sensatos: no uses ajuste como vendaje para una red mala. Si debes ajustar, documenta por qué y qué medición lo justificó.
  5. Haz un simulacro de fallo: simula una red de almacenamiento congestionada o un enlace oscilante y practica “estabilizar primero.” Tu yo futuro lo agradecerá y estará un poco menos cansado.

Corosync no te está mintiendo. Solo responde a una pregunta más pequeña que la que estás haciendo.
Si quieres un clúster que sobreviva, mide todo el organismo—calidad de red, latencia de almacenamiento, capacidad de respuesta del plano de control—y trata “quorum: yes” como el inicio del diagnóstico, no como el final.

Reinstalar Windows y mantener aplicaciones: qué funciona (y qué es marketing)

Son las 9:12 AM. Tienes un problema “simple” de Windows: actualizaciones rotas, tiempos de arranque extraños, el cliente VPN no carga y tu portátil se ha convertido en un calefactor caro. Alguien dice: “Simplemente reinstala Windows, puedes mantener tus aplicaciones.” Esa frase es el comienzo de una recuperación limpia… o el inicio de una larga tarde explicando a Finanzas por qué la suite contable necesita “una rápida reautorización” (otra vez).

Este texto trata sobre la diferencia entre lo que Windows realmente puede hacer y lo que implican los vendedores y los posts esperanzados en foros. Cubriremos las opciones, cómo fallan y cómo demostrar—usando comandos y salidas—si vas a conservar tus aplicaciones o a borrar tu semana.

Los términos que los vendedores confunden a propósito

Cuando la gente dice “reinstalar Windows”, puede referirse a cualquiera de cuatro operaciones distintas. Solo una mantiene las aplicaciones de la forma en que la mayoría de las personas entiende “aplicaciones”. El resto o mantiene solo archivos, o mantiene algunas aplicaciones de la Microsoft Store, o solo deja tus arrepentimientos.

1) Instalación limpia (borrar e instalar)

Esta es la opción honesta. Arrancas desde medios de instalación, borras particiones o formateas el volumen del SO e instalas desde cero. Puedes conservar una carpeta Windows.old si instalas en la misma partición sin formatear, pero eso guarda datos de usuario y algo de estado del sistema—no aplicaciones instaladas que funcionen.

2) Restablecer este equipo

Ajustes de Windows ofrece “Restablecer este equipo” con opciones como “Conservar mis archivos” o “Quitar todo”. La ruta “Conservar mis archivos” mantiene perfiles de usuario y algunas configuraciones, pero elimina las aplicaciones de escritorio instaladas. Puede conservar algunas apps integradas. No es “mantener apps”, por más amable que esté redactado el cuadro de diálogo.

3) Actualización in-place / instalación de reparación (el movimiento que realmente “mantiene apps”)

Esta es la que puede preservar aplicaciones Win32 instaladas y la mayoría de configuraciones: ejecuta Windows Setup desde dentro de Windows (no arrancando desde USB), elige conservar archivos personales y aplicaciones, y deja que Setup coloque un nuevo SO migrando la instalación existente.

Si necesitas una regla: si arrancas desde USB, “mantener apps” suele descartarse. Setup necesita el contexto del SO en ejecución para realizar una migración completa de aplicaciones y estado del registro.

4) Restauración de imagen / restauración bare-metal

Esto mantiene las apps porque conserva todo. Pero no es una “reinstalación”, es viajar en el tiempo. Restauras una imagen de disco completa de una fecha anterior y aceptas que todo lo instalado o cambiado desde la imagen se perderá.

Broma #1: Una “reinstalación que mantiene apps” es como un “pastel dieta”. A veces existe, pero aún deberías leer la etiqueta.

Qué significa realmente “mantener apps”: los únicos caminos que funcionan

Aquí está la verdad práctica: para aplicaciones de escritorio tradicionales (Win32), el único método soportado por Microsoft que se parece a “reinstalar Windows y mantener apps” es la actualización in-place / instalación de reparación. Todo lo demás es o un reinicio (apps eliminadas) o una instalación limpia (apps eliminadas, archivos quizá recuperables).

La actualización in-place / instalación de reparación: qué hace

  • Reemplaza archivos del sistema Windows con una copia fresca desde el medio de instalación o fuentes de Windows Update.
  • Reconstruye la tienda de componentes (WinSxS) y vuelve a registrar muchos componentes del sistema.
  • Migra aplicaciones instaladas, controladores y configuraciones en la medida de lo posible.
  • Crea artefactos de retroceso y registros (como C:\$WINDOWS.~BT, logs Panther).

Qué no promete

  • No mantendrá funcionando aplicaciones rotas si dependían de componentes del sistema corruptos, controladores obsoletos o runtimes que se reemplazan.
  • No preservará el estado de licencias de todos los productos. Algunas licencias sobreviven; otros productos lo tratan como una máquina nueva.
  • No preservará de manera fiable integraciones de software de seguridad. Protección endpoint, VPNs y controladores de bajo nivel son víctimas frecuentes.

Requisitos no negociables si quieres que “mantener apps” sea real

  • Debes poder arrancar en Windows y ejecutar setup.exe desde el SO.
  • Necesitas suficiente espacio libre en disco en el volumen del SO (planea decenas de GB).
  • Necesitas el medio correcto: misma edición, idioma compatible y típicamente la misma o más nueva build.
  • La salud del disco y del sistema de archivos debe ser lo bastante buena para sobrevivir operaciones masivas de archivos.

Manual de diagnóstico rápido

Cuando alguien pregunta “¿Puedo reinstalar Windows y mantener apps?” no respondas todavía. Primero diagnostica con precisión. El cuello de botella suele ser uno de: salud del disco, corrupción del sistema, daño en la pila de actualizaciones, espacio insuficiente o controladores de terceros.

Primero: establece si una instalación de reparación es siquiera posible

  1. ¿Puedes iniciar sesión? Si no, ya te estás acercando a reset/restauración/instalación limpia.
  2. ¿El volumen del SO está sano? Si el disco está fallando, detente. Haz una imagen, haz copia de seguridad, reemplaza y luego recupera.
  3. ¿BitLocker está activado? Si sí, asegúrate de tener las claves de recuperación y entiende qué te las pedirá.

Segundo: identifica el modo de fallo real

  1. ¿Fallos de actualización? Revisa DISM/SFC y los registros de la pila de mantenimiento.
  2. ¿Arranque lento? Inspecciona los registros de eventos por reinicios del disco, tiempos de espera de controladores y bloqueos de servicios.
  3. ¿Caídas de aplicaciones? Busca runtimes faltantes, perfiles de usuario corruptos o controladores incompatibles.

Tercero: elige la reparación menos destructiva que cumpla el SLA

  1. Prueba reparaciones de servicio (DISM, SFC) si puedes. Son reversibles y baratas.
  2. Haz una actualización in-place si los componentes centrales están dañados pero necesitas conservar apps.
  3. Instalación limpia cuando la integridad o la seguridad están en duda, o el sistema está demasiado deteriorado.

Idea parafraseada de Werner Vogels (AWS): la fiabilidad viene de la automatización y el diseño, no de actos heroicos a las 2 AM. Trata la recuperación de Windows igual—pasos repetibles vencen a la improvisación.

Tareas prácticas: comandos, salidas, decisiones (12+)

A continuación hay tareas prácticas que puedes ejecutar antes de comprometerte con una reinstalación. Sí, son comandos de Windows, pero los presento en bloques estilo shell como se solicitó. Ejecútalos en un Símbolo del sistema o PowerShell elevado según corresponda. Cada tarea incluye: comando, salida de ejemplo, qué significa y qué decisión tomar.

Tarea 1: Confirma versión y build de Windows (verificación de compatibilidad)

cr0x@server:~$ cmd /c ver
Microsoft Windows [Version 10.0.19045.4046]

Qué significa: La build 19045 indica Windows 10 22H2. Tu medio de instalación debe ser compatible (misma versión mayor, idealmente misma o más nueva build).

Decisión: Si tu medio es más antiguo (por ejemplo, 19041), espera mayor riesgo de comportamiento de degradación o deshabilitación de la opción “mantener apps”. Obtén un medio coincidente.

Tarea 2: Comprueba la edición (mismatch Home/Pro/Enterprise anula “mantener apps”)

cr0x@server:~$ cmd /c "dism /online /Get-CurrentEdition"
Deployment Image Servicing and Management tool
Version: 10.0.19041.3636

Current Edition : Professional
The operation completed successfully.

Qué significa: Este sistema es Windows Pro. El medio de reparación debe ser Windows Pro (o un medio multi-edición que lo incluya).

Decisión: Si solo tienes medio Enterprise pero el dispositivo es Pro, no “intentes nomás”. Consigue el ISO correcto.

Tarea 3: Mide espacio libre (las reparaciones consumen espacio)

cr0x@server:~$ cmd /c "wmic logicaldisk where DeviceID='C:' get Size,FreeSpace"
FreeSpace        Size
41234583552      255998611456

Qué significa: Aproximadamente 41 GB libres en C:. Eso suele ser suficiente para una actualización in-place más archivos de retroceso, dependiendo del SO y las apps.

Decisión: Si el espacio libre es menor a ~25–30 GB, planea limpieza o expansión temporal de almacenamiento antes de intentar la instalación de reparación.

Tarea 4: Comprueba estado de BitLocker (evita prompts sorpresa de recuperación)

cr0x@server:~$ cmd /c "manage-bde -status c:"
BitLocker Drive Encryption: Configuration Tool version 10.0.19041
Volume C: [OS]
    Conversion Status:    Fully Encrypted
    Percentage Encrypted: 100.0%
    Protection Status:    Protection On
    Lock Status:          Unlocked

Qué significa: La unidad del SO está cifrada. Setup puede funcionar, pero necesitas las claves de recuperación accesibles y deberías considerar suspender la protección durante la actualización.

Decisión: Si no puedes recuperar las claves, detente y arregla eso primero. Si no, estás a un cambio de firmware de tener un mal día.

Tarea 5: Señal rápida de salud del disco (SMART vía WMIC es limitada pero útil)

cr0x@server:~$ cmd /c "wmic diskdrive get model,status"
Model                          Status
NVMe Samsung SSD 980 PRO 1TB   OK

Qué significa: WMIC reporta OK. Esto no es un análisis SMART completo, pero si dice “Pred Fail”, créelo.

Decisión: Si el estado del disco no es OK, no intentes una actualización in-place. Haz backup/imagen primero; reemplaza almacenamiento.

Tarea 6: Programar comprobación del sistema de archivos (detecta corrupción temprano)

cr0x@server:~$ cmd /c "chkdsk c: /scan"
The type of the file system is NTFS.
Stage 1: Examining basic file system structure ...
Windows has scanned the file system and found no problems.
No further action is required.

Qué significa: La metadata NTFS parece consistente.

Decisión: Si se encuentran errores, repáralos (chkdsk /f, probablemente requiera reinicio) antes de intentar cualquier migración del SO.

Tarea 7: Comprobación de integridad de archivos del sistema (SFC)

cr0x@server:~$ cmd /c "sfc /scannow"
Beginning system scan. This process will take some time.
Windows Resource Protection found corrupt files and successfully repaired them.

Qué significa: Existía corrupción pero fue reparada. A menudo esto resuelve fallos de actualización sin reinstalar.

Decisión: Reinicia y vuelve a probar el problema original. Si la corrupción no puede arreglarse, pasa a DISM y posiblemente a una actualización in-place.

Tarea 8: Reparar salud de la tienda de componentes (DISM)

cr0x@server:~$ cmd /c "dism /online /cleanup-image /scanhealth"
No component store corruption detected.
The operation completed successfully.

Qué significa: La tienda de componentes WinSxS parece sana.

Decisión: Si se detecta corrupción y /restorehealth falla, una actualización in-place suele ser la reparación más rápida y segura que conserva apps.

Tarea 9: Comprueba si Windows puede encontrar el entorno de recuperación (Reset depende de ello)

cr0x@server:~$ cmd /c "reagentc /info"
Windows Recovery Environment (Windows RE) and system reset configuration
    Windows RE status:         Enabled
    Windows RE location:       \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE

Qué significa: WinRE está habilitado. Las opciones de restablecimiento son viables si aceptas la pérdida de apps.

Decisión: Si WinRE está deshabilitado o ausente, “Restablecer este equipo” puede fallar. No lo descubras en plena crisis.

Tarea 10: Inspecciona bugchecks recientes y errores de disco (triaje de Event Log)

cr0x@server:~$ cmd /c "wevtutil qe System /q:\"*[System[(EventID=7 or EventID=51 or EventID=55 or EventID=1001)]]\" /c:5 /f:text"
Event[0]:
  Log Name: System
  Source: Microsoft-Windows-WER-SystemErrorReporting
  Event ID: 1001
  Description: The computer has rebooted from a bugcheck...

Qué significa: Hay errores críticos recientes. Event ID 7/51/55 suelen ser problemas de disco o NTFS. 1001 indica crashes.

Decisión: Si aparecen eventos relacionados con disco, prioriza la salud del almacenamiento sobre reinstalar el SO. Arregla hardware primero.

Tarea 11: Lista de aplicaciones instaladas como las ven las herramientas empresariales (inventario antes de la cirugía)

cr0x@server:~$ powershell -NoProfile -Command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion | Sort-Object DisplayName | Select-Object -First 5"
DisplayName                         DisplayVersion
7-Zip 23.01 (x64 edition)           23.01
Google Chrome                       121.0.6167.141
Microsoft 365 Apps for enterprise   16.0.17231.20182
Notepad++ (64-bit x64)              8.6.4
Zoom Workplace                      6.0.2

Qué significa: Esta es tu línea base. No todas las apps se registran aquí (algunas portables no), pero la mayoría del software empresarial sí.

Decisión: Exporta esta lista antes de hacer cambios. Si el usuario luego dice “todo se fue”, tendrás recibos.

Tarea 12: Captura controladores (los controladores de terceros suelen romperse tras la reparación)

cr0x@server:~$ cmd /c "pnputil /enum-drivers | findstr /i \"Published Name Provider\" | more"
Published Name : oem12.inf
Driver package provider : Intel
Published Name : oem45.inf
Driver package provider : Realtek

Qué significa: Puedes ver paquetes de controladores de terceros. Los controladores de red y almacenamiento importan más para la supervivencia.

Decisión: Si el sistema depende de un controlador de almacenamiento específico del proveedor (p. ej., RAID), confirma que tienes un camino de reinstalación antes de tocar Windows.

Tarea 13: Confirma el canal de activación (ayuda a predecir el comportamiento post-reinstalación)

cr0x@server:~$ cmd /c "slmgr /dli"
Name: Windows(R), Professional edition
Description: Windows(R) Operating System, RETAIL channel
Partial Product Key: XXXX
License Status: Licensed

Qué significa: El canal retail suele estar ligado a una cuenta Microsoft o clave, no a un KMS empresarial.

Decisión: Si la activación es por KMS/MAK, confirma que la activación corporativa funcionará tras reparaciones mayores. Si no, “arreglarás” Windows dejándolo sin licencia.

Tarea 14: Valida que existan particiones reservadas/recuperación (seguridad de arranque)

cr0x@server:~$ cmd /c "diskpart /s %TEMP%\dp.txt"
Microsoft DiskPart version 10.0.19041.3636

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   OS           NTFS   Partition    238 GB  Healthy    Boot
  Volume 1         EFI          FAT32  Partition    100 MB  Healthy    System
  Volume 2         Recovery     NTFS   Partition    990 MB  Healthy    Hidden

Qué significa: Las particiones EFI y Recovery están presentes. Es una buena señal para un comportamiento de arranque sensato.

Decisión: Si EFI/Recovery falta o está roto, prioriza arreglar la infraestructura de arranque; los planes de reinstalación cambian.

Tarea 15: Ver si Windows Setup probablemente permitirá “mantener apps” (verificación práctica)

cr0x@server:~$ cmd /c "setuperr.exe"
'setuperr.exe' is not recognized as an internal or external command,
operable program or batch file.

Qué significa: No tienes logs de Setup porque no has ejecutado setup todavía. Tras un intento in-place fallido, los registros viven bajo directorios Panther.

Decisión: Si un intento in-place falla, extraerás logs de C:\$WINDOWS.~BT\Sources\Panther y dejarás de adivinar.

Tres microhistorias corporativas (qué salió mal, qué nos salvó)

Microhistoria 1: El incidente causado por una suposición errónea (el mito de “mantener apps”)

Una empresa mediana tenía una flota de portátiles con Windows 10 usados por el equipo de ventas. Un puñado de dispositivos se quedaba atascado con fallos en las actualizaciones acumulativas y alguien propuso un arreglo rápido: “Restablecer este equipo, conservar mis archivos. Eso es básicamente una reinstalación que mantiene apps.” Sonó plausible. La interfaz era amigable. El calendario no.

El restablecimiento funcionó. Las máquinas arrancaron limpias. Los usuarios pudieron abrir hojas de cálculo otra vez. Entonces llegó la verdadera interrupción: el plugin del cliente CRM, el complemento de reserva de salas y un cliente VPN de línea de negocio desaparecieron. Los documentos de los usuarios estaban intactos, así que la operación fue declarada un éxito durante unos seis minutos.

Reinstalar el software faltante no fue solo “descargar y Next”. Algunos instaladores requerían aprobación de admin, otros necesitaban archivos de licencia offline y uno dependía de un runtime legacy que hubo que preparar en un orden específico. Mientras tanto, los endpoints derivaron a estados no conformes porque el agente de gestión mismo fue eliminado por el restablecimiento. Los dispositivos dejaron de reportar. Eso disparó alarmas de herramientas de seguridad y bloqueó el acceso a la red para algunos usuarios.

La suposición errónea no era que Reset sea malo. Reset está bien cuando aceptas la pérdida de apps. La suposición equivocada fue tratar “conservar mis archivos” como “conservar mi entorno”. Son promesas diferentes con radios de impacto muy distintos.

La remediación fue aburrida: inventariar apps primero, confirmar licencias y usar una actualización in-place donde “mantener apps” realmente signifique algo. La lección quedó porque costó productividad real y muchas actualizaciones de tickets.

Microhistoria 2: La optimización que se volvió en contra (ahorro de espacio vs Windows Setup)

Otra organización intentó reducir el uso de almacenamiento en estaciones de desarrollo. Alguien desplegó políticas agresivas de limpieza de disco: carpetas temporales grandes purgadas, cachés de delivery optimization limitadas y redirección de perfiles de usuario ajustada. Las imágenes de máquinas quedaron esbeltas. Los paneles de control lucían en verde. Todos se felicitaron en silencio.

Entonces llegó una ola de instalaciones de reparación—varios dispositivos necesitaron in-place upgrades para arreglar pilas de servicing rotas. Setup comenzó y falló con errores vagos. Surgió un patrón: máquinas con las políticas de limpieza más estrictas tenían la tasa de fallo más alta. El volumen del SO no tenía espacio de trabajo suficiente para que Setup preparara archivos, creara datos de retroceso y ejecutara pasos de migración.

Lo que lo hizo doloroso fue la naturaleza “casi funciona”. Setup corría un rato y luego revertía. Los usuarios perdieron horas. TI perdió credibilidad. Y porque el rollback restauró el estado roto anterior, el resultado fue un perfecto círculo de tiempo desperdiciado.

La solución no fue exótica: relajar temporalmente políticas de limpieza, asegurar espacio libre suficiente y asignar un buffer predecible. Windows Setup no es minimalista. Quiere área de staging, logs y retrocesos. Negárselo y se vuelve quisquilloso.

Esa “optimización” redujo el uso promedio de disco. También aumentó la frecuencia de incidentes. En términos de producción, bajó costo por nodo y subió costo por incidencia—un mal intercambio si te importan los fines de semana.

Microhistoria 3: La práctica aburrida pero correcta que salvó el día (imágenes y claves)

Una empresa tenía una práctica estricta para “eventos de reparación del SO”: antes de cualquier reparación importante, los técnicos debían capturar (1) claves de recuperación BitLocker, (2) un inventario básico de apps y (3) una imagen bare-metal del volumen del SO para las máquinas de alto riesgo. La gente refunfuñaba. Parecía lento. Parecía burocrático.

Una semana, un lote de portátiles empezó a mostrar timeouts intermitentes en NVMe. No fallos completos—solo lo suficiente para corromper archivos ocasionalmente y causar comportamiento extraño. Algunos fueron programados para actualizaciones in-place porque los síntomas parecían corrupción de actualizaciones. El proceso empezó un viernes (porque, por supuesto, así fue).

Durante la actualización, dos dispositivos tuvieron errores de almacenamiento y quedaron sin poder arrancar. Porque ya se había hecho la imagen antes, la recuperación fue sencilla: reemplazar la unidad, restaurar la imagen para recuperar el estado del usuario y luego realizar una migración controlada a una instalación fresca del SO. Las claves de recuperación ya estaban en el ticket, así que nadie tuvo que perseguir a usuarios en tránsito.

Esa práctica no evitó la falla. Convirtió la falla en rutinaria. Ese es el punto. No necesitas actos heroicos; necesitas un runbook y la disciplina aburrida para seguirlo.

Hechos interesantes y contexto histórico (para entender por qué Windows se comporta así)

  • “Instalación de reparación” solía ser un concepto de arrancar desde CD. Versiones antiguas de Windows tenían modos de reparación desde medios de instalación, pero el comportamiento moderno de “mantener apps” está ligado a la lógica de migración in-OS.
  • Los componentes side-by-side de Windows (WinSxS) existen para soportar mantenimiento a escala. Es la razón por la que Windows puede aplicar actualizaciones a una enorme matriz de estados del sistema—hasta que la tienda se corrompe, y entonces todo se vuelve raro.
  • La era “Windows como servicio” cambió las actualizaciones. Las actualizaciones de características se convirtieron en actualizaciones in-place frecuentes, así que Microsoft invirtió mucho en herramientas de migración que también impulsan las instalaciones de reparación.
  • Reset this PC evolucionó para recuperación de consumo, no para continuidad empresarial. Está diseñado para que una máquina doméstica funcione rápidamente, no para preservar pilas de apps complejas y agentes corporativos.
  • La activación se volvió más resistente con licencias digitales. Muchos sistemas se reactivan tras reinstalar basándose en ID de hardware, pero las licencias empresariales y ciertos proveedores aún se comportan como en 2009.
  • UEFI y GPT estandarizaron diseños de arranque. Windows moderno depende de particiones EFI y de recuperación; si faltan o están dañadas, provocan fallos de arranque “misteriosos” tras intentos de reinstalación.
  • La firma de controladores y la seguridad del kernel elevaron el listón. Los controladores VPN y AV antiguos son más propensos a romperse durante refrescos del SO porque actúan a bajo nivel.
  • Las aplicaciones de Microsoft Store se empaquetan de forma distinta. Pueden volver a registrarse o reinstalarse en bloque; las apps Win32 tradicionales son en su mayoría “copos de nieve con estado”.
  • Windows Setup escribe logs detallados. Muchos admins no los leen y luego se sorprenden cuando la adivinanza falla. Los logs están ahí; úsalos.

Modos de fallo: cómo se rompe “mantener apps” en la vida real

Si quieres mantener apps, debes entender qué amenaza ese resultado. Estos son los sospechosos habituales.

Desajustes de edición, idioma y build

Windows Setup ofrece la opción “Conservar archivos personales y aplicaciones” solo cuando determina una ruta de migración soportada. Si tu medio es incorrecto—diferente edición, idioma, demasiado antiguo, arquitectura no coincidente—Setup silenciosamente elimina la opción o fuerza “Conservar archivos solo”. No es Windows siendo malvado. Es Windows negándose a prometer una migración que no puede completar.

Salud del disco e inconsistencias del sistema de archivos

Una actualización in-place es una operación masiva de archivos: copiar, desempaquetar, preparar, mover, hardlink y retroceder. Los discos que “funcionan mayormente” se convierten en discos que fallan consistentemente bajo esta carga. Si ves timeouts de disco o eventos NTFS, trátalo como un incidente de hardware, no un incidente del SO.

No hay suficiente espacio para staging y rollback

Setup necesita espacio para:

  • expansión de la imagen de instalación,
  • caches de controladores y migración,
  • estado de retroceso,
  • archivos de log que pueden crecer mucho durante intentos repetidos.

Si tienes poco espacio, Setup puede fallar tarde, revertir y dejarte exactamente donde empezaste—solo más cansado.

Ganchos de seguridad y herramientas endpoint

Protección endpoint, DLP, clientes VPN y herramientas de cifrado de disco suelen instalar controladores de kernel, filtros de red y servicios del sistema. Durante una instalación de reparación, Windows puede deshabilitar o eliminar componentes incompatibles. “Conservaste apps”, pero las apps que hacen al dispositivo utilizable en la red corporativa pueden quedar rotas.

Licencias atadas a la identidad de la máquina

Algún software enlaza licencias a IDs de hardware, IDs de instalación de Windows, estado del TPM o claves de registro que pueden cambiar durante una instalación de reparación. La mayoría de las veces está bien. Cuando no lo está, es urgente y caro.

Broma #2: Los servidores de licencias huelen el miedo. También parecen saber cuándo es viernes.

Errores comunes (síntoma → causa raíz → solución)

1) Falta la opción “mantener apps” en Windows Setup

Síntoma: Setup solo ofrece “Conservar archivos personales solo” o “Nada”.

Causa raíz: Desajuste de medio (edición/idioma/build), arrancaste desde USB en lugar de ejecutar in-OS, o ruta de actualización no soportada.

Solución: Arranca en Windows, monta el ISO correcto, ejecuta setup.exe. Confirma la edición con DISM antes de comenzar.

2) La actualización in-place falla y revierte tras mucho tiempo

Síntoma: Horas de progreso y luego “Deshaciendo cambios”.

Causa raíz: Espacio insuficiente en disco, incompatibilidad de controladores o errores en el sistema de archivos.

Solución: Libera espacio, elimina/desactiva AV/VPN de terceros temporalmente, ejecuta chkdsk, lee logs Panther. No vuelvas a ejecutar a ciegas.

3) Tras “Restablecer este equipo (conservar mis archivos)”, las apps desaparecen

Síntoma: Las apps de escritorio faltan; el usuario está en shock.

Causa raíz: Reset está diseñado para eliminar aplicaciones instaladas.

Solución: Usa Reset solo cuando tengas un plan de reinstalación (MDM, SCCM, Intune o instaladores manuales) y un plan de recuperación de licencias.

4) El dispositivo arranca pero el acceso a la red corporativa está roto

Síntoma: Wi-Fi funciona, pero VPN/802.1X/autenticación por certificados falla.

Causa raíz: Se eliminaron o invalidaron controladores filtro de red, certificados o agentes de gestión.

Solución: Reinscribe el dispositivo, reinstala el cliente VPN, restaura certificados, confirma sincronización horaria y valida NLA y servicios.

5) Aparece el prompt de clave de recuperación de BitLocker inesperadamente

Síntoma: Tras reiniciar, BitLocker pide la clave de recuperación.

Causa raíz: Cambiaron las mediciones del TPM (cambios de firmware, cambios en la config de arranque), o no se suspendió BitLocker durante cambios mayores del SO.

Solución: Recupera la clave desde tu vault de directorio/cuenta, suspende la protección antes de operaciones de reparación cuando corresponda y asegúrate de que las opciones de arranque seguro sean estables.

6) El sistema está “arreglado” pero las actualizaciones siguen fallando

Síntoma: La instalación de reparación finalizó, pero Windows Update sigue con errores.

Causa raíz: Problemas subyacentes en la pila de mantenimiento, restricciones de políticas o problemas de red/proxy/WSUS más que corrupción del SO.

Solución: Valida la configuración de la fuente de actualizaciones, revisa los registros de eventos, confirma conectividad e inspecciona políticas y servicios de Windows Update.

7) Las apps se “mantuvieron” pero se comportan como la primera ejecución / perdieron configuraciones

Síntoma: Las apps se abren, pero los perfiles/configuraciones faltan.

Causa raíz: Corrupción del perfil de usuario, reconstrucción de perfil, carpetas redirigidas o datos de app almacenados en ubicaciones no migradas correctamente.

Solución: Verifica integridad del perfil de usuario, restaura directorios de datos específicos de apps, evita borrar AppData a lo loco durante la limpieza.

Listas de verificación / plan paso a paso

Lista de decisión: elige la ruta de recuperación correcta

  1. Si no puedes arrancar en Windows: es improbable que hagas una reparación in-place que conserve apps. Considera restauración desde imagen, reparación offline o instalación limpia con recuperación de datos.
  2. Si la salud del disco es dudosa: detente y haz imagen/backup primero. Las operaciones del SO no arreglan hardware.
  3. Si necesitas preservar aplicaciones: planifica una actualización in-place, no un Reset.
  4. Si necesitas certeza de seguridad: la instalación limpia es la respuesta correcta. La persistencia puede preservar cosas malas también.

Lista de verificación pre-vuelo (haz esto antes de tocar Setup)

  • Confirma edición y build (Tareas 1–2).
  • Confirma espacio libre (Tarea 3).
  • Confirma disponibilidad de claves de recuperación BitLocker (Tarea 4).
  • Ejecuta un escaneo chkdsk y repara según sea necesario (Tarea 6).
  • Ejecuta SFC y DISM (Tareas 7–8).
  • Exporta inventario de apps instaladas (Tarea 11).
  • Identifica controladores críticos y componentes VPN/AV (Tarea 12).
  • Confirma canal de activación (Tarea 13).

Paso a paso: actualización in-place que realmente mantiene apps

  1. Consigue el medio de instalación correcto: misma versión mayor del SO, misma edición, mismo idioma, misma arquitectura (x64 vs ARM64). Prefiere build igual o más nueva.
  2. Arranca en Windows normalmente: no empieces arrancando desde USB.
  3. Desactiva o desinstala temporalmente AV/VPN/DLP de terceros si tu entorno lo permite. Estos controladores frecuentemente causan fallos de Setup.
  4. Monta el ISO y ejecuta setup.exe.
  5. Elige: “Conservar archivos personales y aplicaciones.” Si no se ofrece, detente y reevalúa—no te quedes con esperanza.
  6. Después de completar: verifica el stack de red, la inscripción en gestión de dispositivos y la salud de las herramientas de seguridad antes de declarar victoria.
  7. Luego parchea: ejecuta Windows Update y confirma que el problema original desapareció.

Paso a paso: cuando debes hacer instalación limpia (y aún minimizar el dolor)

  1. Haz backup de datos de usuario (documentos, escritorio, descargas) y ubicaciones de datos específicas de apps.
  2. Exporta inventario de apps e información de licencias cuando sea posible.
  3. Confirma claves de recuperación y rutas de activación.
  4. Instala Windows limpiamente usando la edición correcta.
  5. Instala controladores (chipset/red/almacenamiento) primero, luego el agente de gestión, luego herramientas de seguridad y finalmente las aplicaciones de negocio.
  6. Restaura datos y valida configuraciones de apps e inicios de sesión.

Preguntas frecuentes

1) ¿Puedo reinstalar Windows 11 y mantener todos mis programas instalados?

Sólo mediante una actualización in-place ejecutada desde dentro de Windows, con medio compatible y una ruta de migración soportada. Reset no conservará programas de escritorio.

2) ¿“Restablecer este equipo” conserva aplicaciones?

No para aplicaciones de escritorio tradicionales. “Conservar mis archivos” significa que los datos de usuario permanecen; las apps se van. Planea en consecuencia.

3) Si instalo Windows encima sin formatear, ¿mis apps seguirán funcionando?

Normalmente no. Puede que obtengas Windows.old con tus archivos antiguos, pero los programas instalados no estarán registrados y no funcionarán como instalados.

4) ¿Por qué a veces Windows Setup oculta la opción “mantener apps”?

Porque detectó un desajuste (edición/idioma/build/arquitectura) o iniciaste Setup desde medios de arranque. Setup no promete lo que no puede migrar.

5) ¿Las aplicaciones de Microsoft Store sobreviven a una reinstalación?

A veces. Las apps de la Store están basadas en paquetes y pueden volver a registrarse, pero una instalación limpia aún requiere reinstalarlas. No cuentes con que sobrevivan a un borrado.

6) ¿Una actualización in-place arreglará Windows Update roto?

A menudo sí—especialmente cuando la tienda de componentes o archivos del sistema están corruptos. Pero si tu fuente de actualizaciones/políticas está mal (WSUS/proxy), seguirás fallando tras la reparación.

7) ¿Y los controladores—se conservarán?

Muchos controladores se conservan, pero los controladores problemáticos de kernel (VPN, AV, filtros de almacenamiento) pueden eliminarse o reemplazarse. Siempre verifica la funcionalidad de red y almacenamiento después.

8) ¿Cómo reduzco el riesgo de perder licencias de software?

Inventaria el software, captura claves de licencia cuando corresponda, confirma políticas de reactivación de proveedores y evita cambios innecesarios de hardware/TPM durante el proceso.

9) Si la máquina no arranca, ¿es posible aún “mantener apps”?

No en el sentido soportado normal. Si no puedes ejecutar Setup desde dentro de Windows, la lógica de migración que conserva apps generalmente no puede correr. Considera restaurar desde imagen o instalación limpia con recuperación de datos.

10) ¿Debería hacer SFC/DISM antes de reinstalar?

Sí. Son de bajo riesgo y frecuentemente arreglan el problema sin reinstalar. Si fallan, también has reunido evidencia que respalda pasar a una actualización in-place.

Conclusión: siguientes pasos que no dañarán

Si recuerdas una cosa: “Mantener apps” no es una vibra; es un procedimiento específico. La actualización in-place es lo más cercano a “reinstalar Windows y mantener apps”, y solo funciona cuando la ejecutas desde un Windows arrancado con medio compatible y un disco razonablemente sano.

Siguientes pasos:

  1. Ejecuta las comprobaciones rápidas: arranque, señales de salud del disco, estado de BitLocker, espacio libre.
  2. Prueba SFC y DISM antes de reinstalar nada.
  3. Si realmente necesitas conservar apps, planifica una actualización in-place y valida la compatibilidad del medio primero.
  4. Si el dispositivo no es de confianza, es inestable o el disco falla, deja de perseguir “mantener apps” y haz una instalación limpia o restauración desde imagen con redeploy controlado de apps.

Evitar ‘Este equipo no puede ejecutar Windows 11’ de forma segura (lo que importa)

Tienes un equipo perfectamente funcional. Arranca. Ejecuta tus aplicaciones. Probablemente le queden algunos años de servicio fiable. Y entonces aparece Windows 11 con el equivalente corporativo y educado de “el ordenador dice que no”.

Internet te ofrecerá encantada un único comando para sortearlo. Lo que no te dará es la realidad operativa: qué se rompe después, qué se vuelve más difícil de parchear y qué debes verificar para no convertir una estación de trabajo estable en un misterio lento.

Qué estás realmente evitando (y por qué a Microsoft le importa)

El mensaje “Este equipo no puede ejecutar Windows 11” no es una sola cosa. Es un conjunto de puertas que más o menos encajan con la postura de seguridad y soporte de Microsoft:

  • TPM 2.0: un almacén de claves respaldado por hardware usado para la identidad del dispositivo, BitLocker y escenarios de arranque medido. Windows 11 lo aprovecha.
  • Secure Boot: asegura que tu cadena de arranque esté firmada. No es mágico, pero bloquea una cantidad deprimente de malware tipo bootkit.
  • Lista de generaciones/modelos de CPU: menos sobre velocidad bruta y más sobre una base mínima de mitigaciones, soporte de controladores y superficie de pruebas.
  • UEFI + GPT: modo de arranque moderno. Las instalaciones en BIOS heredado aún pueden funcionar, pero las características de seguridad se vuelven incómodas rápido.
  • Mínimos de RAM/almacenamiento: puertas suaves. Puedes instalar de todos modos; solo que no deberías si te aprecias.

Eludir las comprobaciones es fácil. Hacer que la máquina funcione durante dos años sin fallos misteriosos de actualización, problemas de controladores o tickets de “por qué todo se queda trabado” es lo que separa un ajuste por hobby de una decisión operativa.

Aquí está la única opinión que importa: si eludes, te haces responsable. Eso significa que pruebas actualizaciones, mantienes medios de recuperación, vigilas la salud del disco y planificas una reversión. Si eso te parece demasiado trabajo, no eludas: reemplaza el hardware o quédate en Windows 10 hasta el fin de soporte.

Hechos e historia que explican el lío

Un poco de contexto hace que la política parezca menos arbitraria, incluso si sigues estando en desacuerdo con ella.

  1. TPM existe desde hace mucho. TPM 1.2 fue común en portátiles empresariales años antes de Windows 11, mayormente para BitLocker y aprovisionamiento corporativo.
  2. Secure Boot llegó en la era de Windows 8. Fue controvertido, luego se volvió normal y todos se olvidaron de su existencia hasta que Windows 11 lo convirtió en requisito.
  3. Las “listas de CPU compatibles” tienen tanto que ver con controladores como con velocidad. El verdadero dolor no es el cómputo; es que los proveedores abandonan chipsets y GPUs antiguos.
  4. Windows 10 se promocionó como “la última Windows”. Luego vino la realidad: líneas base de seguridad, cambios en la plataforma y ganas de estandarizar funciones.
  5. La seguridad basada en virtualización (VBS) se volvió importante. No es nueva, pero Windows 11 empuja más sistemas hacia ella, y las CPUs antiguas pueden sufrir pérdidas de rendimiento.
  6. Las mitigaciones de la era Meltdown/Spectre cambiaron las expectativas de rendimiento. Algunas CPUs antiguas se volvieron más lentas en formas que los usuarios notan en cargas intensivas de E/S y llamadas al sistema.
  7. UEFI desplazó al BIOS por una razón. No es más bonito; es más consistente, scriptable y compatible con cadenas de seguridad modernas.
  8. TPM no es solo para cifrado. Se usa para atestación e identidad en entornos gestionados: “prueba que arrancaste limpio” antes de conceder acceso.
  9. Microsoft tiene una curva de costes de soporte. Cada permutación extra de plataforma aumenta la matriz de pruebas y el riesgo de parches. Los requisitos reducen esa superficie.

Un chiste corto, porque somos adultos aquí: las comprobaciones de compatibilidad de Windows son como la seguridad aeroportuaria—principalmente teatro hasta el día en que te salvan de algo realmente terrible.

Un modelo de riesgo sensato: cuándo eludir está bien y cuándo es temerario

Seamos prácticos. “No soportado” no es una categoría moral; es una distribución de probabilidad. La clave es decidir si puedes tolerar los riesgos.

Casos algo verdes (eludir suele ser razonable)

  • Hay TPM pero está desactivado en firmware, o es TPM 1.2 y aceptas funcionar sin las garantías completas de Windows 11.
  • Secure Boot desactivado por una instalación dual con Linux antigua que puedes reconfigurar.
  • CPU ligeramente fuera de la lista pero aún relativamente moderna (y el sistema tiene SSD, 16GB de RAM y controladores decentes).
  • Equipo de un solo usuario donde puedes tolerar una reinstalación si las actualizaciones se vuelven extrañas.

Casos amarillos (eludir solo con preparación)

  • Portátil antiguo con controladores abandonados por el proveedor (Wi‑Fi, panel táctil, GPU). Necesitas un plan de controladores antes de tocar el SO.
  • Máquinas usadas para trabajo remoto con VPN corporativa, EDR y requisitos de cumplimiento. Eludir puede romper las comprobaciones de postura.
  • Disco ya “dudoso” (advertencias SMART, ralentizaciones). Actualizar el SO es una prueba de estrés. Reemplaza la unidad primero.

Casos rojos (no eludas; pagarás después)

  • Unidad de arranque en HDD y te niegas a pasar a SSD. Windows 11 en disco mecánico es un ticket de soporte en cámara lenta.
  • Sistemas con 4GB de RAM. Sí, quizá se instale. No, no te gustará. Tu navegador te dejará sin almuerzo.
  • Estación de trabajo crítica para la misión con expectativas de alta disponibilidad y sin ruta de reversión probada.
  • Cualquier cosa con BIOS conocido como inestable y sin actualizaciones de firmware disponibles. El firmware es la capa “no se puede parchear después”.

Mi encuadre operativo es este: puedes eludir requisitos, pero no puedes eludir la física. Latencia de almacenamiento, calidad de controladores y errores de firmware cobrarán su renta.

Guía de diagnóstico rápido (encuentra el verdadero cuello de botella primero)

Si el objetivo es “Windows 11 que se comporte”, no empieces con hacks en el registro. Empieza por las restricciones. Esto es triaje, no ideología.

Primero: almacenamiento y modo de arranque

  • ¿El disco del SO es un SSD? Si no, para. Mejora el almacenamiento antes de hacer cualquier otra cosa.
  • ¿El sistema arranca en UEFI con GPT? Si estás en BIOS heredado/MBR, planifica la conversión o acepta opciones de seguridad más débiles.
  • ¿La salud del disco es buena? Las advertencias SMART significan que estás a punto de reinstalar dos veces.

Segundo: características del firmware (TPM, Secure Boot, virtualización)

  • ¿TPM presente pero apagado? Enciéndelo en el firmware en lugar de eludirlo.
  • ¿Secure Boot disponible? Actívalo después de confirmar que estás en modo UEFI y que la cadena del cargador de arranque es coherente.
  • Características de virtualización (VT-x/AMD‑V, SVM, IOMMU) pueden importar para VBS/Hyper‑V. Comprueba, no adivines.

Tercero: controladores y postura de actualización

  • ¿Hay controladores de GPU disponibles? El adaptador de pantalla básico sirve para el día de la instalación, no para la vida diaria.
  • ¿Wi‑Fi/Ethernet son fiables? Si la red es inestable, la entrega de actualizaciones será tu enemiga.
  • Historial de Windows Update en ese dispositivo: si ya falla actualizaciones en Windows 10, no va a mejorar mágicamente.

Haz esas tres pasadas y sabrás si estás a punto de hacer una actualización ordenada o adoptar un hobby de resolución de problemas a largo plazo.

Tareas prácticas: comandos, salidas, decisiones (12+)

Estos son controles reales que puedes ejecutar ya sea en la instalación actual de Windows (recomendado) o inmediatamente después de una instalación de Windows 11. Cada tarea incluye: el comando, cómo es una salida “normal” y qué decisión tomar.

Task 1: Identify BIOS mode (UEFI vs Legacy)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-ComputerInfo | Select-Object BiosFirmwareType"
BiosFirmwareType
----------------
Uefi

Significado: Uefi es lo que quieres para Secure Boot y la postura más limpia de Windows 11.

Decisión: Si aparece Legacy, planifica la conversión MBR→GPT y el cambio de firmware a UEFI antes de habilitar Secure Boot.

Task 2: Confirm partition style (GPT vs MBR)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Disk | Select-Object Number,FriendlyName,PartitionStyle,Size"
Number FriendlyName            PartitionStyle          Size
------ ------------            --------------          ----
0      Samsung SSD 860 EVO     GPT             500105249280

Significado: GPT soporta de forma limpia particiones modernas de arranque y recuperación.

Decisión: Si el disco del SO es MBR, decide: convertir en el lugar (con cuidado) o instalación limpia a GPT.

Task 3: Measure disk health via SMART status

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-PhysicalDisk | Select-Object FriendlyName,MediaType,HealthStatus,OperationalStatus"
FriendlyName         MediaType HealthStatus OperationalStatus
------------         --------- ------------ -----------------
Samsung SSD 860 EVO  SSD       Healthy      OK

Significado: “Healthy/OK” es la línea base.

Decisión: Si ves Warning u otro estado operativo extraño, reemplaza la unidad antes de actualizar. Las migraciones de SO amplifican discos marginales.

Task 4: Confirm TRIM is enabled (SSD longevity/perf)

cr0x@server:~$ powershell.exe -NoProfile -Command "fsutil behavior query DisableDeleteNotify"
DisableDeleteNotify = 0

Significado: 0 significa que TRIM está habilitado.

Decisión: Si es 1, investiga el controlador/stack de almacenamiento; la deshabilitación puede causar degradación de rendimiento a largo plazo en SSD.

Task 5: Check TPM presence and version

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Tpm | Format-List"
TpmPresent                : True
TpmReady                  : True
TpmEnabled                : True
TpmActivated              : True
ManufacturerIdTxt         : IFX
ManufacturerVersion       : 7.63.3353.0
ManagedAuthLevel          : Full
OwnerAuth                 :

Significado: TPM está presente y listo. Este es el escenario de “no eludas”: simplemente úsalo.

Decisión: Si TpmPresent es False, eliges entre eludir y reemplazar hardware. Si está presente pero no listo, arregla la configuración de firmware primero.

Task 6: Check Secure Boot state

cr0x@server:~$ powershell.exe -NoProfile -Command "Confirm-SecureBootUEFI"
True

Significado: Secure Boot está habilitado.

Decisión: Si da error o devuelve False, no te asustes inmediatamente. Confirma que estás en modo UEFI; luego decide si habilitar Secure Boot (recomendado) o aceptar el riesgo.

Task 7: CPU model identification (stop guessing)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-CimInstance Win32_Processor | Select-Object Name,NumberOfCores,NumberOfLogicalProcessors"
Name                                      NumberOfCores NumberOfLogicalProcessors
----                                      ------------- -------------------------
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz   4             8

Significado: Sabes exactamente qué CPU tienes.

Decisión: Si la CPU es anterior a las listas de soporte de Microsoft, aún puedes seguir, pero trata las actualizaciones y funciones de seguridad como “verificar, no asumir”.

Task 8: RAM and memory pressure baseline

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-CimInstance Win32_ComputerSystem | Select-Object TotalPhysicalMemory"
TotalPhysicalMemory
-------------------
17179869184

Significado: 16GB de RAM. Windows 11 respirará.

Decisión: Si tienes 8GB, puede ser aceptable pero vigila el arranque y el consumo. Si tienes 4GB, no lo intentes salvo que sea un kiosco con una sola app y te guste el sufrimiento.

Task 9: Check virtualization features (VBS/Hyper-V readiness)

cr0x@server:~$ powershell.exe -NoProfile -Command "systeminfo | findstr /i \"Virtualization\""
Virtualization Enabled In Firmware: Yes
Second Level Address Translation: Yes
Virtualization-based Security Services Running: Not enabled

Significado: La virtualización está activada en firmware; SLAT es compatible. Bueno para funciones modernas de seguridad si decides activarlas.

Decisión: Si la virtualización está desactivada en firmware, decide si activarla compensa los posibles trade-offs de rendimiento/compatibilidad para tu carga de trabajo.

Task 10: Spot the real “slow PC” culprit: disk queue and latency

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-Counter '\\PhysicalDisk(_Total)\\Avg. Disk sec/Transfer' -SampleInterval 1 -MaxSamples 5"
Timestamp                 CounterSamples
---------                 --------------
2/4/2026 9:14:01 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.008
2/4/2026 9:14:02 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.010
2/4/2026 9:14:03 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.009
2/4/2026 9:14:04 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.008
2/4/2026 9:14:05 PM       \\pc\physicaldisk(_total)\avg. disk sec/transfer : 0.011

Significado: ~8–11ms de latencia media por transferencia. Eso es de tipo SSD y normalmente está bien.

Decisión: Si ves 0.050–0.200 (50–200ms) con poca carga, estás en HDD o el stack de almacenamiento está luchando. Arregla el almacenamiento antes de culpar a Windows 11.

Task 11: Verify Windows Update health quickly

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-WindowsUpdateLog -LogPath $env:TEMP\WU.log; Select-String -Path $env:TEMP\WU.log -Pattern 'FATAL','0x800f','0x8024' -SimpleMatch | Select-Object -First 5"
C:\Users\alex\AppData\Local\Temp\WU.log: 2026/02/04 20:31:12.3456789 1234 5678 Agent  *FAILED* [800f081f]

Significado: Códigos de error como 800f081f suelen indicar problemas en el almacén de componentes/servicing.

Decisión: Si los errores de actualización aparecen repetidamente, ejecuta reparaciones de servicing (DISM/SFC) antes y después de la actualización; las instalaciones no soportadas tienden a magnificar esas rarezas.

Task 12: Check OS build and install channel

cr0x@server:~$ powershell.exe -NoProfile -Command "winver"
Microsoft Windows
Version 23H2 (OS Build 22631.3007)

Significado: Sabes en qué versión estás, lo cual importa al depurar problemas de controladores y actualizaciones.

Decisión: Si estás en builds Insider en hardware no soportado, espera cambios frecuentes. Para estabilidad, quédate en canales de lanzamiento estables.

Task 13: Validate driver state for the GPU (avoid “Basic Display Adapter” life)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-PnpDevice -Class Display | Select-Object FriendlyName,Status,DriverVersion"
FriendlyName                       Status DriverVersion
------------                       ------ -------------
NVIDIA GeForce GTX 960             OK     31.0.15.5161

Significado: El driver real del proveedor está instalado y sano.

Decisión: Si solo ves “Microsoft Basic Display Adapter”, consigue drivers adecuados antes de declarar éxito.

Task 14: Confirm BitLocker state (and avoid self-inflicted lockouts)

cr0x@server:~$ powershell.exe -NoProfile -Command "manage-bde -status C:"
BitLocker Drive Encryption: Configuration Tool version 10.0.22621
Volume C: [OSDisk]
    Size:                 476.04 GB
    BitLocker Version:    2.0
    Conversion Status:    Fully Encrypted
    Percentage Encrypted: 100.0%
    Protection Status:    Protection On
    Lock Status:          Unlocked
    Identification Field: None
    Key Protectors:
        TPM
        Numerical Password

Significado: BitLocker está activo y protegido por TPM más un método de recuperación.

Decisión: Antes de cambiar ajustes de firmware (TPM/PTT/fTPM, Secure Boot), asegúrate de tener la clave de recuperación guardada fuera del propio portátil.

Task 15: Network driver sanity (because updates need networking)

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-NetAdapter | Select-Object Name,Status,LinkSpeed,DriverInformation"
Name          Status LinkSpeed DriverInformation
----          ------ --------- -----------------
Ethernet      Up     1 Gbps    Intel(R) Ethernet Connection (2) I219-V
Wi-Fi         Up     866 Mbps  Intel(R) Dual Band Wireless-AC 8265

Significado: Los adaptadores están activos con las velocidades de enlace esperadas.

Decisión: Si Wi‑Fi se cae o la información del controlador está en blanco/rara, estabiliza la red antes de confiar en Windows Update para “arreglarlo solo”.

Métodos de elusión que no te sabotean después

Hay varias formas comunes en que la gente elude los requisitos de Windows 11. Algunas están bien. Otras son “ingeniosas” como usar una palanca: funcionan, pero pagarás por un marco nuevo.

Method A: Fix the firmware instead of bypassing

Este es el mejor “eludir” porque no es tal.

  • Habilita TPM en firmware (Intel PTT o AMD fTPM).
  • Cambia a arranque UEFI.
  • Activa Secure Boot.

Si tu placa base soporta estas opciones y simplemente están deshabilitadas, hazlo. Te mantiene alineado con el modelo de seguridad previsto por Windows 11 y reduce fricción en las actualizaciones.

Method B: Installer-time registry bypass (surgical, reversible-ish)

Los chequeos del instalador de Microsoft pueden influirse durante el setup. El enfoque habitual es establecer una política “LabConfig” durante la instalación para saltarse ciertas comprobaciones. Es un bypass, pero relativamente contenido.

Operativamente, la ventaja es que puedes hacer una instalación limpia controlando el diseño del disco (GPT/UEFI), y mantener Secure Boot si la máquina lo soporta, incluso si las comprobaciones de CPU/TPM fallan.

Ejemplo de establecer claves de elusión durante el setup (desde el símbolo del sistema del instalador):

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

cr0x@server:~$ reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassCPUCheck /t REG_DWORD /d 1 /f
The operation completed successfully.

Significado: Has dicho a Setup que se salte esas comprobaciones.

Decisión: Solo elude lo estrictamente necesario. Si puedes habilitar TPM/Secure Boot, hazlo y evita las claves de elusión para esos elementos.

Method C: Media creation tools that offer “remove requirements” toggles

Herramientas como Rufus pueden crear medios de instalación de Windows 11 con las comprobaciones de requisitos eliminadas. Para muchos usuarios, este es el camino menos propenso a errores porque evita editar el registro durante la instalación.

Trade-off operativo: confías en una herramienta para hacer exactamente lo que crees que hizo. Está bien si la obtuviste de una fuente reputada y validas el resultado (estado de TPM, Secure Boot, salud de actualizaciones) después de la instalación. Confía, pero verifica—preferiblemente con comandos, no sensaciones.

Method D: In-place upgrade hacks

Las actualizaciones in-place en hardware no soportado pueden funcionar, pero son las más desordenadas desde el punto de vista de la fiabilidad. Heredas años de restos de controladores, estado de servicing extraño, ganchos de AV de terceros y utilidades OEM “útiles”.

Si te importa la estabilidad, prefiere una instalación limpia en un SSD conocido con ajustes de firmware conocidos. Si debes hacer una actualización in-place, haz una copia de imagen primero y acepta que la reversión puede ser tu mejor característica.

Segundo chiste corto: si haces una actualización in-place no soportada sin copia de seguridad, no necesitas Windows 11—necesitas un hobby que implique menos gritos.

Post-instalación: lo que sigue importando (seguridad, fiabilidad, rendimiento)

Eludas o no, Windows 11 sigue siendo Windows: un SO complejo apoyado en firmware, controladores, almacenamiento y tus elecciones. Esto es lo que realmente me importa después de la instalación.

1) La parcheabilidad es la verdadera definición de “soportado”

El hardware no soportado a veces puede recibir actualizaciones normalmente, hasta que deja de hacerlo. Tu trabajo es detectar el momento “hasta que deja de hacerlo” temprano.

  • Vigila fallos de actualización y errores de servicing.
  • Mantén un USB de recuperación arrancable.
  • Mantén al menos una imagen de respaldo reciente fuera de línea.

2) Calidad de controladores vence a especificaciones brutas

Una CPU de hace 10 años con controladores de chipset y GPU sólidos puede sentirse mejor que una máquina más nueva con controladores genéricos. Windows 11 no perdona cuando el controlador del controlador de almacenamiento es inestable o el driver de Wi‑Fi se cae por ahorro de energía.

Haz el hábito de revisar el Administrador de dispositivos por dispositivos desconocidos y consultar los registros de eventos por fallos de controladores. Si un controlador se reinicia repetidamente, trátalo como un incidente de producción: aislar, reproducir, actualizar/retroceder y validar.

3) Almacenamiento: la latencia es la experiencia de usuario

La interfaz de Windows 11 hace visible la latencia. Buscar, Menú Inicio, Explorador, indexación, escaneos de Defender—todo está moldeado por I/O. Si eludes requisitos pero mantienes un HDD, te estás haciendo ingeniería del caos a ti mismo.

4) Las funciones de seguridad son palancas, no trofeos

TPM y Secure Boot son buenos. VBS e Integridad de la memoria pueden ser buenos. Pero en hardware borderline, activar todo puede causar regresiones de rendimiento o incompatibilidades de controladores.

Decide según el modelo de amenaza:

  • Portátil empresarial con datos sensibles: prioriza BitLocker, Secure Boot, TPM y un proceso de recuperación probado.
  • PC de sobremesa para juegos en casa: puedes aceptar una postura de seguridad menor para mantener rendimiento y compatibilidad de controladores.
  • PC familiar compartida: prioriza actualizaciones, seguridad básica y buena higiene del navegador; no persigas cada ajuste.

5) La fiabilidad es aburrida a propósito

Una cita (idea parafraseada) que sirve a la gente de operaciones desde siempre:

Werner Vogels (idea parafraseada): “Todo falla eventualmente; diseñas sistemas asumiendo la falla, no pretendiendo que no ocurrirá.”

Aplica eso a los escritorios: ten una clave de recuperación, una copia de seguridad, medios de reinstalación y asume que una actualización un día saldrá mal.

Tres mini-historias corporativas desde el terreno

Mini-historia 1: El incidente causado por una suposición errónea

Una compañía mediana quería estandarizar en Windows 11 para un nuevo despliegue de aplicación interna. Compras afirmó que la flota antigua “básicamente tiene TPM” porque la hoja de especificaciones del modelo de portátil mencionaba hardware de seguridad.

IT hizo un piloto en unas pocas máquinas. Esas unidades casualmente tenían TPM habilitado en firmware y las actualizaciones se vieron bien. Se dio luz verde para unos cientos de endpoints.

El día del despliegue, la cola de helpdesk explotó. Un gran número de dispositivos fallaron comprobaciones de cumplimiento para cifrado de disco e informes de salud del dispositivo. La suposición no era “TPM existe”, era “TPM está habilitado y aprovisionado”. Esos son universos distintos.

La cosa empeoró porque algunos usuarios intentaron “arreglarlo” cambiando ajustes de firmware en casa. Un subconjunto activó prompts de recuperación de BitLocker sin tener sus claves de recuperación accesibles. Hubo llamadas en pánico y una carrera por recuperar claves desde herramientas de gestión para las máquinas que aún estaban registrándose.

La resolución fue dolorosamente simple: un script de preflight que comprobaba el estado de TPM, Secure Boot y preparación de BitLocker antes de ofrecer la actualización. La lección no fue que Windows 11 fuera exigente. La lección fue: inventaría el estado, no la capacidad.

Mini-historia 2: La optimización que salió mal

Otra organización decidió “acelerar” la experiencia de Windows 11 en hardware antiguo deshabilitando muchas funciones de seguridad y servicios en segundo plano en masa. La idea era comprensible: menos servicios, menos ciclos, usuarios más felices.

Aplicaron una política que desactivaba la seguridad basada en virtualización, ajustaba la gestión de energía y apagaba componentes considerados opcionales. El rendimiento mejoró ligeramente en algunos dispositivos límite. Todos se felicitaron y siguieron adelante.

Luego llegó un ciclo de parches. Un conjunto de dispositivos comenzó a fallar actualizaciones acumulativas y a revertir. Algunos tuvieron estados de servicing corruptos; otros conflictos de controladores expuestos por la actualización. Los cambios no fueron la única causa, pero quitaron los guardarraíles que hacían el diagnóstico determinista.

Peor aún, la “optimización” creó deriva de configuración: algunas máquinas tenían ajustes antiguos, otras los nuevos y algunas tenían usuarios que reactivaron cosas manualmente. Soporte no pudo reproducir problemas de forma fiable porque no había una línea base—había cinco.

Acabaron volviendo a una línea base de seguridad estándar y enfocándose en la verdadera limitación: almacenamiento. Muchas de las máquinas afectadas seguían en SATA SSDs antiguos con alta amplificación de escritura y salud marginal. El supuesto problema de CPU fue mayormente un problema de I/O disfrazado.

Mini-historia 3: La práctica aburrida pero correcta que salvó el día

Un entorno regulado necesitaba Windows 11 para una aplicación de proveedor, pero el hardware era mixto con algunas CPUs no soportadas. El equipo eligió un enfoque pragmático: eludir solo donde era necesario, pero tratar los endpoints como sistemas de producción.

Construyeron un despliegue guiado por listas de verificación: comprobación de versión de firmware, estado TPM, estado de Secure Boot, salud del disco, luego la actualización. Cada dispositivo recibió una copia de imagen fresca antes del primer intento. Sin excepciones.

Durante el despliegue, un pequeño subconjunto empezó a fallar al arrancar después de habilitar Secure Boot. El equipo no entró en pánico. Usaron las copias, restauraron la imagen conocida buena y luego investigaron rarezas de firmware en un grupo de prueba controlado.

Resultó que una versión específica de BIOS tenía un bug al gestionar el enrolamiento de claves durante las transiciones de Secure Boot. Actualizar el firmware primero lo solucionó. Porque tenían proceso estándar y copias de seguridad, el “incidente” fue un retraso menor, no una parada del negocio.

La práctica que los salvó no fue exótica. Fue “aburrida”: copias de seguridad, despliegue por etapas y negarse a tratar las actualizaciones de endpoints como una aventura de hacer clic y siguiente.

Errores comunes: síntoma → causa raíz → arreglo

Aquí es donde la mayoría de las instalaciones “no soportadas” de Windows 11 fallan—no durante la instalación, sino en las semanas posteriores.

1) Síntoma: Tirones aleatorios, menú Inicio lento, bloqueos del Explorador

  • Causa raíz: SO instalado en HDD o en un SSD con mala salud/firmware; tareas en segundo plano provocan contención de I/O.
  • Arreglo: Mueve el SO a un SSD sano. Valida la latencia con contadores de rendimiento. Revisa SMART/salud. No toques ajustes de UI hasta confirmar que el almacenamiento es bueno.

2) Síntoma: Windows Update falla repetidamente (bucles de rollback)

  • Causa raíz: Almacén de componentes corrupto, conflictos de controladores o problemas del servicing amplificados por la ruta de actualización.
  • Arreglo: Repara el almacén de componentes (DISM/SFC), elimina temporalmente AV/endpoint problemáticos, actualiza controladores de chipset/almacenamiento y reintenta.

3) Síntoma: Prompt de recuperación de BitLocker tras cambios de BIOS

  • Causa raíz: Las mediciones TPM cambiaron (TPM reseteado, Secure Boot toggled, firmware actualizado) y BitLocker pide la clave de recuperación.
  • Arreglo: Recupera la clave, arranca y luego suspende BitLocker antes de futuros cambios de firmware y reanuda después. No toggles TPM al azar.

4) Síntoma: Sin Wi‑Fi después de instalar

  • Causa raíz: Falta del controlador del proveedor; el chip Wi‑Fi antiguo no está cubierto por drivers inbox.
  • Arreglo: Predescarga controladores o usa Ethernet / tethering USB. Si el adaptador está realmente no soportado, reemplázalo por una tarjeta/dongle compatible.

5) Síntoma: No puedes habilitar Secure Boot (opción ausente o atenuada)

  • Causa raíz: El sistema arranca en modo Legacy, el disco es MBR o CSM está habilitado.
  • Arreglo: Convierte el disco a GPT donde sea apropiado, cambia el firmware a UEFI, desactiva CSM y luego habilita Secure Boot.

6) Síntoma: Pantallazos al activar Integridad de memoria / VBS

  • Causa raíz: Controladores antiguos (a menudo almacenamiento, virtualización, anti‑cheat o utilidades de bajo nivel) incompatibles con HVCI.
  • Arreglo: Actualiza/reemplaza controladores, elimina utilidades OEM de bajo nivel o deja la función desactivada en ese dispositivo. La estabilidad es más importante que un tick de seguridad.

7) Síntoma: “TPM no detectado” aunque el hardware lo soporte

  • Causa raíz: TPM deshabilitado en firmware (PTT/fTPM apagado) o mal configurado tras un reset de BIOS.
  • Arreglo: Habilita TPM en firmware, actualiza BIOS si hace falta y confirma con Get-Tpm. No confíes en las hojas de especificaciones comerciales.

Listas de verificación / plan paso a paso

Este es el plan que le daría a un compañero y esperaría resultados consistentes. Elige la ruta que coincida con tu apetito de riesgo.

Plan A (mejor): cumplir requisitos vía firmware + mejoras de almacenamiento

  1. Haz copia de seguridad: imagen del sistema a un disco externo. Verifica que pueda montarse/leer.
  2. Comprueba la salud del disco y reemplaza unidades defectuosas antes de cualquier cambio de SO.
  3. Confirma UEFI + GPT. Convierte si es necesario.
  4. Habilita TPM (PTT/fTPM) en firmware.
  5. Activa Secure Boot una vez que el modo de arranque sea correcto.
  6. Actualiza firmware BIOS/UEFI a una versión estable (no beta a menos que te guste la ruleta).
  7. Actualiza/instala Windows 11 normalmente.
  8. Validación post-instalación: éxito de Windows Update, controladores OK, latencia de disco razonable, comportamiento de BitLocker entendido.

Plan B (elusión pragmática): elude solo lo estrictamente necesario

  1. Haz copia de seguridad (imagen) y exporta claves de recuperación de BitLocker si el cifrado está activado.
  2. Pasa a SSD si aún no estás en uno.
  3. Usa UEFI + GPT incluso si eludes comprobaciones de TPM/CPU. Aún quieres fiabilidad de arranque moderna.
  4. Prefiere eludir en tiempo de instalador o usar herramientas de medios reputadas para mantener los cambios contenidos.
  5. Instala limpio cuando sea posible. Las actualizaciones in-place son para cuando estás atrapado por apps.
  6. Valida inmediatamente la salud de actualizaciones y el estado de controladores tras instalar.
  7. Decide conscientemente sobre funciones de seguridad: BitLocker, Secure Boot, VBS. Activa lo que sea estable en tu hardware.

Plan C (no lo hagas): “lo lanzo” sin ruta de recuperación

  • Sin copia de seguridad.
  • Unidad de arranque HDD.
  • Ajustes de BIOS desconocidos.
  • Scripts aleatorios de foros aplicados a ciegas.

Si este es tu plan, el siguiente paso correcto es detenerte y hacer Plan A o B.

Notas operativas: lo que la gente olvida hasta que duele

Cambios de firmware y BitLocker: suspende antes de tocar

Si BitLocker está habilitado, cambiar Secure Boot o ajustes de TPM puede activar el modo de recuperación. Eso no es BitLocker “roto”. Está haciendo su trabajo.

Antes de cambios de firmware planeados, suspende la protección, realiza el cambio, arranca con éxito y luego reanuda. Valida que puedes recuperar las claves desde donde las almacenes.

Salud del almacén de componentes: mantén el servicing limpio

Las instalaciones no soportadas a veces reciben la culpa por fallos que en realidad son corrupción de servicing antigua arrastrada. Si las actualizaciones actúan como poseídas, repara el servicing.

cr0x@server:~$ powershell.exe -NoProfile -Command "DISM /Online /Cleanup-Image /ScanHealth"
Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Image Version: 10.0.22631.3007

No component store corruption detected.
The operation completed successfully.

Significado: El almacén de servicing está limpio.

Decisión: Si se detecta corrupción, ejecuta /RestoreHealth antes de perseguir controladores o culpar a “no soportado”.

cr0x@server:~$ powershell.exe -NoProfile -Command "sfc /scannow"
Beginning system scan. This process will take some time.

Windows Resource Protection did not find any integrity violations.

Significado: Los archivos del sistema parecen consistentes.

Decisión: Si encuentra violaciones que no puede reparar, estás en territorio de reparación in-place o instalación limpia.

Registros de eventos: tu mejor herramienta de “por qué”

Cuando algo es inestable—reanudación de suspensión, reinicios de controladores, fallos de actualización—ve a los logs. Windows hace mucho ruido, pero no está en silencio.

cr0x@server:~$ powershell.exe -NoProfile -Command "Get-WinEvent -LogName System -MaxEvents 20 | Select-Object TimeCreated,Id,LevelDisplayName,ProviderName,Message | Format-Table -AutoSize"
TimeCreated           Id LevelDisplayName ProviderName               Message
-----------           -- ---------------- ------------               -------
2/4/2026 9:01:12 PM  41 Critical         Microsoft-Windows-Kernel-Power The system has rebooted without cleanly shutting down first.
2/4/2026 8:59:44 PM 129 Warning          storahci                    Reset to device, \Device\RaidPort0, was issued.

Significado: Advertencias de reinicio de almacenamiento más reinicio inesperado es una firma clásica de “inestabilidad del stack de almacenamiento”.

Decisión: Actualiza controladores/firmware del controlador de almacenamiento, revisa cableado (en equipos de sobremesa), verifica salud del SSD. No pierdas tiempo afinando ajustes de UI.

Preguntas frecuentes

1) ¿Dejarán de funcionar las actualizaciones de Windows 11 en hardware no soportado?

A veces siguen funcionando durante mucho tiempo. A veces una actualización acumulativa o de característica es el precipicio. Si eludes, vigila el éxito de las actualizaciones y mantén un plan de reversión.

2) ¿Es más seguro eludir TPM o Secure Boot?

Si tu hardware los soporta, no eludas ninguno: habilítalos correctamente. Si debes eludir algo, eludir comprobaciones de CPU suele ser menos arriesgado de forma inmediata que correr sin Secure Boot en un portátil que viaja.

3) ¿Puedo habilitar TPM después de instalar con un bypass?

A menudo sí, si la plataforma tiene TPM en firmware (PTT/fTPM) y solo estaba desactivado. Pero habilitar TPM después puede afectar cifrado y funciones de identidad. Hazlo deliberadamente y conserva las claves de recuperación a mano.

4) ¿Debería hacer una actualización in-place o una instalación limpia?

Instalación limpia si te importa la fiabilidad. Actualización in-place si estás constreñido por aplicaciones instaladas, estado de usuario o controles corporativos—y tienes una imagen de respaldo verificada.

5) ¿Windows 11 funciona bien en CPUs antiguas si tengo un SSD?

Usualmente “funciona” en el sentido de ser usable, especialmente con 16GB de RAM y controladores decentes. El riesgo mayor es el soporte de controladores y la ocasional función de seguridad que cause rendimiento o problemas de estabilidad.

6) ¿Activar VBS/Integridad de memoria ralentizará mi máquina?

Puedes notar ralentizaciones, especialmente en CPUs antiguas o en cargas intensivas de I/O y cambios de contexto. Prueba con tu carga de trabajo. Si ves regresiones mensurables o inestabilidad de controladores, prioriza la estabilidad y vuelve a evaluarlo luego.

7) ¿Puedo usar BitLocker sin TPM 2.0?

Sí, pero quizá necesites usar protectores por contraseña/USB, y la experiencia será menos fluida. La protección respaldada por TPM suele ser más fluida y más segura cuando está disponible.

8) ¿Cuál es el predictor más importante de una buena experiencia con Windows 11 en hardware “no soportado”?

El almacenamiento. Un SSD sano con latencia razonable vence casi todo lo demás. Después: disponibilidad de drivers y madurez del firmware.

9) ¿“Este equipo no puede ejecutar Windows 11” siempre es exacto?

Es exacto respecto a los requisitos de Microsoft, no respecto a si el SO puede correr físicamente. La cuestión es si puedes operarlo de forma segura y mantenerlo parcheado sin drama.

10) Si eludo ahora, ¿estoy atrapado para siempre?

No, pero deberías planear un futuro donde reemplaces el dispositivo o reviertas. Mantén medios de instalación y copias de seguridad, y evita ajustes únicos que no puedas reproducir.

Siguientes pasos

Haz esto en orden y evitarás la mayoría de heridas autoinfligidas:

  1. Inventario la realidad: ejecuta las comprobaciones arriba (UEFI/GPT, TPM, Secure Boot, salud del disco, latencia).
  2. Arregla el almacenamiento primero: si no estás en un SSD sano, detente y arregla eso.
  3. Habilita funciones de firmware en lugar de eludirlas cuando sea posible.
  4. Elige una instalación limpia salvo que tengas una razón poderosa para no hacerlo.
  5. Elude solo lo estrictamente necesario, y documenta lo que cambiaste.
  6. Valida post-instalación: actualizaciones, controladores, logs de eventos, latencia de disco, comportamiento de cifrado.
  7. Mantén un plan de reversión: imágenes de respaldo y medios de recuperación no son opcionales cuando operas fuera de los guardarraíles.

El objetivo no es “vencer” al instalador. El objetivo es una máquina que arranque limpio, se actualice sin problemas y no convierta tus noches en arqueología forense.

Dimensionamiento de fuentes para servidores — Deja de adivinar, empieza a medir

La forma más rápida de quedar mal en un centro de datos es “saber” que un servidor es una caja de 500W porque la hoja de especificaciones lo decía—hasta que una actualización
de firmware pone los ventiladores al modo motor a reacción, el disyuntor salta y tu “pequeño percance” se convierte en un ticket de caída con tu nombre.

La energía es una dependencia de producción. Trátala como tal. Si puedes graficar latencia, puedes graficar vatios. Y si puedes medir vatios, puedes dejar de comprar PSUs
como si eligieras neumáticos de invierno por instinto.

Por qué el dimensionamiento de PSUs es un problema de SRE, no de compras

El dimensionamiento de PSUs a menudo se trata como una casilla de compra: elegir una potencia, marcar “redundante”, enviarlo. En sistemas de producción, ese enfoque falla por la misma
razón que “simplemente añadiremos más nodos” falla: ignora los límites duros que saltan primero.

La PSU es donde tu carga de trabajo se encuentra con la física. Los picos de carga se convierten en picos de corriente. El comportamiento del firmware se convierte en potencia de ventilador.
Una NIC nueva suma unos vatios que nunca presupuestaste. Y lo más humillante: cuando la energía actúa raro, los síntomas no siempre gritan “energía.”
Obtienes discos inestables, reinicios sorpresa, resets de NIC, sensores BMC corruptos o panics de kernel “aleatorios”. Los problemas de energía se disfrazan de problemas de software.

Quieres tres resultados:

  • No más caídas causadas por disparos de disyuntores, sobrecarga de PSU o bajadas de tensión.
  • No desperdicio por PSUs sobredimensionadas que funcionan de forma ineficiente a baja carga.
  • Recuperación rápida cuando falla una PSU, una alimentación cae o un PDU te da lecturas erróneas.

Si tu método actual para dimensionar PSUs es “sumar TDPs y redondear hacia arriba”, estás ejecutando producción con esperanza. La esperanza no es una fuente de energía.

Hechos interesantes y un poco de historia (para que dejes de repetir viejos errores)

  1. Las primeras fuentes de PC se centraban en cargas con mucho 5V. Los servidores modernos son en gran parte centrados en 12V, y la conversión DC-DC pasó a la placa.
  2. ATX12V (principios de 2000) desplazó más potencia a 12V para alimentar CPUs, cambiando cómo importaban los “rails” y los límites de corriente en montajes reales.
  3. 80 PLUS (mediados de 2000) convirtió la eficiencia en un elemento de marketing y compra, pero sus puntos de prueba no cubren tus cargas de trabajo con picos.
  4. Los centros de datos migraron del pensamiento “una UPS grande” a UPS distribuidas y PDUs inteligentes, facilitando la medición—si realmente la usas.
  5. Las PSUs redundantes se volvieron estándar no porque sean bonitas, sino porque intercambiar una PSU en caliente es mejor que una ventana de mantenimiento a las 2 a. m.
  6. CPUs y GPUs modernas introdujeron comportamientos agresivos de boost; la potencia instantánea puede exceder el “TDP” de formas que los equipos de compras rara vez mencionan.
  7. Las curvas de ventilador cambiaron el juego: ventiladores de alta presión estática pueden consumir potencia significativa a full, y las actualizaciones de firmware pueden alterar ese comportamiento de la noche a la mañana.
  8. La densidad de rack explotó con la llegada de la virtualización y GPUs; la potencia y la refrigeración se convirtieron en las primeras limitaciones, no las unidades de rack.
  9. La coordinación de disyuntores en las instalaciones evolucionó, pero los disyuntores siguen actuando más rápido que tu alerting a veces—especialmente con inrush.

Un modelo mental sensato: promedio, pico y los feos segundos intermedios

Los errores de dimensionamiento de PSU surgen de usar un número cuando necesitas al menos tres:

  • Promedio en estado estable: lo que el servidor consume la mayor parte del tiempo.
  • Pico sostenido: lo que consume durante trabajo real, no matemáticas sintéticas de “TDP”.
  • Transitorio/irrupción: lo que consume durante el arranque, el giro simultáneo de discos, la subida de ventiladores o picos de boost de GPU.

Añade un cuarto si trabajas con redundancia:
modo de una sola PSU—porque en una configuración 1+1 aún necesitas sobrevivir con una sola PSU sin colapsar.

Qué significa realmente “potencia de la PSU”

Una PSU “1200W” normalmente está especificada para cierta tensión de entrada, temperatura, flujo de aire y a veces altitud. También implica una salida máxima DC bajo esas
condiciones. No significa que tu sistema pueda extraer de forma segura 1200W continuamente en cualquier rack, a cualquier temperatura, con cualquier alimentación, mientras los
pelusas de polvo hacen una red aislante dentro del chasis.

Una cita que debes tener en la pared

“La esperanza no es una estrategia.” — Gen. Gordon R. Sullivan

No era un SRE, pero el sentimiento es dolorosamente relevante. En la planificación de energía, “probablemente no alcanzará picos” es esperanza, vestida de ingeniería.

Broma #1: Una PSU de servidor es como un paracaídas: si solo descubres que es insuficiente cuando la necesitas, vas a tener un mal día.

Qué medir (y qué no te dirán las hojas de especificaciones)

Las hojas de especificaciones están escritas para vender hardware, no para mantener tu clúster vivo. Aun así son útiles—pero solo como condiciones límite. Tu trabajo es
medir la realidad en tu entorno, con tu firmware y tu mezcla de cargas.

Mide en múltiples capas

  • Potencia de entrada en pared / PDU: lo que pagas y lo que hace saltar disyuntores.
  • Salida de la PSU (rara vez visible directamente): lo que el sistema consume en términos DC.
  • Pistas a nivel de componentes: potencia del paquete CPU, potencia GPU, actividad de discos, RPM y PWM de ventiladores.

Conoce los límites que importan

  • Circuito ramal (calificación del disyuntor; las prácticas de derating por carga continua varían por región y código).
  • Límites de PDU y enchufe (C13/C14 vs C19/C20, calibre del cable, límites por toma).
  • Clasificación por unidad de la PSU a tu tensión de entrada (obvia trampa: rendimiento y margen disponibles difieren entre 120V y 208/230V).
  • Modo de redundancia (compartición de carga vs activo/standby; y si la plataforma puede sobrevivir con una PSU a plena carga).

No confundas estos términos

  • TDP: un punto de diseño térmico, no un techo contractual de potencia.
  • PL1/PL2 (y equivalentes de los proveedores): política de potencia sostenida vs boost; el firmware puede cambiarlos.
  • Potencia aparente (VA) vs potencia real (W): los UPS y PDUs pueden reportar cualquiera; el factor de potencia importa cuando estás cerca de los límites.

Tareas prácticas de medición (comandos, salidas, decisiones)

No puedes “arquitectar” evitando la medición. A continuación hay tareas concretas y ejecutables. Cada una incluye: un comando, qué significa la salida y la decisión que soporta.
Úsalas para construir un perfil de potencia por modelo de servidor y por clase de carga.

Task 1: Read BMC-reported instantaneous power (IPMI)

cr0x@server:~$ ipmitool sensor | egrep -i 'Power|Pwr Consumption|Watts'
Pwr Consumption   | 312        | Watts      | ok

Significado: El BMC piensa que el sistema está consumiendo ~312W ahora mismo (a menudo potencia de entrada, a veces calculada).
Decisión: Si esto está lejos de tu expectativa, valida la fuente BMC contra la medición del PDU antes de confiar en ella para planificación de capacidad.

Task 2: Pull power history / min-max if the platform exposes it

cr0x@server:~$ ipmitool sdr elist | egrep -i 'Pwr|Power'
System Level      | 00h | ok  |  3.1 | Power Meter
System Level      | 01h | ok  |  3.2 | Power Max
System Level      | 02h | ok  |  3.3 | Power Min

Significado: Algunos proveedores exponen máximo/mínimo desde el arranque o reinicio.
Decisión: Si el máximo está cerca de los límites de la PSU o del circuito, no lo “promedies” y lo ignores. Planea para él o limita la potencia.

Task 3: Measure CPU package power limits and current draw (Intel RAPL via powercap)

cr0x@server:~$ sudo cat /sys/class/powercap/intel-rapl:0/constraint_0_power_limit_uw
225000000

Significado: 225,000,000 µW = 225W límite sostenido del paquete (algo parecido a PL1) para ese dominio RAPL.
Decisión: Si tu dimensionamiento de PSU asumía “CPU de 165W”, pero el firmware permite 225W sostenidos, actualiza tu presupuesto o aplica un límite.

Task 4: Sample RAPL energy to estimate average CPU power over an interval

cr0x@server:~$ E1=$(cat /sys/class/powercap/intel-rapl:0/energy_uj); sleep 10; E2=$(cat /sys/class/powercap/intel-rapl:0/energy_uj); echo $(( (E2-E1)/10000000 ))
186

Significado: Aproximadamente 186W de media para ese paquete durante 10 segundos (energía en µJ dividida por 10s).
Decisión: Identifica cargas con CPU sostenida alta; son las que convierten “pico” en un evento frecuente.

Task 5: Check GPU power draw and limits (NVIDIA)

cr0x@server:~$ nvidia-smi --query-gpu=name,power.draw,power.limit,clocks.sm --format=csv,noheader
NVIDIA A10, 126.54 W, 150.00 W, 1395 MHz

Significado: La potencia real de la GPU es 126W, con un límite de 150W.
Decisión: Para servidores GPU, dimensionar PSUs sin telemetría real de potencia GPU es postureo. Si varias GPUs pueden alcanzar el límite simultáneamente, presupuestalo.

Task 6: Verify current CPU frequency and throttle status (quick sanity check)

cr0x@server:~$ lscpu | egrep -i 'Model name|CPU max MHz|CPU MHz'
Model name:          Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz
CPU max MHz:         3200.0000
CPU MHz:             2001.102

Significado: La frecuencia actual no está en boost; bajo carga puede dispararse e incrementar la potencia.
Decisión: Si ves frecuencia persistentemente baja bajo carga, puede que estés limitado por potencia o por temperatura—ambos vuelven al tema de PSU y refrigeración.

Task 7: Check for power-related events in kernel logs

cr0x@server:~$ sudo journalctl -k -b | egrep -i 'power|brown|thrott|vrm|PSU|over current|watchdog' | tail -n 20
kernel: mce: [Hardware Error]: CPU 0: Machine Check: 0 Bank 27: b200000000070005
kernel: EDAC MC0: CPU power throttling detected

Significado: Hardware/firmware reportó throttling o errores que pueden estar relacionados con la entrega de potencia (no siempre, pero vale la pena correlacionarlo).
Decisión: Si esto se correlaciona con picos o reinicios, deja de depurar “inestabilidad aleatoria” e inspecciona las alimentaciones, PSUs y termales.

Task 8: Check PSU status and redundancy mode via IPMI (if supported)

cr0x@server:~$ ipmitool sdr type 'Power Supply'
PS1 Status       | ok
PS2 Status       | ok
PS1 Input Power  | 165 Watts
PS2 Input Power  | 162 Watts

Significado: Ambas PSUs están activas y comparten la carga de forma aproximada.
Decisión: Si esperabas 1+1 con una inactiva y otra activa, puede que no estés en el modo de redundancia que crees. Actualiza tu modelo de fallo.

Task 9: Measure wall power via a metered rack PDU (SNMP example)

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.6.3.1.7.1
SNMPv2-SMI::enterprises.318.1.1.26.6.3.1.7.1 = INTEGER: 356

Significado: El OID del proveedor devuelve potencia de la salida en vatios (ejemplo: 356W). Las semánticas del MIB varían; confirma las unidades una vez y luego automatiza.
Decisión: Usa las lecturas del PDU como la verdad base para planificación de circuitos y riesgo de disyuntor. Las lecturas del BMC son “agradables de tener”, no tu contabilidad.

Task 10: Check PDU outlet current to spot near-trip risk

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.6.3.1.5.1
SNMPv2-SMI::enterprises.318.1.1.26.6.3.1.5.1 = INTEGER: 28

Significado: Corriente de la salida (ejemplo: 2.8A si el dispositivo usa deci-amperios; de nuevo, específico del proveedor).
Decisión: Convierte a amperios, compáralo con los límites del circuito y del PDU por toma. Si estás cerca, no añadas “solo un nodo más”.

Task 11: Correlate workload with power using a controlled load test (CPU)

cr0x@server:~$ sudo apt-get -y install stress-ng
...
cr0x@server:~$ stress-ng --cpu 32 --cpu-method matrixprod --timeout 60s --metrics-brief
stress-ng: info:  [8421] dispatching hogs: 32 cpu
stress-ng: metrc: [8421] cpu                60.00s  19184.12 bogo ops/s

Significado: Has creado una carga de CPU repetible. Combínala con lecturas simultáneas del PDU/BMC.
Decisión: Construye una línea base “pico solo CPU” por plataforma. Luego haz lo mismo con disco y red para ver picos combinados.

Task 12: Disk activity and drive count matter—measure it (storage load)

cr0x@server:~$ iostat -dx 2 3
Device            r/s     w/s   rMB/s   wMB/s avgrq-sz avgqu-sz await  svctm  %util
nvme0n1         820.0   110.0   128.0    24.0     358     2.10   2.1   0.6   55.0

Significado: El almacenamiento está haciendo trabajo real. Las unidades y controladores consumen más bajo carga; los HDDs también tienen picos de spin-up.
Decisión: Si tu pico de potencia coincide con rebuilds/resyncs, presupuestado la “potencia en modo fallo”, no solo la potencia en camino feliz.

Task 13: Check for RAID/HBA controller battery/flash module charging events

cr0x@server:~$ sudo dmesg | egrep -i 'battery|cachevault|supercap|charging' | tail -n 20
megaraid_sas 0000:3b:00.0: CacheVault charging started

Significado: Los módulos de protección de caché pueden consumir potencia extra mientras cargan tras mantenimiento o inactividad prolongada.
Decisión: Si has tenido arranques en frío o mantenimiento, espera un aumento temporal de potencia. No lo trates como “vatios misteriosos”.

Task 14: Check fan RPM and PWM—fans are not free

cr0x@server:~$ sudo ipmitool sdr | egrep -i 'FAN|RPM' | head
FAN1            | 7800   | RPM  | ok
FAN2            | 8100   | RPM  | ok

Significado: RPM altas implican mayor consumo de ventilador y a menudo indican estrés térmico o un cambio de perfil de firmware.
Decisión: Si ves velocidades altas sostenidas, investiga el flujo de aire y las temperaturas de entrada; tu presupuesto de potencia y las térmicas de la PSU ahora son peores.

Task 15: Validate PSU input voltage (because 120V vs 208V matters)

cr0x@server:~$ ipmitool sensor | egrep -i 'Inlet|VIN|AC|Voltage' | head
PS1 Inlet Volt   | 208        | Volts     | ok
PS2 Inlet Volt   | 208        | Volts     | ok

Significado: Las PSUs ven 208V, lo que generalmente mejora la eficiencia y reduce la corriente para la misma potencia.
Decisión: Si estás en 120V y empujando densidad, considera moverte a alimentaciones de mayor tensión cuando sea factible. A menudo es la victoria de capacidad más sencilla.

Task 16: Quick-and-dirty inrush observation with PDU peak logging (if supported)

cr0x@server:~$ snmpget -v2c -c public pdu01 1.3.6.1.4.1.318.1.1.26.4.3.1.6.1
SNMPv2-SMI::enterprises.318.1.1.26.4.3.1.6.1 = INTEGER: 47

Significado: Un contador tipo “pico de corriente desde el último reinicio” (ejemplo). El OID exacto depende del proveedor y modelo.
Decisión: Si el pico de corriente está muy por encima del estado estable, escalona arranques y evita encendidos sincronizados tras cortes.

PSUs redundantes: 1+1 no siempre es 1+1

Las PSUs redundantes se venden como confiabilidad. En la práctica, lo son solo si las dimensionas y alimentas correctamente.
Dos PSUs no garantizan que puedas funcionar a potencia completa tras la falla de una. Eso depende de:

  • Capacidad por PSU frente al pico del sistema.
  • Comportamiento de reparto de carga (activo/activo o activo/standby).
  • Comportamiento de limitación de potencia cuando falta una PSU (algunos sistemas limitan automáticamente; otros simplemente se caen).
  • Independencia de las alimentaciones (dos PSUs en la misma PDU no son redundancia; es optimismo con pasos extra).

Dimensionamiento N+1 en términos sencillos

Si tienes dos PSUs de 800W en una configuración 1+1, la pregunta relevante es:
¿Puede el servidor funcionar a pico con una sola PSU de 800W?
Si tu pico real medido es 780W en la pared y tu PSU se deratea a altas temperaturas de entrada, no estás “seguro”. Estás equilibrado en una delgada tecnicidad.

El reparto de carga no está garantizado

Si dos PSUs comparten mal (firmware, PSUs desajustadas, envejecimiento o cableado), una PSU puede trabajar más caliente y cerca del límite. Cuando falle, la otra recibe
una carga de paso que puede causar una segunda falla o un reinicio. Ese es el “doble golpe de PSU redundante”, y es tan divertido como suena.

Corriente de irrupción: al disyuntor no le importan tus hojas de cálculo

La irrupción es la sobretensión cuando aplicas alimentación—cargando condensadores, arrancando ventiladores, haciendo girar discos, despertando GPUs y dejando que cada regulador decida que es
hora de fiestear. Tu presupuesto de potencia en estado estable puede parecer correcto mientras la irrupción hace saltar el disyuntor durante un reinicio masivo.

A la gente de instalaciones le importa porque es la diferencia entre “energía restaurada” y “la mitad de la fila quedó a oscuras”. Debería importarte porque tras un evento en el centro de datos,
todos harán ciclos de energía al mismo tiempo, y tu orquestador podría ayudar amigablemente a hacer lo mismo.

Broma #2: Los disyuntores son como los ingenieros de guardia: toleran mucho, pero recuerdan exactamente una última paja.

Cómo reducir el riesgo por irrupción

  • Escalonar arranques (PDUs, automatización fuera de banda o ganchos de orquestación).
  • Evitar rampas de ventilador sincronizadas actualizando firmware en olas controladas, no “todo el viernes de la flota”.
  • Conocer el comportamiento de los HDD: opciones de giro escalonado en HBAs pueden salvar tu disyuntor y tu orgullo.
  • Medir corriente pico donde sea posible: algunos PDUs y UPS medidos registran picos y eventos de irrupción.

Derating: temperatura, altitud, polvo y por qué “1200W” a veces es fantasía

Las especificaciones de las PSUs asumen condiciones concretas. Luego instalas el servidor en un rack con tapones parciales, un pasillo caliente que es más una “sugerencia cálida”, y polvo
que convierte los disipadores en fieltro.

El derating aparece como:

  • Menor salida disponible a mayor temperatura de entrada.
  • Mayor potencia de ventilador (lo que aumenta el consumo del sistema y reduce la eficiencia).
  • Apagado térmico anticipado o throttling protector.

La temperatura es un multiplicador de riesgo

Un servidor que “está bien” a 18°C de entrada puede volverse frágil a 30°C cuando falla una PSU y la PSU restante trabaja más caliente y ruidosa.
Ese es el peor momento para descubrir que tu suposición de redundancia se basaba en un folleto de laboratorio.

La altitud es real (sí, de verdad)

La altitud alta reduce la densidad del aire, disminuyendo la eficacia del enfriamiento. Muchos proveedores especifican derating por encima de ciertas elevaciones. Puedes ignorarlo si quieres,
pero la PSU no se convencerá por tu confianza.

Curvas de eficiencia: los vatios que no dibujas también te cuestan

La eficiencia no es constante. Es una curva. La mayoría de las PSUs rinden mejor alrededor del 40–60% de carga, dependiendo del diseño. A muy baja carga, la eficiencia cae,
y desperdicias potencia en calor. A muy alta carga, la eficiencia también puede caer y las térmicas se ponen feas.

Sobredimensionar por defecto parece “seguro”, pero puede desperdiciar dinero de tres maneras:

  • Capex: los modelos de PSU más grandes cuestan más.
  • Opex: menor eficiencia en idle a través de la flota no es lindo en la factura eléctrica.
  • Refrigeración: los vatios desperdiciados se convierten en calor que tu instalación debe eliminar.

Qué hacer en lugar de sobredimensionar a ciegas

Mide tu pico real y elige una PSU tal que:

  • Tu estado estable quede en la parte eficiente de la curva.
  • Tu pico sostenido se mantenga por debajo de un umbral conservador (especialmente en modo N+1).
  • Tu irrupción no haga saltar circuitos ramales durante eventos de flota.

Esto es menos glamuroso que comprar la unidad más grande disponible. También es cómo evitas pasar fines de semana en un pasillo frío con una linterna.

Tres mini-historias corporativas desde la tierra del “debería estar bien”

Mini-historia 1: El incidente causado por una suposición errónea

Una empresa desplegó una nueva tanda de servidores orientados a almacenamiento: muchos discos, controladores duales y PSUs “redundantes”. Compras dimensionó las PSUs sumando
TDP de CPU, RAM y “un poco por discos”. También estandarizaron una alimentación de 120V en una sala legacy porque “ya estaba ahí”.

Todo parecía bien en estado estable. Los racks estaban tranquilos, los gráficos de monitorización eran aburridos y el despliegue fue declarado un éxito. Entonces la instalación
realizó un mantenimiento planificado de energía. Tras restaurar la energía, toda la fila intentó arrancar a la vez. Varios disyuntores saltaron de inmediato. Un puñado de racks volvió
medio vivo: algunos servidores entraron en boot-loop, otros perdieron discos y un par de controladores arrancaron degradados.

La postmortem fue un desastre porque la primera ola de depuración fue contra software: versiones de kernel, orden de arranque, firmware de RAID. La pista fue que las fallas
se agruparon por rack y PDU, no por build del SO. Alguien finalmente sacó los logs de picos de corriente del PDU y los comparó con la calificación del circuito ramal.

La causa raíz no fue que los servidores consumieran “demasiada potencia” en promedio. Fue que la irrupción y el giro sincronizado de discos sobrepasaron la tolerancia del disyuntor
a 120V, donde la corriente es mayor para la misma potencia. Las “PSUs redundantes” no ayudaron porque la redundancia no evita que salte un disyuntor.

La solución fue aburrida: secuenciar arranques, habilitar giro escalonado en los HBAs y mover los racks de mayor densidad a alimentaciones de mayor tensión donde fue posible. También
empezaron a capturar picos de potencia en el PDU como parte de las pruebas de aceptación. El siguiente mantenimiento fue sin incidentes—que es el mejor tipo de evento.

Mini-historia 2: La optimización que salió mal

Otra organización se puso seria con la eficiencia y decidió “redimensionar” agresivamente. Notaron que sus servidores reposaban entre 120–160W y concluyeron que PSUs más pequeñas
mejorarían la eficiencia en idle. Impusieron una configuración estándar con PSUs de menor potencia para una nueva flota de cómputo.

Las pruebas de laboratorio se vieron bien. La eficiencia en idle mejoró ligeramente. Compras adoró la reducción de coste. La flota se desplegó en producción, donde la carga era con picos:
análisis por lotes mezclado con tráfico API explosivo. Durante los picos, el comportamiento de boost de la CPU impulsó potencia sostenida más alta de lo que nadie esperaba.
Seguía “dentro de la especificación” para una sola PSU—hasta que una PSU falló.

En redundancia 1+1, una sola PSU ahora tenía que llevar la carga completa. En papel, podía. En la práctica, con temperaturas de entrada más altas y condiciones más polvorientas que el
laboratorio, la PSU restante trabajó al rojo vivo. El firmware de la plataforma respondió con throttling de rendimiento. El servicio no cayó, pero la latencia pasó de “bien” a “por qué se está derritiendo la cola”.
Los SRE lo vieron como una regresión de software porque nada colapsó. Simplemente se volvió lento e impredecible.

Lo que salió mal no fue la idea de redimensionar. Fue hacerlo basándose en pruebas de idle e ignorar el modo de fallo N+1 más el derating ambiental. La solución fue aumentar la PSU
un paso, aplicar límites de potencia en los nodos más propensos a picos y dejar de usar solo la eficiencia en idle como métrica de éxito. La eficiencia importa. La previsibilidad importa más.

Mini-historia 3: La práctica aburrida pero correcta que salvó el día

Un equipo con flota mixta (algunos equipos GPU, algunos nodos de almacenamiento, otros de cómputo) tenía una política simple: cada nuevo modelo de hardware debía pasar una lista de
verificación de “caracterización de potencia” antes de entrar en producción. Eso significaba medir idle, percentil 50 de carga, pico sostenido y la irrupción de arranque—usando el mismo
modelo de PDU que usaban en producción.

La lista también requería probar redundancia: quitar una PSU bajo carga y confirmar que el nodo se mantiene estable, registrando potencia y térmicas. No era opcional. No era “cuando tengamos tiempo”.
Era tan obligatorio como las pruebas de rebuild de RAID.

Un día, un proveedor entregó una “revisión menor” de un modelo de servidor. Misma familia SKU, misma hoja de marketing, diferente firmware y comportamiento de ventilador ligeramente distinto.
La caracterización detectó que la nueva revisión tenía una rampa de ventilador mucho más agresiva bajo ciertos umbrales de sensor, aumentando el pico de consumo lo suficiente para importar
cuando una PSU fallaba. El sistema se mantuvo en línea, pero el margen desapareció.

Como tenían datos de base, esto no se convirtió en incidente. Ajustaron la colocación en rack (menor densidad por circuito para esa revisión), afinó configuraciones de firmware donde fue posible
y actualizaron el presupuesto de potencia. Un mes después ocurrió una falla real de PSU en producción durante un trabajo pesado. El nodo se mantuvo en línea. Sin impacto al cliente. Sin heroísmos.
Simplemente la satisfacción silenciosa de la ingeniería aburrida funcionando como prometido.

Guía rápida de diagnóstico

Cuando algo huele a energía—reinicios aleatorios, fallas correlacionadas por rack, caídas de rendimiento tras la falla de una PSU—no divagues. Revisa en este orden.
El objetivo es encontrar el cuello de botella en minutos, no después de haber reescrito la mitad del scheduler.

Primero: confirma qué está fallando (nodo, rack, alimentación o sala)

  • ¿Las fallas se agrupan por rack/PDU o por modelo de hardware?
  • ¿Los eventos se correlacionan con tormentas de arranque, mantenimiento o picos de temperatura?
  • ¿Ves saltos de disyuntores o alarmas del UPS?

Segundo: confía en el PDU/UPS para la potencia de entrada y luego coteja con BMC

  • Revisa watts/amps por toma del PDU del rack y cualquier contador de picos.
  • Compáralo con los vatios reportados por el BMC; grandes discrepancias sugieren sensores malos o puntos de medición distintos.
  • Valida la tensión de entrada. Baja tensión significa más corriente para la misma carga y menos margen.

Tercero: prueba el comportamiento de redundancia bajo carga

  • En condiciones controladas, quita una PSU y observa: ¿salta la potencia? ¿suben los ventiladores? ¿se estrangula el host?
  • Confirma que cada PSU está en alimentaciones separadas y que las alimentaciones son verdaderamente independientes.
  • Si el rendimiento cambia materialmente, trátalo como un riesgo de producción, no como un “gusto por saber”.

Cuarto: aisla causas transitorias

  • Arranque e irrupción de discos: busca eventos de picos en disyuntores o PDU durante la restauración de energía.
  • Cambios de firmware/curvas de ventilador: correlaciona con actualizaciones recientes.
  • Picos de carga: correlaciona con telemetría de potencia CPU/GPU y la cronología de los incidentes.

Errores comunes (síntoma → causa raíz → solución)

1) Reinicios aleatorios bajo carga

Síntoma: Hosts se reinician cuando empiezan jobs por lotes o sube la utilización de GPU.
Causa raíz: Sobrecarga de PSU o problemas de respuesta transitoria; a veces una PSU individual está débil/envejecida y colapsa con cargas de paso.
Solución: Mide en el PDU durante la carga. Prueba con una PSU retirada. Reemplaza la PSU sospechosa. Si los picos son legítimos, aumenta la capacidad de PSU o limita la potencia.

2) Saltos de disyuntor tras mantenimiento o restauración de energía

Síntoma: Racks enteros quedan a oscuras, los disyuntores saltan justo cuando todo se enciende.
Causa raíz: Corriente de irrupción más arranque sincronizado; el giro de HDDs y la rampa de ventiladores lo amplifican, especialmente a 120V.
Solución: Escalonar arranques. Habilitar giro escalonado. Reducir densidad por circuito o moverse a alimentaciones de mayor tensión.

3) “Redundante” pero la falla de una PSU colapsa el rendimiento

Síntoma: Sin caída total, pero la latencia se dispara y el rendimiento cae cuando una PSU muere.
Causa raíz: El modo de una sola PSU activa limitación de potencia o estrés térmico; la PSU restante se calienta y el firmware estrangula CPU/GPU.
Solución: Dimensiona para que una sola PSU pueda manejar el pico sostenido con margen a la peor temperatura de entrada. Prueba y documenta el rendimiento en modo fallo.

4) PDU muestra watts altos, BMC muestra watts bajos (o viceversa)

Síntoma: Dos números “autoritativos” difieren entre 20–40%.
Causa raíz: Puntos de medición distintos (entrada vs calculado), deriva de calibración de sensores o bugs de firmware BMC.
Solución: Trata la entrada del PDU/UPS como la verdad para facturación y disyuntores. Usa BMC para tendencias relativas. Calibra una vez con un medidor conocido si hace falta.

5) Firmware nuevo causa sobrepaso del presupuesto de potencia

Síntoma: Tras una actualización de BIOS/BMC, la potencia del rack sube o la potencia de ventilador salta; aparecen alarmas de disyuntores o UPS.
Causa raíz: Curvas de ventilador actualizadas, límites de boost más altos o perfiles de potencia por defecto distintos.
Solución: Re-caracteriza la potencia tras cambios de firmware. Bloquea perfiles de potencia. Rueda actualizaciones en olas con monitorización de PDU.

6) “Dimensionamos por TDP” y ahora todo está justo

Síntoma: Las cuentas de placa dicen que estás seguro; las mediciones reales dicen que no.
Causa raíz: TDP no es un límite; los overhead de la plataforma, memoria, discos, NICs, ventiladores y comportamiento boost no estaban incluidos.
Solución: Construye un modelo de potencia medido por plataforma: idle, típico, pico sostenido, irrupción y modo N+1. Deja de usar sumas de TDP como respuesta final.

Listas de verificación / plan paso a paso

Paso a paso: cómo dimensionar una PSU para un modelo de servidor (sin adivinar)

  1. Establece la fuente de verdad de medición. Usa watts de entrada medidos en PDU/UPS para planificación de capacidad; usa BMC para tendencias y estado de redundancia.
  2. Registra condiciones de entrada. Anota tensión de entrada y temperatura aproximada de entrada durante las pruebas. Los datos de potencia sin condiciones son chismes.
  3. Mide cuatro puntos de potencia:
    • Idle (post-arranque, servicios estables)
    • Carga típica (mezcla representativa de producción)
    • Pico sostenido (stress test que coincida con cuellos reales)
    • Pico de arranque/irrupción (arranque en frío, no reinicio en caliente)
  4. Prueba comportamiento N+1. Bajo carga, quita una PSU y observa estabilidad, throttling y comportamiento de ventiladores. Registra potencia y térmicas.
  5. Aplica margen intencionalmente. Añade margen por error de sensor, deriva ambiental, envejecimiento y “firmware sorpresa.” Evita el reflejo de duplicar todo.
  6. Valida contra el circuito. Convierte vatios a amperios a tu tensión y asegúrate de no coquetear con los límites ramales bajo picos e irrupción.
  7. Decide tamaño de PSU y redundancia. Elige un modelo de PSU donde el modo de una sola PSU se mantenga estable al pico sostenido, con margen real.
  8. Documenta el perfil. Guarda valores medidos y condiciones de prueba en tu runbook de hardware para que la siguiente persona no haga arqueología.
  9. Operacionaliza la monitorización. Alerta por aumentos inusuales, pero también por pérdida de redundancia y cambios inesperados en reparto de carga.
  10. Re-testea después de cambios relevantes. BIOS/BMC, nuevas NICs/HBAs, cambios de modelo GPU o cambios de carga merecen una re-medición.

Lista de verificación: presupuesto de potencia por rack que puedas defender en una reunión

  • Por rack: típico medido y pico medido, no solo suma de placas de características.
  • Por circuito: amperaje a la tensión real, con suposición clara sobre utilización continua permitida.
  • Plan de irrupción: procedimiento de escalonado de arranque documentado y probado.
  • Plan de redundancia: PSUs en alimentaciones separadas; PDUs en upstreams separados cuando sea posible.
  • Pruebas de aceptación: cada nuevo modelo de hardware pasa una caracterización de potencia antes del despliegue.

Lista de verificación: edición “estamos a punto de añadir GPUs”

  • Mide límite de potencia por GPU y confirma el sobreenvolvente total de potencia de la plataforma.
  • Confirma límites de alimentación auxiliar PCIe y de risers; no asumas que el cableado del chasis coincide con el marketing de la GPU.
  • Prueba pico combinado CPU+GPU bajo cargas reales (no solo sintéticas).
  • Confirma comportamiento de redundancia cuando se retire una PSU durante carga GPU.
  • Valida circuito de rack y tipo de toma PDU (C13 vs C19) y límites por toma.

Preguntas frecuentes

1) ¿Puedo dimensionar una PSU sumando TDP de componentes?

Usa sumas de TDP solo como un límite inferior aproximado. Los sistemas reales lo superan por comportamiento de boost, potencia de ventiladores, carga de controladores y picos transitorios.
Mide en el PDU.

2) ¿Siempre debo comprar la opción de PSU de mayor potencia?

No. Sobredimensionar puede desperdiciar dinero y reducir la eficiencia a baja carga. Compra para el pico sostenido medido más margen, y asegúrate de que el modo de una sola PSU sea seguro si usas redundancia.

3) ¿Qué margen debería añadir?

No hay un número universal. Añade margen por error de medición, cambios ambientales, envejecimiento y futuras adiciones. El margen correcto es el que sobrevive al modo N+1 a la peor temperatura de entrada sin throttling ni inestabilidad.

4) ¿Qué es más confiable: vatios del BMC o vatios del PDU?

Para planificación de disyuntores y capacidad: vatios de entrada del PDU/UPS. Para tendencias por host y estado de redundancia: el BMC es útil. Si discrepan, investiga, pero presupuestea según el PDU.

5) ¿Por qué salta el consumo tras una actualización de BIOS/BMC?

El firmware puede cambiar límites de potencia de CPU, curvas de ventilador, comportamiento de entrenamiento de memoria y valores por defecto de gestión de periféricos. Trata las actualizaciones de firmware como un cambio de hardware: vuelve a medir la potencia.

6) ¿Cómo afectan las PSUs redundantes a la eficiencia?

Con reparto de carga, cada PSU funciona a un porcentaje menor, lo que puede sacarte del punto óptimo de eficiencia. Con activo/standby, una PSU puede estar cerca del punto óptimo mientras la otra consume energía en standby. Mide, no asumas.

7) ¿Qué pasa con VA vs W al dimensionar UPS y circuitos?

W es potencia real; VA es potencia aparente. Los UPS y PDUs pueden cotizar cualquiera. Si el factor de potencia no está cerca de 1.0, VA puede ser significativamente mayor que W, y eso puede ser el factor limitante para la capacidad del UPS incluso cuando los vatios parecen estar bien.

8) ¿Cómo prevengo saltos de disyuntores durante reinicios de flota?

Escalonar arranques, habilitar giro escalonado de discos cuando aplique y evitar comportamientos orquestados de “todos los nodos arriba ahora”. Confirma con logs de picos del PDU y haz una prueba controlada.

9) ¿Necesito preocuparme por los límites de rail de la PSU todavía?

Menos que en el viejo drama de múltiples rails de desktop, pero aún sí en ciertas plataformas. Las PSUs de servidor y los backplanes suelen abstraer esto, pero una alta densidad de GPU y la distribución de potencia en risers pueden exponer límites ocultos.
Si ves inestabilidad bajo carga GPU, verifica la distribución de potencia de la plataforma, no solo los vatios totales.

10) ¿Cuál es una forma práctica de limitar potencia en servidores para mantenerte dentro de los límites?

Usa herramientas del proveedor o perfiles de firmware cuando sea posible y valida con mediciones del PDU. Para CPUs, los límites basados en RAPL pueden ayudar, pero confirma el comportamiento con tu carga—algunas cargas intercambian latencia por vatios de forma desagradable.

Siguientes pasos que puedes hacer esta semana

  • Elige un modelo de servidor y crea un perfil de potencia: idle, típico, pico sostenido, arranque/irrupción y resultados de prueba N+1.
  • Haz del PDU tu fuente de verdad para potencia de entrada y picos; conecta sondeos SNMP a tu canal de métricas.
  • Realiza una prueba controlada de redundancia: bajo carga relevante, quita una PSU y observa throttling, subida de ventiladores y saltos de potencia.
  • Escribe un procedimiento de arranque escalonado y practícalo. Tras un corte no es momento de descubrir que tu herramienta no puede secuenciar.
  • Actualiza tu especificación de compra: exige PSUs/PDU medidos y sensores BMC cuando sea posible, y pide a los proveedores que declaren el comportamiento en modo una sola PSU.
  • Vuelve a comprobar tras actualizaciones de firmware. Trata a “revisión menor” de hardware como nuevo hasta que la hayas medido.

El objetivo no es convertirte en ingeniero de potencia. Es dejar de tratar a los vatios como folklore. Mide, presupuestea, prueba modos de fallo y avanza a los problemas que realmente son interesantes—como por qué tu ventana de rebuild de almacenamiento sigue siendo demasiado larga.

Audio con chasquidos en Windows 11: solucionar latencia sin comprar hardware nuevo

Das play y—crack, pop, chasquido. No es “calidez de vinilo”. Es tu equipo con Windows 11 perdiendo plazos como un sistema de producción con una NIC con aleteo.

La buena noticia: la mayoría de los chasquidos de audio en Windows no son “una tarjeta de sonido mala”. Es latencia: controladores que bloquean la CPU demasiado tiempo, gestión de energía que hace cosas “útiles”, o USB comportándose como si fuera alérgico al tráfico sostenido. Vamos a diagnosticarlo como un SRE: medir, aislar, cambiar una cosa, verificar y parar cuando deje de ser interesante.

Qué son realmente los chasquidos: plazos perdidos, no “mal audio”

El audio en Windows es una canalización casi en tiempo real que corre sobre un sistema operativo de propósito general. Solo funciona porque los buffers ocultan la variación temporal: la aplicación escribe muestras de audio, el motor de audio las mezcla y el controlador alimenta el dispositivo. Si algo bloquea la CPU lo suficiente como para que el siguiente buffer no pueda entregarse a tiempo, lo oirás como:

  • Chasquidos/pops: subejecuciones breves—muestras faltantes.
  • Entrecortado (stutter): subejecuciones repetidas, o bucles de resincro en Bluetooth.
  • Voz robótica/garble: deriva de reloj, remuestreo agresivo o pérdida de paquetes (común en Bluetooth).
  • Cortes (dropouts): reinicios de dispositivo, eventos de energía USB o reinicios de controladores.

El término de ingeniería que verás en las herramientas es latencia DPC/ISR:

  • ISR (Interrupt Service Routine): manejador rápido y de alta prioridad para una interrupción de hardware.
  • DPC (Deferred Procedure Call): trabajo programado por una ISR para ejecutarse poco después, aún en prioridad elevada.

Si un controlador acapara tiempo de DPC—red, GPU, almacenamiento, ACPI, USB—el audio no puede ejecutarse cuando lo necesita. El uso de CPU puede estar en 10% y aún así oirás chasquidos, porque esto no es “rendimiento”. Es “latencia bajo contención”.

Idea parafraseada de Werner Vogels (CTO de Amazon): Todo falla; la resiliencia proviene de diseñar y operar sistemas para tolerar y recuperarse de fallos.

La misma onda aquí. No buscamos perfección. Eliminamos los modos de fallo que convierten retrasos menores de planificación en artefactos audibles.

Guía rápida de diagnóstico (haz esto en orden)

Primero: clasifica el chasquido

  1. ¿Solo en Bluetooth? Ve a Audio Bluetooth entrecortado.
  2. ¿Solo en DAC/headset USB? Ve a USB y hubs.
  3. ¿Solo en una app (Teams/Discord/juego/DAW)? Ve a Buffers a nivel de app.
  4. ¿A nivel de sistema (YouTube + audio local + notificaciones)? Normalmente es DPC/controlador/energía.

Segundo: mide la latencia, no la intuyas

  1. Ejecuta una herramienta de DPC (LatencyMon es la común) y reproduce el chasquido.
  2. Si marca un controlador: no desinstales todo a ciegas. Confirma con alternancias dirigidas de dispositivos (ver tareas abajo).

Tercero: elimina los tres culpables principales en el orden más seguro

  1. Plan de energía: cambia a un plan estable, desactiva la suspensión selectiva de USB y prueba.
  2. Red: intenta desactivar Wi‑Fi temporalmente, luego desactiva offloads de NIC, después actualiza/retrocede el controlador.
  3. GPU/controladores de audio HDMI: desactiva endpoints “NVIDIA/AMD High Definition Audio” no usados, actualiza el controlador GPU con instalación limpia.

Cuarto: fija un formato de audio conocido y bueno

  1. Configura 48 kHz (o 44.1 kHz si tu flujo de trabajo es música) y 24 bits.
  2. Desactiva mejoras, desactiva espacial, prueba modo exclusivo activado/desactivado según tu caso de uso.

Quinto: si es USB, trátalo como un bus, no como un cable

  1. Mueve el DAC/headset a otro puerto (panel frontal vs trasero, controlador USB 2 vs USB 3).
  2. Quita hubs/docks. Prueba conexión directa.
  3. Desactiva la suspensión selectiva de USB y evita que Windows apague el dispositivo.

Para cuando el chasquido desaparezca: para. Más allá de ese punto está el tuning de culto: ediciones del registro y aplicaciones “optimizadoras de latencia” que a menudo empeoran las cosas.

Datos interesantes e historia breve (por qué sigue pasando)

  • Antes el audio de Windows se mezclaba en kernel en versiones antiguas; Windows moderno movió la mezcla a modo usuario (WASAPI) por estabilidad y seguridad, pero los controladores siguen importando.
  • Los picos de latencia DPC no son nuevos; han sido un dolor conocido desde al menos la era de Windows XP para usuarios de audio profesional.
  • 48 kHz se volvió “por defecto” mayormente por estándares de vídeo/TV; muchas canalizaciones de audio en PC asumen 48 kHz incluso cuando las fuentes musicales son 44.1 kHz.
  • ACPI y gestión de energía se volvieron más inteligentes (y más complejos) con los años, genial para baterías y ocasionalmente terrible para plazos de audio en tiempo real.
  • El audio USB es isócrono: reserva ancho de banda y espera entrega oportuna; si el controlador host se retrasa, lo oyes de inmediato.
  • Los controladores Wi‑Fi son ofensores frecuentes porque manejan ráfagas, transiciones de ahorro de energía y cargas de interrupciones intensas.
  • Los controladores GPU pueden bloquear el sistema de maneras que no aparecen como “CPU alta” en el Administrador de tareas, porque el tiempo se pasa a IRQL elevado en DPC/ISR.
  • El audio Bluetooth es con pérdida y con buffering; está diseñado para enmascarar caídas con búferes, pero Windows más interferencia de radio aún pueden causar artefactos audibles.
  • Las “mejoras” son plugins DSP (APOs) insertados en la canalización; algunos tienen errores, otros añaden latencia y otros simplemente entran en conflicto con cambios de frecuencia de muestreo.

Tareas prácticas: comandos, salidas y decisiones (12+)

Estas están diseñadas para ejecutarse en una máquina normal con Windows 11 usando herramientas integradas. Uso PowerShell y utilidades estándar. Cada tarea incluye: comando, salida de ejemplo, qué significa y la decisión que tomas.

Tarea 1: Identifica tus endpoints de audio y su estado

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class AudioEndpoint | Select-Object Status,FriendlyName,InstanceId | Format-Table -AutoSize"
Status FriendlyName                                   InstanceId
------ ------------                                   ----------
OK     Speakers (Realtek(R) Audio)                    SWD\MMDEVAPI\{0.0.0.00000000}.{...}
OK     Headphones (USB Audio DAC)                     SWD\MMDEVAPI\{0.0.0.00000000}.{...}
OK     NVIDIA High Definition Audio                   SWD\MMDEVAPI\{0.0.0.00000000}.{...}

Significado: Ves cada endpoint de reproducción que Windows expone, incluidos audio HDMI/DP de GPUs.

Decisión: Si nunca usas “NVIDIA High Definition Audio” (o el equivalente AMD), planea desactivar ese endpoint para reducir la superficie de controladores.

Tarea 2: Lista los dispositivos reales de audio (controladores) detrás de los endpoints

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Sound,VideoAndGameControllers | Select-Object Status,FriendlyName,InstanceId | Format-Table -AutoSize"
Status FriendlyName                 InstanceId
------ ------------                 ----------
OK     Realtek(R) Audio             HDAUDIO\FUNC_01&VEN_10EC&DEV_...
OK     USB Audio DAC                USB\VID_1234&PID_5678\...
OK     NVIDIA Virtual Audio Device  ROOT\...

Significado: Estos son los controladores en modo kernel que pueden contribuir al comportamiento DPC.

Decisión: Si tienes múltiples pilas de audio (Realtek + USB + dispositivos virtuales GPU), simplifica: desactiva lo que no uses durante el diagnóstico.

Tarea 3: Comprobación rápida del plan de energía de la CPU (causa común de chasquidos)

cr0x@server:~$ powercfg /getactivescheme
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (Balanced)

Significado: “Equilibrado” frecuentemente permite ahorro de energía agresivo (especialmente en portátiles).

Decisión: Para pruebas, cambia a “Alto rendimiento” o “Ultimate Performance” (si está disponible). Si el chasquido desaparece, la causa raíz es la gestión de energía, no el “hardware de audio”.

Tarea 4: Cambiar a Alto rendimiento (prueba, no lo conviertas en permanente)

cr0x@server:~$ powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

Significado: Indicas a Windows priorizar rendimiento y reducir estados de reposo.

Decisión: Vuelve a probar audio bajo tu carga peor (juego + Discord + navegador). Si es estable, luego afinaremos un plan personalizado en lugar de consumir batería para siempre.

Tarea 5: Comprueba la configuración de suspensión selectiva de USB

cr0x@server:~$ powercfg /qh SCHEME_CURRENT SUB_USB | findstr /i "Selective Suspend"
    USB selective suspend setting  (GUID: 2a737441-1930-4402-8d77-b2bebba308a3)
      Current AC Power Setting Index: 0x00000001
      Current DC Power Setting Index: 0x00000001

Significado: El índice 1 típicamente significa “Habilitado”.

Decisión: Si usas audio USB, desactiva la suspensión selectiva para el diagnóstico (especialmente en portátiles y docks).

Tarea 6: Desactivar suspensión selectiva de USB (AC + DC)

cr0x@server:~$ powercfg /setacvalueindex SCHEME_CURRENT SUB_USB 2a737441-1930-4402-8d77-b2bebba308a3 0
cr0x@server:~$ powercfg /setdcvalueindex SCHEME_CURRENT SUB_USB 2a737441-1930-4402-8d77-b2bebba308a3 0
cr0x@server:~$ powercfg /S SCHEME_CURRENT

Significado: Los puertos USB tienen menos probabilidad de ser gestionados para ahorro de energía en momentos inoportunos.

Decisión: Si esto arregla los chasquidos en un DAC/headset USB, mantenlo desactivado (o desactívalo solo en CA si te importa la batería).

Tarea 7: Encontrar riesgos de “apagar este dispositivo” en hubs/controladores USB

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class USB | Where-Object {$_.FriendlyName -match 'Hub|Controller'} | Select-Object Status,FriendlyName | Format-Table -AutoSize"
Status FriendlyName
------ ------------
OK     USB Root Hub (USB 3.0)
OK     Generic USB Hub
OK     USB xHCI Compliant Host Controller

Significado: Has listado la infraestructura de la que depende tu audio.

Decisión: Para hubs/controladores, revisa Administrador de dispositivos → pestaña Power Management y desmarca “Allow the computer to turn off this device to save power.” (No hay un interruptor CLI universal fiable para todos los controladores.)

Tarea 8: Identificar NICs (los controladores de red son villanos clásicos de DPC)

cr0x@server:~$ powershell -NoProfile -Command "Get-NetAdapter | Select-Object Name,Status,InterfaceDescription,LinkSpeed | Format-Table -AutoSize"
Name   Status InterfaceDescription                     LinkSpeed
----   ------ --------------------                     ---------
Wi-Fi  Up     Intel(R) Wi-Fi 6E AX211                 1.2 Gbps
Ethernet Up   Realtek PCIe GbE Family Controller      1 Gbps

Significado: Ahora sabes qué adaptadores puedes probar desactivando temporalmente.

Decisión: Si el chasquido se correlaciona con actividad de red (descargas, llamadas en Teams), prueba primero con Wi‑Fi desactivado.

Tarea 9: Desactivar temporalmente Wi‑Fi para aislar el impacto del controlador

cr0x@server:~$ powershell -NoProfile -Command "Disable-NetAdapter -Name 'Wi-Fi' -Confirm:\$false"

Significado: Has eliminado una fuente mayor de interrupciones del sistema.

Decisión: Si el audio mejora inmediatamente, no necesitas un nuevo DAC. Necesitas corregir el controlador/configuración Wi‑Fi (actualizar/retroceder controlador, desactivar ahorro de energía, afinar offloads).

Tarea 10: Revisar fechas de instalación de controladores (buscar actualizaciones “útiles” recientes)

cr0x@server:~$ powershell -NoProfile -Command "Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceClass -in 'MEDIA','NET'} | Select-Object DeviceName,DriverVersion,DriverDate | Sort-Object DriverDate -Descending | Select-Object -First 10 | Format-Table -AutoSize"
DeviceName                           DriverVersion  DriverDate
----------                           -------------  ----------
Intel(R) Wi-Fi 6E AX211              23.40.0.4      2025-01-15
Realtek(R) Audio                     6.0.9652.1     2024-12-02
NVIDIA High Definition Audio         1.4.0.1        2024-11-20

Significado: Puedes correlacionar el inicio de los chasquidos con cambios de controladores.

Decisión: Si los chasquidos empezaron “recientemente”, esta lista suele hacer menos misterioso el “cuándo”.

Tarea 11: Inspeccionar salud de servicios de audio de Windows (raro, pero rápido)

cr0x@server:~$ powershell -NoProfile -Command "Get-Service Audiosrv,AudioEndpointBuilder | Format-Table -AutoSize Name,Status,StartType"
Name                 Status StartType
----                 ------ ---------
Audiosrv             Running Automatic
AudioEndpointBuilder Running Automatic

Significado: Si estos están detenidos o inestables, tienes un problema distinto a la latencia DPC.

Decisión: Si no están en Running, arregla el estado del servicio primero (y revisa el Visor de eventos para saber por qué se detuvo).

Tarea 12: Extraer logs de eventos del sistema relevantes para resets de audio/controladores

cr0x@server:~$ powershell -NoProfile -Command "wevtutil qe System /q:\"*[System[(Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 86400000]]]\" /f:text /c:40"
Event[0]:
  Log Name: System
  Source:   Kernel-PnP
  Level:    Error
  ...
  Message:  The device USB\VID_1234&PID_5678... was not migrated due to partial or ambiguous match.

Significado: Kernel-PnP, USB y errores de controladores en las últimas 24 horas suelen ser pistas clave para dropouts.

Decisión: Si ves desconexiones/reconexiones USB repetidas o errores de migración, céntrate en energía USB y puertos, no en ajustes de frecuencia de muestreo.

Tarea 13: Comprobar qué proceso está saturando la CPU en el momento del chasquido (chequeo de cordura)

cr0x@server:~$ powershell -NoProfile -Command "Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 Name,Id,CPU,WorkingSet | Format-Table -AutoSize"
Name            Id    CPU WorkingSet
----            --    --- ----------
chrome        1040  812.4  950000000
dwm           1880  210.1  240000000
audiodg       1324   45.7   65000000

Significado: Esto no mide DPC, pero detecta escenarios obvios de “CPU realmente saturada” (una pestaña del navegador fuera de control).

Decisión: Si algo realmente está saturando CPU, arréglalo primero. Si la CPU parece bien, vuelve a cazar controladores por latencia.

Tarea 14: Confirmar que la presión de memoria no fuerza paging durante el audio

cr0x@server:~$ powershell -NoProfile -Command "Get-Counter '\Memory\Available MBytes','\Memory\Pages/sec' -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Select-Object Path,CookedValue | Format-Table -AutoSize"
Path                       CookedValue
----                       -----------
\Memory\Available MBytes        5120
\Memory\Pages/sec                 3

Significado: Memoria disponible muy baja más Pages/sec altos puede hacer que el sistema se detenga de forma impredecible.

Decisión: Si Available MB es mínimo y Pages/sec se mantiene alto durante el chasquido, cierra apps o arregla una fuga de memoria. (No es glamoroso. Funciona.)

Tarea 15: Capturar una traza corta de rendimiento para evidencia DPC/ISR (integrado)

cr0x@server:~$ wpr -start generalprofile
cr0x@server:~$ powershell -NoProfile -Command "Start-Sleep -Seconds 20"
cr0x@server:~$ wpr -stop C:\Temp\audio-latency.etl
WPR: Tracing session stopped.
WPR: Trace file saved to C:\Temp\audio-latency.etl

Significado: Has creado una traza ETL que puedes abrir en Windows Performance Analyzer para ver uso de CPU por DPC/ISR y qué controladores son responsables.

Decisión: Si LatencyMon no es concluyente (o quieres pruebas), esta traza es cómo dejar de discutir por sensaciones y empezar a señalar controladores específicos.

Triage de controladores: los sospechosos habituales y cómo probarlo

La mayoría de los incidentes de “chasquidos en Windows 11” no son el propio controlador de audio. El controlador de audio es el primero al que se culpa porque es el que puedes oír. Los ofensores habituales son:

  • Controladores Wi‑Fi (tormentas de interrupciones, transiciones de ahorro de energía).
  • Controladores GPU (picos DPC, endpoints de audio HDMI no usados).
  • Controladores de almacenamiento (menos común ahora, pero ocurre con drivers RAID/filtrado extraños).
  • ACPI / chipset (gestión de energía de plataforma, comportamiento del temporizador).
  • Controladores de controladora USB (problemas del host controller, suspensión selectiva).
  • APOs de “mejoras” de audio (plugins DSP de suites OEM).

Qué significa realmente “arreglar controladores”

“Actualizar el controlador” a veces es correcto y a veces es como crear un nuevo problema. En términos de producción: los controladores son módulos kernel; trátalos como despliegues riesgosos.

  • Si los chasquidos empezaron después de una actualización de Windows u OEM: retroceder es una mitigación válida.
  • Si usas un controlador muy antiguo: actualizar puede corregir bugs DPC conocidos.
  • Si usas pilas de audio personalizadas de OEM en portátiles: el “controlador genérico más reciente” puede quitar ajustes OEM y romper detección de jack o arrays de micrófonos.

Desactiva lo que no usas (reduce el radio de impacto)

Los endpoints de audio no usados siguen cargando componentes y pueden ser sondeados. Desactivar endpoints HDMI de NVIDIA/AMD no usados es uno de los movimientos más seguros de “menos cosas en ejecución”.

La misma lógica aplica a “efectos” de audio OEM. Si no los necesitas explícitamente, desactiva las mejoras (lo haremos más adelante). Tus oídos quieren estabilidad, no una sala de conciertos virtual.

Broma #1: El chasquido de audio en Windows es solo tu PC intentando añadir percusión a tu lista de reproducción. No fue contratado, así que despídelo.

Gestión de energía: el generador silencioso de chasquidos

Ahorrar energía funciona dejando hardware dormir, aparcando núcleos de CPU y dejando que los relojes escalen hacia abajo. Cada transición tiene latencia. El audio odia picos de latencia más que un CPU un poco más lento.

Los ajustes que más importan

  • Estado mínimo del procesador: demasiado bajo puede causar cambios de frecuencia rápidos y retrasos de activación.
  • PCI Express Link State Power Management: puede introducir latencia de activación para dispositivos detrás de PCIe (incluyendo algunas rutas de audio).
  • Suspensión selectiva de USB: puede poner tu dispositivo de audio o hub a dormir en el peor momento.
  • Ahorro de energía del adaptador inalámbrico: intercambia batería por picos de latencia.

Mi regla con opinión

Si te importa el audio en tiempo real en un portátil Windows, crea un plan de energía dedicado “Audio”. Balanced es para hojas de cálculo. Alto rendimiento es para pruebas. Un plan personalizado es para vivir con él.

En entornos corporativos, “no podemos cambiar políticas de energía” es común. A menudo puedes: los ajustes de plan de energía por usuario suelen permitirse incluso cuando no puedes cambiar BIOS.

USB y hubs: donde “funciona bien” va a morir

El audio USB suele ser estable—hasta que no lo es. El problema principal: el audio es sensible al tiempo y las topologías USB son desordenadas. Tu “un cable” podría ser:

  • un headset pasando por un hub del monitor,
  • luego por un dock,
  • luego a una controladora USB compartida con una webcam,
  • mientras la suspensión selectiva intenta ahorrar 0.3 vatios,
  • y un controlador está generando picos DPC.

Estrategia práctica de aislamiento USB

  1. Conecta directamente al PC. Quita hubs/docks.
  2. Prueba otro controlador. Los puertos traseros suelen diferir de los frontales; los puertos USB-C pueden estar en una controladora distinta.
  3. Prefiere puertos USB 2 para algunos DACs si el fabricante lo recomienda. No es “más lento”; a veces es menos complejo.
  4. Apaga la suspensión selectiva (Tarea 6).
  5. Desactiva “Permitir que el equipo apague este dispositivo” para hubs/controladoras en el Administrador de dispositivos.

Qué no hacer

  • No “arregles” los chasquidos comprando un hub alimentado al azar. Es una moneda al aire con cables extra.
  • No asumas que un DAC USB es inmune a la latencia del sistema. El bus aún necesita servicio puntual.

Audio Bluetooth entrecortado: latencia con pasos extra

Bluetooth añade interferencia radio, negociación de códecs y buffering. Puede chasquear incluso cuando el audio por cable está bien. Diagnostica Bluetooth por separado; si no, perderás tiempo afinando el subsistema equivocado.

Modos de fallo comunes en Bluetooth

  • Congestión en 2.4 GHz: Wi‑Fi, microondas, ruido USB 3 y dongles baratos luchan aquí.
  • Toma del perfil manos libres (HFP/HSP): el headset cambia a modo HFP/HSP para usar el micrófono y la calidad baja, a veces con artefactos.
  • Ahorro de energía: la radio duerme en momentos inoportunos.
  • Pila de controladores: las pilas Bluetooth OEM varían mucho.

Qué ayuda realmente

  • Usa Wi‑Fi en 5 GHz (o Ethernet) para reducir la contención en 2.4 GHz.
  • Mueve la antena/dongle Bluetooth lejos de puertos/cables USB 3 (USB 3 puede generar ruido RF en la banda 2.4 GHz).
  • En apps de comunicaciones, escoge el dispositivo correcto: los endpoints “Headset” vs “Headphones” importan.
  • Actualiza controladores Bluetooth desde el OEM/proveedor del portátil si el sistema usa un combo Wi‑Fi/Bluetooth.

Broma #2: El audio Bluetooth es como una reunión improvisada sobre Wi‑Fi de hotel: funciona hasta que importa, y entonces inventa nuevas sílabas.

Ajustes de sonido de Windows que realmente importan

Los ajustes de sonido son donde la gente hace clic al azar hasta que el chasquido cambia. Hagamos menos clics, pero con intención.

Fija un formato predeterminado sensato

Elige una frecuencia de muestreo y mantenla consistente. Cambiar de formato frecuentemente puede provocar fallos en algunos controladores.

  • Para Windows general + vídeo: 48 kHz, 24 bits.
  • Para producción musical centrada en 44.1 kHz: 44.1 kHz, 24 bits, y mantén tu DAW alineado.

Desactiva mejoras y audio espacial (para diagnóstico)

Las mejoras son Audio Processing Objects (APOs). Pueden funcionar. También pueden ser todo el problema.

Para diagnosticar: desactiva mejoras y audio espacial. Si el chasquido para, vuelve a activar una característica a la vez—como un despliegue controlado, no un festival.

Modo exclusivo: entiende qué hace

El modo exclusivo permite a una app hablar directamente con el dispositivo, evitando el mezclador compartido. Eso puede reducir latencia y re-muestreo, pero también puede:

  • provocar conflictos cuando varias apps quieren audio,
  • exponer rutas de controlador con errores,
  • hacer que los sonidos del sistema desaparezcan en momentos inoportunos.

Si estás solucionando chasquidos a nivel de sistema, prueba ambos: exclusivo activado y desactivado. Si eres usuario de DAW, exclusivo (o ASIO) suele ser correcto; para un “portátil de trabajo con Teams”, gana la estabilidad en modo compartido.

Buffering a nivel de app y DAW

Si el chasquido ocurre solo en una app, no culpes inmediatamente a Windows. Las apps eligen tamaños de buffer, frecuencias y a veces usan modo exclusivo sin pedir permiso.

Navegadores y apps de conferencia

  • Teams/Zoom/Discord: pueden cambiar dispositivos, tomar rutas exclusivas y provocar cambios de perfil Bluetooth cuando se activa el micrófono.
  • Navegadores: las opciones de aceleración por hardware pueden cambiar el comportamiento del controlador GPU e influir indirectamente en picos de latencia.

DAWs y audio profesional

Si usas un DAW:

  • Empieza con un tamaño de buffer que priorice estabilidad (256–512 muestras) y reduce solo si grabas con monitorización en directo.
  • Usa el controlador ASIO del fabricante cuando esté disponible; WASAPI en modo compartido no es la mejor herramienta para producción de baja latencia.
  • Alinea la frecuencia de proyecto con la del dispositivo para evitar re-muestreo constante.

El audio profesional en Windows puede ser muy sólido. Solo exige que trates los cambios de controlador y energía como cambios de producción: de uno en uno, con un plan de reversión.

Tres mini-historias corporativas desde las trincheras de latencia

Incidente #1: la suposición equivocada (y una reunión cara)

Una empresa mediana desplegó portátiles con Windows 11 a un equipo de ventas. En una semana, llegaron quejas de liderazgo: “el audio chasquido en demos a clientes”. La suposición interna fue clásica: los altavoces integrados eran baratos, así que compren headsets. Compraron rápido. Llegaron las cajas. Los chasquidos persistieron.

TI montó una “sala de guerra” pequeña. El equipo reprodujo el problema de forma fiable: comparte pantalla, inicia una llamada y luego abre una descarga grande en segundo plano. El chasquido aparecía con puntualidad. El uso de CPU se mantenía bajo. Ese detalle importó; descartó “no hay suficiente potencia”.

Finalmente ejecutaron herramientas de latencia y vieron picos DPC vinculados al controlador Wi‑Fi. El detalle crítico: los portátiles estaban configurados con ahorro de energía inalámbrico agresivo para maximizar batería durante viajes. Buena intención, ambiente equivocado. Las demos no son un estudio de sueño.

La solución no fue un headset. Fue un cambio de política: desactivar el ahorro inalámbrico más agresivo en AC, actualizar el controlador Wi‑Fi a una versión estable y evitar que el SO apagara el adaptador durante la llamada. Los chasquidos desaparecieron. Los headsets pasaron a ser “opcionales” y la compra masiva se canceló discretamente.

La lección: el dispositivo de audio era inocente. El scheduler no fallaba. El comportamiento de interrupciones de un solo controlador bajo una carga específica era el dominio de fallo real.

Incidente #2: una optimización que salió mal (la batería gana, el audio pierde)

Otra organización—con muchos ingenieros y reuniones de vídeo—decidió estandarizar en ahorro energético. Empujaron ajustes para reducir consumo en background: estado mínimo de procesador más bajo, suspensión selectiva USB más agresiva y gestión de enlace PCIe. La vida de batería mejoró en los informes, lo que alegró a alguien del dashboard.

Luego la cola de helpdesk se llenó de artefactos de audio: pops, stutters, “voz de robot”, especialmente en quienes usaban altavoces USB y docks. El patrón era sutil: empeoraba tras haber estado inactivo un tiempo. ¿Primera llamada del día? Bien. ¿Segunda llamada después de comer? Caos.

El equipo asumió que los docks eran malos. Reemplazaron algunos. Seguía mal. Pensaron que los altavoces USB eran defectuosos. Reemplazaron algunos. Seguía mal. Aquí la “optimización” se vuelve “superstición cara”.

Eventualmente alguien correlacionó logs de eventos con los chasquidos: transiciones de energía de hubs USB y reinicios de dispositivo coincidían con el inicio de llamadas. La suspensión selectiva hacía su trabajo: dormir partes de la cadena USB. Pero cuando el tráfico de audio volvía, la latencia de activación y la reenumeración ocasional creaban dropouts.

La solución fue poco glamorosa: desactivar la suspensión selectiva para usuarios con audio USB en docks y afinar la energía diferente en AC vs batería. La vida de batería cayó un poco. El audio dejó de avergonzar a la gente. Los dashboards se volvieron menos verdes. Las transcripciones de reuniones fueron más precisas.

Incidente #3: la práctica aburrida que salvó el día (control de cambios para controladores)

Un pequeño grupo de TI con espíritu SRE soportaba un piso de trading donde el audio importaba para llamadas grabadas y cumplimiento. Tenían una regla: no actualizar controladores en el piso sin un anillo de staging. Sonaba burocrático hasta el día que dejó de serlo.

Windows Update ofreció un nuevo paquete de controladores GPU. En una flota normal encoges de hombros. En este piso, los controladores GPU estaban ligados a múltiples monitores, decodificación de vídeo y—sorpresa—endpoints de audio HDMI. Una máquina del anillo piloto tomó la actualización. En horas, el usuario piloto reportó pops intermitentes al mover ventanas entre monitores durante una llamada.

El equipo capturó una traza (WPR) y vio picos DPC vinculados al controlador GPU durante eventos de reconfiguración de pantalla. Revirtieron el controlador en la máquina piloto, validaron la estabilidad y bloquearon la actualización para el resto del anillo mientras probaban otra versión.

Sin heroísmos. Sin madrugadas. Solo un despliegue por etapas y una reversión. La práctica era aburrida, y por eso funcionó. El audio de producción se mantuvo limpio. Cumplimiento no llamó a nadie. El usuario piloto recibió un café y un poco de aprecio, que es lo más emocional que ese entorno permite.

Errores comunes: síntoma → causa raíz → solución

Chasquidos solo al descargar o en llamadas

  • Síntoma: Pops de audio durante actividad de red; por lo demás bien.
  • Causa raíz: Picos DPC del controlador NIC/Wi‑Fi, offloads, transiciones de ahorro de energía.
  • Solución: Actualizar/retroceder controlador NIC, desactivar ahorro inalámbrico agresivo, probar con Wi‑Fi desactivado (Tarea 9), preferir Ethernet para llamadas.

Headset USB chasquea tras inactividad o al acoplar

  • Síntoma: Primer audio tras inactividad chasquea; acoplar/desacoplar provoca dropouts.
  • Causa raíz: Suspensión selectiva USB, gestión de energía de hubs, topologías de dock.
  • Solución: Desactivar suspensión selectiva USB (Tareas 5–6), desactivar apagado en hubs, conectar el dispositivo directamente o a otro controlador/puerto.

Chasquidos tras actualizar el controlador GPU

  • Síntoma: Pops al jugar, mover ventanas o cambiar monitores.
  • Causa raíz: Picos DPC del controlador GPU; endpoints HDMI de audio no usados; overlays.
  • Solución: Instalación limpia de un controlador GPU estable, desactivar endpoints de audio GPU no usados, reducir overlays, volver a probar con toggles de aceleración por hardware en la app.

Solo Bluetooth entrecorta; el cableado está bien

  • Síntoma: Audio Bluetooth se corta; USB/3.5 mm limpio.
  • Causa raíz: Interferencia en 2.4 GHz, cambio de perfil, ahorro de energía/driver Bluetooth.
  • Solución: Usar Wi‑Fi 5 GHz, mover el dongle lejos del ruido USB 3, asegurar selección correcta de endpoint, actualizar controladores Bluetooth.

Chasquidos en una app específica

  • Síntoma: DAW chasquea con buffer bajo; otras apps bien.
  • Causa raíz: Buffer demasiado bajo, desajuste de frecuencia, conflicto de modo exclusivo.
  • Solución: Aumentar buffer, alinear la frecuencia, usar ASIO, desactivar otras apps de audio, probar modo exclusivo.

Chasquidos con “mejoras” activadas

  • Síntoma: Activar espacial/mejoras empeora los pops.
  • Causa raíz: APO/DSP defectuoso, latencia de procesamiento adicional.
  • Solución: Desactivar mejoras/espacial; si las necesitas, actualiza el software OEM y reactiva un efecto a la vez.

Chasquidos a pesar de CPU baja y “todo actualizado”

  • Síntoma: El Administrador de tareas parece tranquilo; el audio sigue con pops.
  • Causa raíz: Alto tiempo DPC/ISR (prioridad kernel), no visible como CPU de usuario.
  • Solución: Mide con herramientas de latencia; aísla desactivando dispositivos temporalmente; usa una traza WPR (Tarea 15) para identificar el controlador.

Listas de verificación / plan paso a paso

Lista A: plan de 20 minutos “haz que pare”

  1. Reproduce el chasquido a demanda (misma canción/vídeo, mismo volumen, misma carga).
  2. Cambia al plan Alto rendimiento (Tarea 4). Vuelve a probar.
  3. Desactiva suspensión selectiva USB (Tarea 6). Vuelve a probar (especialmente para audio USB).
  4. Desactiva Wi‑Fi temporalmente (Tarea 9). Vuelve a probar con audio local.
  5. Desactiva endpoints de audio no usados (audio HDMI GPU, dispositivos virtuales) en Administrador de dispositivos. Vuelve a probar.
  6. Desactiva mejoras/espacial para el dispositivo de reproducción activo. Vuelve a probar.
  7. Configura formato por defecto a 48 kHz 24-bit (o alinea con tu flujo). Vuelve a probar.
  8. Si es Bluetooth: cambia a cableado para una prueba y confirma que es asunto de radio.

Lista B: estabilizar sin vivir en Alto rendimiento

  1. Clona tu plan actual en un plan personalizado “Audio”.
  2. En corriente alterna: sube el estado mínimo del procesador, desactiva suspensión selectiva USB, reduce el ahorro de enlace PCIe.
  3. En batería: mantén valores sensatos, pero evita el ahorro inalámbrico más agresivo si atiendes llamadas con batería.
  4. Documenta versiones de controladores estables (Wi‑Fi, GPU, audio, chipset).
  5. Tras cada ciclo de Windows Update: valida de nuevo con una prueba de estrés de audio de 5 minutos.

Lista C: cuando necesitas pruebas (para TI, proveedores o tu yo futuro)

  1. Captura una traza WPR durante el chasquido (Tarea 15).
  2. Exporta logs de eventos del Sistema relevantes alrededor de las marcas de tiempo (Tarea 12).
  3. Registra: dispositivo usado (USB/Bluetooth/interno), estado de energía (AC/DC) y red activa (Wi‑Fi/Ethernet).
  4. Haz un cambio. Vuelve a probar. Lleva notas.

Preguntas frecuentes

1) ¿Por qué el audio chasquea cuando el uso de CPU es bajo?

Porque el problema suele ser latencia DPC/ISR, no carga media de CPU. Un controlador puede bloquear la planificación en tiempo real brevemente y causar subejecuciones de buffers.

2) ¿Es LatencyMon obligatorio?

No, pero es cómodo. También puedes usar trazas integradas WPR/WPA (Tarea 15) para ver comportamiento DPC/ISR e identificar controladores problemáticos.

3) ¿Debo desactivar “mejoras de audio”?

Para diagnóstico, sí. Las mejoras son componentes DSP que pueden añadir latencia o tener errores. Si desactivarlas arregla el problema, reactiva solo lo que realmente quieras.

4) ¿Qué frecuencia de muestreo debería usar: 44.1 kHz o 48 kHz?

Para Windows general y vídeo, 48 kHz suele ser lo menos sorprendente. Para producción musical centrada en 44.1 kHz, ajusta el dispositivo y el proyecto a 44.1 kHz para reducir re-muestreos.

5) ¿Comprar un DAC USB externo arregla siempre los chasquidos?

No. Puede mejorar ruido analógico y evitar un códec integrado malo, pero no arregla mágicamente la latencia DPC o problemas de gestión de energía USB.

6) ¿Por qué Bluetooth es peor que por cable?

Bluetooth añade interferencia radio, buffering de códecs y cambios de perfil (especialmente cuando el micrófono está activo). Las rutas por cable eliminan una clase entera de modos de fallo.

7) ¿Debería usar “Ultimate Performance”?

Úsalo como prueba. Si arregla los chasquidos, crea un plan personalizado que mantenga los ajustes específicos necesarios sin arruinar la batería permanentemente.

8) ¿Cuál es la forma más rápida de aislar el controlador culpable?

Desactiva dispositivos uno a la vez: Wi‑Fi, Bluetooth, endpoints de audio GPU no usados, docks/hubs. Si necesitas evidencia sólida, captura una traza WPR e inspecciona DPC/ISR por controlador.

9) Solo oigo chasquidos en juegos—¿qué pruebo primero?

Prueba estabilidad del controlador GPU (instalación limpia), desactiva overlays y confirma que el juego no fuerza un formato de audio raro. También revisa ajustes de energía—los portátiles para juegos adoran las transiciones de energía agresivas.

10) ¿El almacenamiento puede causar chasquidos de audio?

Menos común en sistemas modernos, pero sí: controladores filtro, drivers de cifrado o controladoras de almacenamiento defectuosas pueden crear picos de latencia. Si los logs de eventos muestran reinicios de almacenamiento, no los ignores.

Siguientes pasos (el estado estable y aburrido)

Si quieres audio sin chasquidos en Windows 11 sin comprar hardware, la jugada ganadora no es un ajuste mágico. Es un bucle disciplinado:

  1. Reproduce el problema de forma fiable. Si no puedes reproducirlo, no lo puedes arreglar—solo lo reordenas.
  2. Mide la latencia, no adivines. Usa herramientas de latencia o una traza WPR cuando haga falta.
  3. Estabiliza la energía. Un plan personalizado “Audio” vence a “Alto rendimiento” permanente.
  4. Simplifica controladores. Desactiva lo que no uses; actualiza o revierte al culpable.
  5. Mantén USB simple. Puertos directos, sin ruleta de hubs, sin suspensión selectiva para audio USB.
  6. Cambia una cosa a la vez. Estás depurando, no realizando un ritual.

Haz eso y los chasquidos desaparecen. Tu sistema se vuelve aburrido. Que, en operaciones, es el mayor cumplido.

WSL2 + Kubernetes: la configuración que no derrite tu portátil

Instalaste Kubernetes localmente porque querías velocidad: iterar rápido, probar charts, depurar controladores, quizá ejecutar una pequeña pila de plataforma.
Entonces los ventiladores despegan, el SSD empieza a hacer flexiones y tu «clúster de desarrollo rápido» se convierte en la razón por la que Slack pregunta si estás en línea.

WSL2 puede ser un excelente sitio para ejecutar Kubernetes—si lo tratas como una VM real con límites de almacenamiento y memoria, no como una carpeta mágica de Linux.
Esta es la configuración práctica que evita los modos de fallo clásicos: RAM descontrolada, I/O lenta, rarezas de DNS y «¿por qué se queda colgado kubectl?».

Qué estás construyendo realmente (y por qué derrite portátiles)

En Windows con WSL2, «ejecutar Kubernetes» rara vez es solo «ejecutar Kubernetes».
Es una pila de abstracciones anidadas que cada una tiene opiniones sobre programación de CPU, recuperación de memoria, semántica del sistema de archivos y redes.
Cuando cualquiera de las capas adivina mal, tu portátil paga el precio.

La configuración típica de Kubernetes en WSL2 se ve así:

  • Sistema operativo host Windows
  • VM WSL2 (una VM ligera de Hyper-V con un disco virtual)
  • Distribución Linux userland (Ubuntu, Debian, etc.)
  • Runtime de contenedores (Docker Engine, containerd o pila nerdctl)
  • Distribución de Kubernetes (kind, k3d, minikube, microk8s o el clúster integrado de Docker Desktop)
  • Tus cargas: bases de datos, operadores, pipelines de build, controladores de ingress, mallas de servicio—aka «producción pequeña»

El derrame suele venir de uno de tres lugares:

  1. Memoria: WSL2 cachea el page cache y no siempre lo devuelve con rapidez. Kubernetes programa pods hasta que el nodo está «bien» justo hasta que deja de estarlo.
  2. Almacenamiento: cruzar la frontera Windows/Linux puede convertir un I/O normal en un incidente a cámara lenta. Las bases de datos amplifican esto con fsync y escrituras aleatorias pequeñas.
  3. Red/DNS: kube-dns, DNS de Windows, NICs virtuales de WSL2 y clientes VPN forman un triángulo de tristeza.

El objetivo no es «hacerlo rápido en benchmarks». El objetivo es «hacerlo predeciblemente lo suficientemente rápido»,
y más importante, hacer obvios los modos de fallo.
La fiabilidad en desarrollo importa porque en dev decides qué lamentarás en producción.

Algunos hechos y contexto histórico (para que las partes raras tengan sentido)

Son cortos a propósito. Son las actualizaciones del modelo mental que evitan horas de caza de fantasmas.

  1. WSL1 era traducción de syscalls; WSL2 es un kernel Linux real en una VM. Por eso WSL2 puede ejecutar Kubernetes correctamente, pero también por eso se comporta como una VM con su propio disco y políticas de memoria.
  2. WSL2 guarda archivos Linux en un disco virtual (VHDX) por defecto. Ese disco puede crecer rápido y no siempre se encoge a menos que lo compactes explícitamente.
  3. Acceder a archivos Linux desde Windows no es lo mismo que acceder a archivos Windows desde Linux. Las características de rendimiento difieren mucho, y la vía lenta dañará bases de datos y builds de imágenes.
  4. Kubernetes no fue diseñado para portátiles. Fue diseñado para clusters donde «un nodo es una VM de ganado» y puedes gastar CPU en bucles de reconciliación sin escuchar ventiladores.
  5. kind ejecuta Kubernetes en contenedores Docker. Eso es excelente para reproducibilidad, pero añade otra capa donde almacenamiento y red pueden volverse «creativos».
  6. k3s (y por extensión k3d) fue construido para ser ligero. Usa SQLite por defecto, lo cual está bien localmente, pero aún presiona el almacenamiento si lo combinas con muchos controladores.
  7. cgroups v2 cambió cómo se comporta el aislamiento de recursos. Muchas conversaciones de «por qué se ignora mi límite de memoria» son en realidad conversaciones de «¿en qué modo de cgroup estoy?».
  8. DNS es un modo de fallo de primer nivel en clusters locales. No porque DNS sea difícil, sino porque las VPN corporativas y el DNS de horizonte dividido pueden anular todo silenciosamente.
  9. Las construcciones de imágenes castigan los metadatos del sistema de archivos. La diferencia entre un sistema de archivos rápido y uno enlazado se hace obvia cuando ejecutas builds multi-stage con miles de archivos pequeños.

Elige tu Kubernetes local: kind vs k3d vs minikube (y qué recomiendo)

Mi recomendación por defecto: kind dentro de WSL2, con límites

Para la mayoría de desarrolladores y SREs que trabajan en plataforma, kind te da repetibilidad, velocidad y teardown limpio.
El clúster es «solo contenedores», y puedes fijar versiones de Kubernetes fácilmente.
La clave es restringir recursos de WSL2 y mantener tus cargas en el sistema de archivos Linux.

Cuándo preferir k3d (k3s en Docker)

Si tu objetivo es «ejecutar una pila de plataforma práctica con sobrecarga mínima», k3d es excelente.
k3s recorta lo innecesario: menos componentes, menos memoria. Es indulgente en portátiles más modestos.
Además está más cerca de lo que muchos entornos edge ejecutan, útil si despliegas a entornos con restricciones.

Cuándo usar minikube

minikube está bien cuando quieres «una herramienta que haga muchos drivers».
Pero en WSL2, minikube puede dejarte en una matriz de drivers confusa: driver Docker, KVM (generalmente no), Hyper-V (lado Windows),
y entonces empiezas a depurar el driver más que el clúster.
Si ya estás cómodo con Docker dentro de WSL2, el driver Docker de minikube funciona.

Qué evitar (a menos que tengas una razón)

  • Ejecutar cargas con estado pesadas en /mnt/c y luego culpar a Kubernetes por la lentitud. Eso no es Kubernetes; es la frontera del sistema de archivos pidiéndote que pares.
  • Sobreasignar CPUs y RAM «porque es local». WSL2 lo tomará, Windows contraatacará y tu navegador quedará sin recursos.
  • Hacer «como en prod» con todo activado. Malla de servicio + tracing distribuido + tres operadores + una base de datos + un sistema CI no es un clúster de dev; es un centro de datos hobby.

Un chiste corto, como prometí: Kubernetes es como una cocina con 30 chefs—nadie cocina más rápido, pero todos presentan un informe de estado.

Línea base de WSL2: límites, kernel y las cosas que Windows no te dirá

Establece límites de recursos de WSL2 o acepta el caos

Por defecto, WSL2 escalará el uso de memoria hasta una gran fracción de la RAM del sistema.
No es malicioso. Es Linux haciendo cosas de Linux—usando memoria para cache.
El problema es que Windows no siempre la recupera de una manera que parezca educada.

Pon un archivo .wslconfig en tu directorio de perfil de usuario de Windows (lado Windows).
Quieres un techo para memoria y CPU, y quieres swap pero no que se convierta en sustituto de la RAM.

cr0x@server:~$ cat /mnt/c/Users/$WINUSER/.wslconfig
[wsl2]
memory=8GB
processors=4
swap=4GB
localhostForwarding=true

Decisión: Si tienes 16GB de RAM total, 8GB para WSL2 suele ser sensato.
Si tienes 32GB, puedes usar 12–16GB. Más que eso tiende a ocultar fugas y límites malos de pods.

Comportamiento de reclamación de WSL2: usa las herramientas que tienes

La reclamación de memoria de WSL2 ha mejorado, pero aún puede sentirse pegajosa después de builds pesados o churn del clúster.
Si necesitas recuperar memoria rápido, apagar WSL es la herramienta contundente que funciona.

cr0x@server:~$ wsl.exe --shutdown
...output...

Significado de la salida: No mostrar nada es normal. Detiene todas las distros WSL y la VM WSL2.
Decisión: Úsalo cuando Windows esté sin memoria y necesites RAM ahora, no cuando estés depurando un problema dentro del clúster.

Usa systemd en WSL2 (si está disponible) y sé explícito

WSL moderno soporta systemd. Eso hace que ejecutar Docker/containerd y las herramientas de Kubernetes sea menos incómodo.
Comprueba si systemd está habilitado.

cr0x@server:~$ ps -p 1 -o comm=
systemd

Significado de la salida: Si PID 1 es systemd, puedes usar la gestión normal de servicios.
Si es otra cosa (como init), necesitarás gestionar los demonios de forma diferente.
Decisión: Prefiere WSL con systemd habilitado para más estabilidad y menos misterios de «¿por qué no arrancó esto?».

Almacenamiento en WSL2: la diferencia entre «funciona» y «no te odia»

Regla #1: mantiene los datos de Kubernetes en el sistema de archivos Linux

Coloca el estado del clúster, las imágenes de contenedores y los datos de volúmenes persistentes bajo el sistema de archivos de tu distro Linux (por ejemplo, /home, /var).
Evita almacenar cargas de escritura intensiva en /mnt/c.
La capa de interoperabilidad puede estar bien para editar código, pero es una trampa para bases de datos y todo lo que sea fsync-intenso.

Regla #2: entiende a dónde van tus bytes

Docker/containerd almacenan imágenes y capas copiables en algún lugar bajo /var/lib.
kind y k3d añaden sus propias capas.
Si construyes muchas imágenes o ejecutas cargas tipo CI, tu VHDX crece. Puede que no se reduzca.
Eso no es un fallo moral; así funcionan los discos virtuales.

Regla #3: mide I/O de la forma aburrida

No necesitas herramientas de almacenamiento sofisticadas para detectar los grandes problemas. Necesitas dos comparaciones:
rendimiento del FS Linux y rendimiento del FS montado desde Windows.
Si uno es 10x más lento, no «ajustes Kubernetes». Mueve la carga.

cr0x@server:~$ dd if=/dev/zero of=/home/cr0x/io-test.bin bs=1M count=512 conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.24 s, 433 MB/s

Significado de la salida: Esto es una escritura secuencial aproximada con flush. Cientos de MB/s es lo esperado en almacenamiento con SSD.
Decisión: Si esto es de un solo dígito MB/s, tu VM está bajo presión de I/O o tu disco está mal. Arregla eso antes de tocar Kubernetes.

cr0x@server:~$ dd if=/dev/zero of=/mnt/c/Users/$WINUSER/io-test.bin bs=1M count=256 conv=fdatasync
256+0 records in
256+0 records out
268435456 bytes (268 MB, 256 MiB) copied, 12.8 s, 21.0 MB/s

Significado de la salida: Si ves esta caída, esa es la vía de interoperabilidad.
Decisión: No pongas /var/lib/docker, /var/lib/containerd o directorios de PV en /mnt/c.
Mantén el código allí si es necesario, pero conserva caches de build y bases de datos en espacio Linux.

Crecimiento del VHDX: compactar es una tarea de mantenimiento, no un arreglo único

Si tu disco virtual WSL2 crece por builds de imágenes y churn, puedes compactarlo—pero compactar no es automático.
Primero, limpia dentro de Linux: elimina imágenes no usadas, prune de volúmenes, borra caches.
Luego compacta desde Windows. Los pasos exactos difieren según la build de Windows y las herramientas, pero el principio es consistente:
elimina bloques no usados en el invitado y luego di al host que compacte.

La verdad aburrida: los clústeres locales crean datos. Rara vez eliminan datos tan agresivamente como crees.
Si tratas tu entorno de dev como producción, programarás mantenimiento como en producción. Ese es el trato.

Red: NodePorts, ingress, DNS y la trampa de localhost

Localhost no es una filosofía; es una decisión de enrutamiento

En WSL2, «localhost» puede significar localhost de Windows o localhost de WSL dependiendo de cómo iniciaste el proceso.
Con localhostForwarding=true, WSL puede reenviar puertos a Windows, pero no es magia para todos los patrones de tráfico.

Si ejecutas kind dentro de WSL2 y expones un servicio con NodePort, a menudo lo accederás desde Windows vía puertos reenviados
o golpeando la IP de la VM WSL. Ambos pueden funcionar. Lo importante es ser consistente y documentar cuál usa tu equipo.

DNS: el asesino silencioso de kubectl

Muchas quejas de «Kubernetes está lento» son en realidad timeouts de DNS.
kubectl parece colgado, pero espera llamadas al servidor API que nunca se resuelven con limpieza.
Los clientes VPN empeoran esto inyectando resolvers o forzando DNS de horizonte dividido.

Tu trabajo es separar «API server lento» de «resolución de nombres lenta» en menos de cinco minutos.
Después puedes discutir con la herramienta VPN corporativa.

Tareas prácticas (comandos, salidas y decisiones)

Estas son tareas reales que harás al configurar y al depurar.
Cada una incluye qué significa la salida y la decisión que tomas a partir de ella.
Hazlas en orden cuando construyas un nuevo entorno; hazlas selectivamente cuando estés en llamas.

Task 1: Confirma que estás en WSL2 (no WSL1)

cr0x@server:~$ wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

Significado de la salida: VERSION 2 significa una VM con kernel Linux real. VERSION 1 significa traducción de syscalls.
Decisión: Si estás en VERSION 1, detente y convierte. Kubernetes necesita el comportamiento del kernel real.

Task 2: Comprueba el kernel y el modo de cgroup

cr0x@server:~$ uname -r
5.15.146.1-microsoft-standard-WSL2
cr0x@server:~$ mount | grep cgroup2
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)

Significado de la salida: cgroup2 montado significa jerarquía unificada.
Decisión: Si tu tooling asume cgroup v1 (configuraciones Docker antiguas, algunos agentes de monitorización), espera sorpresas.

Task 3: Verifica systemd y control de servicios

cr0x@server:~$ systemctl is-system-running
running

Significado de la salida: systemd está activo y estable.
Decisión: Si ves degraded, revisa las unidades fallidas antes de culpar a Kubernetes por «problemas aleatorios».

Task 4: Confirma la salud del runtime de contenedores (ejemplo Docker)

cr0x@server:~$ docker info --format '{{.ServerVersion}} {{.CgroupVersion}}'
24.0.7 2

Significado de la salida: Docker es accesible e informa la versión de cgroup.
Decisión: Si este comando es lento o se cuelga, arregla Docker antes de tocar kind/k3d.

Task 5: Mide la presión de memoria rápidamente

cr0x@server:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       5.9Gi       310Mi       160Mi       1.5Gi       1.3Gi
Swap:          4.0Gi       1.2Gi       2.8Gi

Significado de la salida: available importa más que free. El uso de swap indica presión.
Decisión: Si available está por debajo de ~1Gi y el swap sube, reduce el tamaño del clúster, baja límites o sube la memoria asignada a WSL.

Task 6: Comprueba el uso de disco donde importa

cr0x@server:~$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb       250G  180G   71G  72% /

Significado de la salida: Este es el sistema de archivos de tu distro respaldado por VHDX.
Decisión: Por encima de ~85% de uso, el rendimiento y el comportamiento de compactación empeoran. Haz prune de imágenes y PVs antiguos.

Task 7: Instala y crea un clúster kind con valores sensatos

cr0x@server:~$ kind create cluster --name dev --image kindest/node:v1.29.2
Creating cluster "dev" ...
 ✓ Ensuring node image (kindest/node:v1.29.2) 🖼
 ✓ Preparing nodes 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-dev"
You can now use your cluster with:

kubectl cluster-info --context kind-dev

Significado de la salida: Clúster creado, contexto establecido. StorageClass instalado (normalmente standard).
Decisión: Si la instalación del CNI se cuelga, sospecha de DNS/proxy/VPN o problemas de pull de imágenes—no sigas reintentando a ciegas.

Task 8: Verifica la vivacidad del clúster y la salud de componentes

cr0x@server:~$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:40685
CoreDNS is running at https://127.0.0.1:40685/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
cr0x@server:~$ kubectl get nodes -o wide
NAME                STATUS   ROLES           AGE   VERSION   INTERNAL-IP   OS-IMAGE
dev-control-plane   Ready    control-plane   2m    v1.29.2   172.18.0.2    Debian GNU/Linux 12 (bookworm)

Significado de la salida: El API server es accesible, el nodo está Ready, se le asignó IP interna.
Decisión: Si el nodo está NotReady, ve directamente a kubectl describe node y logs del CNI—no reinstales todo todavía.

Task 9: Detecta los verdaderos consumidores de recursos (nodos + pods)

cr0x@server:~$ kubectl top nodes
NAME                CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
dev-control-plane   620m         15%    2240Mi          56%

Significado de la salida: Metrics-server funciona (kind a menudo lo incluye vía addons o lo instalaste).
Decisión: Si la memoria está alta en reposo, revisa controladores chatos, builds que filtran memoria o un shipper de logs atascado.

Task 10: Valida DNS dentro del clúster (prueba barata)

cr0x@server:~$ kubectl run -it --rm dns-test --image=busybox:1.36 --restart=Never -- nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
pod "dns-test" deleted

Significado de la salida: CoreDNS responde, el descubrimiento de servicios funciona.
Decisión: Si esto hace timeout, arregla DNS antes de depurar tu app. Tu app es inocente hasta que se demuestre lo contrario.

Task 11: Confirma si kubectl lento es red o latencia del API

cr0x@server:~$ time kubectl get pods -A
NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
kube-system   coredns-76f75df574-2lq9r                    1/1     Running   0          4m
kube-system   coredns-76f75df574-9x2ns                    1/1     Running   0          4m
kube-system   etcd-dev-control-plane                      1/1     Running   0          4m
kube-system   kindnet-4cdbf                               1/1     Running   0          4m
kube-system   kube-apiserver-dev-control-plane            1/1     Running   0          4m
kube-system   kube-controller-manager-dev-control-plane   1/1     Running   0          4m
kube-system   kube-proxy-4xw26                            1/1     Running   0          4m
kube-system   kube-scheduler-dev-control-plane            1/1     Running   0          4m

real    0m0.312s
user    0m0.127s
sys     0m0.046s

Significado de la salida: 300ms está bien para local. Varios segundos sugieren DNS, confusión de contexto kubeconfig o un API server con problemas.
Decisión: Si está lento, ejecuta kubectl get --raw /readyz?verbose a continuación.

Task 12: Comprueba endpoints de readiness del API server para el bloqueo real

cr0x@server:~$ kubectl get --raw='/readyz?verbose'
[+]ping ok
[+]log ok
[+]etcd ok
[+]informer-sync ok
[+]poststarthook/start-apiserver-admission-initializer ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
readyz check passed

Significado de la salida: Si etcd o informer sync están lentos/fallando, el plano de control es el cuello de botella.
Decisión: etcd lento suele significar latencia de almacenamiento. Esa es tu señal para revisar disco y evitar I/O cruzada entre sistemas de archivos.

Task 13: Encuentra el pod que está quemando tu portátil (CPU/memoria)

cr0x@server:~$ kubectl top pods -A --sort-by=memory | tail -n 10
default       api-7b7c7d8f6c-9bq5m             1/1     980Mi
observability prometheus-0                      2/2     1210Mi
observability loki-0                            1/1     1530Mi

Significado de la salida: Puedes ver los mayores consumidores.
Decisión: Si tu clúster de dev incluye Prometheus/Loki por defecto, acabas de encontrar el porqué de «¿por qué hace calor?».
Reduce escala, reduce retención o usa herramientas más ligeras localmente.

Task 14: Comprueba uso de disco del runtime de contenedores (Docker)

cr0x@server:~$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          42        12        18.4GB    12.1GB (65%)
Containers      19        6         1.2GB     720MB (60%)
Local Volumes   27        9         9.8GB     6.3GB (64%)
Build Cache     124       0         22.6GB    22.6GB

Significado de la salida: El build cache suele ser el comecolillas silencioso del disco.
Decisión: Si lo reclaimable es grande, haz prune deliberadamente. No esperes a que tu VHDX llegue al 95% y todo se vuelva lento.

Task 15: Prune con seguridad (y acepta el trade-off)

cr0x@server:~$ docker builder prune --all --force
Deleted build cache objects:
v8m3q8qgk7yq4o0l5u3f7s1m2
...
Total reclaimed space: 22.6GB

Significado de la salida: Recuperaste espacio, a costa de reconstruir capas después.
Decisión: En dev, el espacio en disco y la estabilidad valen más que ahorrar 90 segundos en el siguiente build.

Task 16: Confirma que no ejecutas cargas accidentalmente en /mnt/c

cr0x@server:~$ kubectl get pv -A -o wide
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                      STORAGECLASS   REASON   AGE   VOLUMEMODE
pvc-1d2c7f7e-2f5d-4c0d-9a3a-2c6f9d8b1a7c   10Gi       RWO            Delete           Bound    default/db-data           standard                8m    Filesystem

Significado de la salida: Esto no muestra la ruta host. En kind, local-path y el provisioning por defecto difieren.
Decisión: Inspecciona la storage class y el comportamiento del provisionador; si enlaza a hostPath en una ruta montada desde Windows, arréglalo inmediatamente.

Task 17: Diagnostica problemas de kubelet/contenedor vía logs del nodo (contenedor de nodo de kind)

cr0x@server:~$ docker ps --format 'table {{.Names}}\t{{.Status}}' | grep dev-control-plane
dev-control-plane   Up 6 minutes
cr0x@server:~$ docker logs dev-control-plane | tail -n 20
I0205 09:10:12.123456       1 server.go:472] "Kubelet version" kubeletVersion="v1.29.2"
I0205 09:10:15.234567       1 kubelet.go:2050] "Skipping pod synchronization" error="PLEG is not healthy"
...

Significado de la salida: Si PLEG está poco saludable, el kubelet está teniendo problemas—a menudo por I/O de disco o lentitud del runtime de contenedores.
Decisión: Revisa latencia de disco, salud del runtime de contenedores y la cantidad de churn en logs.

Task 18: Revisión rápida de tormentas de logs (pueden ser tu carga más caliente)

cr0x@server:~$ kubectl logs -n kube-system deploy/coredns --tail=20
.:53
[INFO] plugin/reload: Running configuration SHA512 = 7a9b...
[INFO] 10.244.0.1:52044 - 46483 "A IN kubernetes.default.svc.cluster.local. udp 62 false 512" NOERROR qr,aa,rd 114 0.000131268s

Significado de la salida: Algunos logs de DNS son normales. Miles por segundo no lo son.
Decisión: Si los logs están calientes, reduce la verbosidad, arregla el loop de reintentos del cliente o pagarás en CPU y escrituras de disco.

Tres mini-historias corporativas desde las trincheras

Mini-historia 1: El incidente causado por una suposición errónea

Un equipo con el que trabajé estandarizó en WSL2 para clústeres de desarrollo porque era «prácticamente Linux».
Dejaron su repo en el sistema de archivos de Windows para integración fácil con IDE, y luego lo montaron en contenedores para builds y pruebas.
Parecía bien para servicios pequeños. Luego el grupo de plataforma añadió un Postgres local, un operador y una suite de pruebas que ejecutaba migraciones en cada ejecución.

El síntoma fue extraño: las migraciones algunas veces tardaban 30 segundos, otras veces 10 minutos.
La gente culpó «la sobrecarga de Kubernetes» y «ese operador que añadimos».
Un ingeniero intentó arreglarlo aumentando límites de CPU. Empeoró—más CPU solo hizo que el sistema alcanzara antes el cuello de botella de almacenamiento.

La suposición errónea fue simple: asumieron que /mnt/c era «solo otro sistema de archivos».
No lo es. Es una frontera con distinto comportamiento de caché, distinto rendimiento de metadatos y distintas semánticas de flush.
Su volumen de base de datos y caches de build estaban en la vía lenta.

La solución fue poco glamorosa: mover la base de datos y el cache de build al sistema de archivos Linux, y solo mantener el checkout en Windows si hacía falta.
También añadieron un script de preflight que rechazaba iniciar el stack si detectaba PVs apuntando a /mnt/c.
El rendimiento se estabilizó al instante. Nadie celebró, que es como sabes que fue la solución correcta.

Mini-historia 2: La optimización que salió mal

Otra compañía quería «clústeres locales más rápidos», así que preinstalaron todo: stack de observabilidad, ingress, cert-manager y un par de operadores.
La idea era noble: reducir tiempo de onboarding, asegurar que todos tuvieran la misma base, evitar «funciona en mi portátil».
Incluso crearon un script interno que creaba el clúster e instalaba todos los charts de una sola vez.

Luego llegaron los tickets. Los portátiles se calentaban en reuniones. La batería se desplomó.
Los comandos kubectl a veces laggeaban varios segundos. Los desarrolladores empezaron a desactivar componentes «temporalmente», lo que se volvió deriva permanente.
El equipo de plataforma respondió empujando más límites por defecto y más réplicas, por la «paridad con prod».

El contragolpe vino de la actividad de controladores y trabajo en segundo plano.
Scrapes de Prometheus, ingestión de Loki, reconciliación de cert-manager y bucles de operadores no son gratis.
En un clúster real, ese coste se amortiza entre servidores. En un portátil, lo sientes cada vez que el ventilador sube de vueltas.

La solución fue definir dos perfiles: core (ingress + DNS + storage + metrics-server) y full (la pila pesada).
Core fue el defecto; full opt-in para depuración.
También recortaron intervalos de scrape y retención en modo local. La ironía: el onboarding fue más rápido porque la gente dejó de pelear con su entorno.

Mini-historia 3: La práctica aburrida pero correcta que salvó el día

Una empresa regulada (de las que aman las hojas de cálculo) tuvo una experiencia sorprendentemente fluida con Kubernetes en WSL2.
Su secreto no fue una cadena de herramientas elegante. Fue disciplina: fijado de versiones, creación repetible de clústeres y limpieza agresiva.
Cada desarrollador tenía la misma imagen de nodo kind, las mismas versiones de charts y los mismos límites por defecto.

También tenían una rutina semanal de mantenimiento: prune de imágenes no usadas, borrar namespaces y PVs sin uso, y compactar el entorno dev cuando era necesario.
Fue programado, documentado y aburrido.
Al principio los desarrolladores se quejaban—nadie quiere «día de mantenimiento» en un portátil.

Luego vino el día en que una actualización de Windows cambió algo sutil en la red.
La mitad de los clústeres de la organización empezaron a tener fallos intermitentes de DNS.
Los equipos con entornos con deriva tuvieron un desmadre: versiones diferentes de CNI, kubeconfigs aleatorios, overrides locales de DNS inconsistentes.
Los equipos disciplinados pudieron reproducir rápido y comparar manzanas con manzanas.

Aislaron el problema al comportamiento del resolver bajo VPN, desplegaron una solución estándar y volvieron al trabajo.
La práctica aburrida salvó el día: versiones consistentes y bases iguales hacen que la depuración sea finita.

Guía rápida de diagnóstico: qué comprobar primero, segundo, tercero

Cuando tu portátil se está derritiendo o tu clúster está «lento», no tienes tiempo para admirar la arquitectura.
Necesitas un camino determinista hacia el cuello de botella.

Primero: ¿Está el host (Windows + WSL2) bajo presión de recursos?

  1. Comprueba uso de memoria y swap de WSL2: free -h. Si available es bajo y swap sube, estás limitado por memoria.
  2. Comprueba llenado de disco: df -h /. Si está casi lleno, todo se vuelve más lento y frágil.
  3. Comprueba sanity I/O rápido: dd ... conv=fdatasync en FS Linux vs /mnt/c. Si el FS Linux también es lento, tienes presión de I/O a nivel de sistema.

Segundo: ¿El plano de control de Kubernetes está sano o atascado?

  1. API readyz: kubectl get --raw='/readyz?verbose'. Si las comprobaciones etcd son lentas, sospecha latencia de almacenamiento.
  2. Estado de nodos: kubectl get nodes y kubectl describe node. Si NotReady, mira síntomas del CNI y kubelet.
  3. Smoke test de CoreDNS: ejecuta un nslookup en busybox. Si DNS está roto, deja de fingir que la app es el problema.

Tercero: ¿Qué carga está realmente quemando CPU/memoria/I/O?

  1. Mayores consumidores: kubectl top pods -A --sort-by=memory y --sort-by=cpu.
  2. Tormentas de logs: revisa logs de los pods sospechosos. Alta tasa de escritura equivale a presión I/O y ralentización global.
  3. Churn de imágenes/build: docker system df y prune del build cache si ha crecido desmesuradamente.

Idea parafraseada de Werner Vogels: «Todo falla, todo el tiempo.» Construye tu entorno local para que el fallo sea rápido de identificar, no misterioso.

Errores comunes: síntoma → causa raíz → solución

1) Síntoma: Los ventiladores del portátil suben cuando el clúster está «idle»

Causa raíz: controladores en segundo plano (stack de observabilidad, operadores) haciendo reconciliación constante; o un pod en crash loop escribiendo logs.

Solución: kubectl top pods -A, encuentra el comecolillas; escálalo hacia abajo; reduce retención/intervalos de scrape; arregla crash loops; establece requests/limits sensatos.

2) Síntoma: comandos kubectl tardan 5–30 segundos aleatoriamente

Causa raíz: timeouts de DNS o interferencia de resolvers de VPN; a veces kubeconfig apunta a un contexto muerto.

Solución: ejecuta time kubectl get pods -A, luego kubectl get --raw='/readyz?verbose'. Si readyz está bien, prueba DNS dentro del clúster. Si DNS falla, arregla resolv.conf/políticas de DNS de la VPN o trabaja fuera de la VPN para tareas locales.

3) Síntoma: Postgres/MySQL en el clúster es dolorosamente lento

Causa raíz: PV o bind mounts están en /mnt/c u otra frontera lenta; cargas fsync-intensas lo amplifican.

Solución: mantén datos de PV en el sistema de archivos Linux; usa un provisioner local-path que escriba en /var dentro de WSL, no en montajes de Windows.

4) Síntoma: WSL2 se come RAM y nunca la devuelve

Causa raíz: page cache de Linux + comportamiento de reclamación de WSL2; builds grandes y pulls de imágenes llenan la cache; no se configuró límite de memoria.

Solución: establece tope de memoria en .wslconfig; reinicia WSL con wsl.exe --shutdown cuando haga falta; reduce huella del clúster y evita ejecutar todo a la vez.

5) Síntoma: Disco se llena «misteriosamente»

Causa raíz: capas de imagen de contenedores, build cache, datos PV sobrantes y logs; VHDX crece; no se hace pruning.

Solución: docker system df y docker builder prune --all; borra namespaces/PVs sin uso; vigila df -h.

6) Síntoma: Nodo pasa a NotReady; pods quedan en ContainerCreating

Causa raíz: CNI roto o kubelet/runtime de contenedores con problemas por presión de I/O; contenedor de nodo kind poco saludable.

Solución: revisa logs del contenedor del nodo kind; comprueba pods del CNI en kube-system; arregla presión de disco; recrea el clúster si la imagen del nodo está corrupta.

7) Síntoma: Ingress funciona desde WSL pero no desde Windows

Causa raíz: expectativas de reenvío de puertos erróneas; firewall/VPN de Windows; confusión entre IP de WSL y localhost de Windows.

Solución: decide un método de acceso (localhost reenviado vs IP de la VM WSL); documéntalo; expón ingress con mapeo predecible; verifica con curl desde ambos lados.

8) Síntoma: Builds dentro de contenedores son más lentos que builds en Windows

Causa raíz: árbol de código en montaje de Windows; operaciones de metadatos intensas a través de la frontera; antivirus escaneando rutas de Windows.

Solución: mantén el código fuente dentro del sistema de archivos Linux para builds; usa el IDE de Windows vía integración WSL; excluye directorios de build del AV de Windows si la política lo permite.

Segundo y último chiste corto: Si tu clúster de dev necesita un runbook, felicitaciones—has construido un pequeño entorno de producción con peor financiación.

Listas de verificación / plan paso a paso

Plan de configuración (haz esto una vez por portátil)

  1. Configura límites de WSL2 en .wslconfig: limita memoria y CPU; habilita swap razonable.
  2. Habilita systemd en WSL (si es compatible) y estandariza su uso en el equipo.
  3. Elige un runtime: Docker Engine dentro de WSL2 está bien; evita mezclar Docker Desktop + Docker en WSL salvo que disfrutes la ambigüedad.
  4. Elige una herramienta de Kubernetes: kind (recomendado) o k3d. Escoge una y estandariza scripts de creación de clúster.
  5. Mantén datos del clúster en FS Linux: asegúrate de que el almacenamiento del runtime y las rutas de PV no estén en /mnt/c.
  6. Define perfiles: «core» por defecto; «full» opt-in. Tu portátil no es un clúster de staging.
  7. Fija versiones: versión de la imagen del nodo kind, versiones de charts y addons críticos.

Checklist de flujo diario (mantente rápido, mantén cordura)

  1. Antes de trabajo pesado: free -h y df -h /. Si estás bajo, prune primero.
  2. Después de un día de builds intensos: docker system df. Si el build cache es enorme, prunealo.
  3. Cuando algo se siente lento: ejecuta la prueba de DNS y las comprobaciones /readyz antes de cambiar nada.
  4. Mantén tu repo donde tus herramientas sean más rápidas: si builds están en Linux, mantén el working copy en Linux.

Checklist semanal de mantenimiento (aburrido, efectivo)

  1. Prune del build cache: docker builder prune --all.
  2. Prune imágenes y contenedores no usados: docker system prune (con cuidado: entiende lo que borra).
  3. Borra namespaces y PVs no usados en el clúster de dev.
  4. Recrea el clúster si ha acumulado demasiada deriva. El teardown es una característica.
  5. Recupera memoria si Windows está justo: wsl.exe --shutdown.

Preguntas frecuentes

1) ¿Debería usar Docker Desktop o Docker Engine dentro de WSL2?

Si quieres la integración más simple con Windows y tu empresa lo estandariza, Docker Desktop está bien.
Si quieres menos piezas móviles y comportamiento Linux más claro, usa Docker Engine dentro de WSL2.
Elige uno y cúmplelo; configuraciones mixtas crean folklore de depuración.

2) ¿Por qué es un problema guardar datos en /mnt/c?

Porque cruzas una frontera de virtualización/interop con distintas semánticas de caché y metadatos.
Las bases de datos hacen muchas escrituras pequeñas y llamadas fsync. Esa vía las castiga.
Mantén I/O intenso dentro del sistema de archivos Linux y trata /mnt/c como «bueno para documentos, no para datos calientes».

3) kind o k3d: ¿cuál es menos propenso a derretir mi portátil?

k3d suele usar menos memoria en base porque k3s es más pequeño.
kind es increíblemente predecible y fácil de fijar en versiones. Ambos pueden ser seguros en portátil si mantienes la carga ligera y pones límites a WSL2.
Mi sesgo: kind para trabajo de plataforma y simulación multinodo; k3d para «simplemente ejecutar la pila».

4) ¿Cuánta RAM debería asignar a WSL2?

En 16GB totales: 6–8GB es un buen techo.
En 32GB: 12–16GB está bien.
Si asignas demasiado, ocultarás límites malos de pods y dejarás a las apps de Windows con recursos insuficientes de forma sutil.

5) ¿Por qué WSL2 mantiene la memoria después de parar cargas?

Linux usa agresivamente memoria para filesystem cache. Eso normalmente es bueno.
La reclamación de WSL2 de vuelta a Windows puede ser más lenta de lo deseado.
Si necesitas RAM inmediatamente, apaga WSL; si quieres cordura a largo plazo, limita memoria y reduce churn en segundo plano.

6) ¿Por qué mis comandos kubectl son lentos solo cuando la VPN está activada?

Los clientes VPN suelen inyectar resolvers DNS y reglas de enrutamiento.
Kubernetes depende del DNS internamente, y kubectl depende de conectividad fiable al endpoint del API.
Diagnostica con la prueba de DNS y las comprobaciones readyz; luego decide si usar split-tunnel, ajustar resolvers o hacer tareas locales fuera de la VPN.

7) ¿Cómo expongo servicios a Windows desde un clúster que corre en WSL2?

Decide si usas puertos locales reenviados o la IP de la VM WSL.
Para una UX de dev predecible, muchos equipos hacen port-forward (kubectl port-forward) o ejecutan un ingress que mapea a puertos conocidos.
Documenta el método para que tu equipo no depure «localhost» por diversión.

8) ¿Puedo ejecutar cargas con estado (Postgres, Kafka) localmente en Kubernetes en WSL2?

Sí, pero sé realista. Postgres está bien para dev si sus datos viven en el sistema de archivos Linux y no ejecutas otras cinco pilas pesadas.
Kafka es posible, pero suele ser donde la «paridad local» se vuelve «castigo local». Considera sustitutos más ligeros salvo que depures comportamiento específico de Kafka.

9) ¿Con qué frecuencia debería recrear mi clúster local?

Si trabajas en plataforma con muchos CRDs e instalaciones de controladores, recrearlo semanal o quincenalmente es normal.
Si tu clúster es estable y lo mantienes ligero, puede durar más.
Recrea inmediatamente cuando sospeches deriva: DNS raro, webhooks atascados o fallos de admission misteriosos.

10) ¿Cuál es la causa raíz más común de «todo está lento»?

Almacenamiento. O la carga está en la ruta de sistema de archivos equivocada, o el disco está casi lleno, o el sistema escribe logs como si le pagaran por línea.
La memoria es la segunda. DNS la tercera. Kubernetes en sí rara vez es la primera causa; solo es el escenario donde el problema actúa.

Siguientes pasos que puedes hacer hoy

  1. Configura tus límites de WSL2 (memoria, CPU, swap). Si haces solo una cosa, haz esto.
  2. Mueve datos calientes fuera de /mnt/c: almacenamiento del runtime de contenedores, PVs, bases de datos, caches de build—mantenlos en el filesystem Linux.
  3. Elige un perfil de clúster ligero por defecto: kind o k3d solo con addons core. Haz que «full stack» sea un perfil opt-in.
  4. Adopta la guía rápida de diagnóstico: comprueba presión del host, luego salud del plano de control, luego los mayores consumidores. Deja de adivinar.
  5. Programa mantenimiento aburrido: prune de caches, borra namespaces sin uso y recrea el clúster cuando aparezca deriva.

El objetivo final no es construir el clúster local más impresionante. Es construir uno que se comporte de forma consistente bajo estrés.
La predictibilidad es lo que mantiene tu portátil frío—y tu cerebro más calmado.

Industria TI: la mentira de «reescribir desde cero» — por qué falla y qué funciona

Heredas un sistema mantenido con tareas cron, conocimiento tribal y un esquema de base de datos que parece diseñado durante un simulacro de emergencia. Alguien pronuncia las palabras mágicas: “Reescribámoslo desde cero”. Asienten las cabezas. Se refrescan las hojas de ruta. Aparece un nuevo repositorio como un cuaderno nuevo el 1 de enero.

Luego sucede la producción. La reescritura no conoce a tus clientes, tus casos límite, tus restricciones operativas ni la gravedad de tus datos. Y la rotación de on-call definitivamente no se apuntó para “dos sistemas, ambos rotos, para siempre”.

La mentira: por qué «reescribir desde cero» parece verdad

Las reescrituras venden esperanza. Ofrecen un corte limpio respecto al desorden acumulado: no más frameworks legacy, no más “parches temporales” de 2017, no más módulos inatestables, no más esa rutina almacenada que todos temen tocar. El argumento es emocionalmente correcto. El problema es que los sistemas en producción no funcionan con emociones. Funcionan con invariantes.

Una reescritura desde cero suele venderse como un proyecto técnico. En realidad es una apuesta organizacional: que puedes reconstruir no solo código, sino comportamiento, semántica de datos, postura operativa y manejo de fallos—mientras el sistema antiguo continúa evolucionando bajo carga real de clientes.

Aquí está la parte que la gente omite en la presentación de la reescritura: el sistema antiguo es un registro fósil de incidentes reales. Contiene el tejido cicatricial de caídas, intentos de fraude, dispositivos cliente extraños, fallos parciales y sorpresas regulatorias. Ese tejido cicatricial es feo. También es valioso.

Las reescrituras ignoran que los “requisitos” no están en el sistema de tickets. Están en las gráficas de producción, en las notas de on-call y en las suposiciones silenciosas que mantienen las luces encendidas. Cuando reescribes, borras esas suposiciones—y luego las redescubres a las 2:13 a. m.

Broma #1: Un plan de reescritura es como comprarte una cinta de correr nueva para ponerte en forma. La compra se siente productiva; lo que de verdad cuenta es ponerse a correr.

Por qué las reescrituras fallan en producción (las razones reales)

1) La paridad de funciones es una trampa, no un hito

Los equipos tratan la “paridad de funciones” como una lista de comprobación. En la práctica, el sistema antiguo no tiene funciones; tiene comportamientos. Los comportamientos incluyen valores por defecto no documentados, peculiaridades temporales, expectativas de idempotencia, semántica de reintentos y flujos de corrección de datos que ocurren fuera del camino feliz.

Cuando una reescritura apunta a la paridad, se fija en la superficie visible de UI/API y pierde las partes desordenadas que importan: cómo se comporta el sistema cuando una pasarela de pagos se agota, cuando un downstream está lento, cuando un cliente reintenta un POST, cuando los relojes se desincronizan o cuando tienes que reprocesar un día de eventos.

2) Los datos son el producto, y los datos pesan

La mayoría de los sistemas son sistemas de datos con cara de UI. Una reescritura que no empiece por la semántica de datos—qué significan los registros, cómo cambian con el tiempo, qué se permite que sea eventualmente consistente—derivará hacia “un nuevo esquema de base de datos que se siente más bonito” y luego chocará con la realidad en el corte.

La migración de datos no es un proyecto de fin de semana. Es un ejercicio sostenido de fiabilidad con backfills, escrituras duales (o captura de cambio de datos), reconciliación y planes de reversión. Si tu plan de reescritura no incluye meses de ejecución de ambas rutas de datos, no estás planificando un corte; estás lanzando una moneda al aire.

3) La reescritura crea una organización con cerebro dividido

Dos bases de código significan dos prioridades, dos colas de bugs, dos modelos operativos y una base de clientes compartida que espera el mismo servicio. Normalmente las personas sénior se ven atraídas por la reescritura, dejando el sistema legacy con capacidad reducida y riesgo creciente. Entonces ocurre un incidente en el legado y el calendario de la reescritura se ve saqueado para responder. La reescritura se ralentiza. El legado se degrada. Todos pierden.

4) La preparación operativa no es “ahora tenemos Kubernetes”

Los stacks modernos pueden empeorar las cosas cuando se usan como atrezzo de credibilidad. Cambiar un conjunto de modos de fallo por otro no es progreso; son nuevas formas de alertar a la gente.

La preparación operativa trata de: SLOs bien definidos, instrumentación, calidad de alertas, despliegues controlados, modelado de capacidad, gestión de dependencias, runbooks y una cultura capaz de sostener el cambio continuo. Si el equipo de reescritura no puede ejecutar bien el sistema antiguo, tampoco ejecutará bien el nuevo—solo que con YAML más brillante.

5) El rendimiento es una propiedad emergente y no se puede probar con unit tests

El sistema antiguo tiene trucos de rendimiento nacidos en batalla: cachés en capas extrañas, tablas desnormalizadas, agregados precomputados, índices cuidadosamente ubicados, coalescencia de peticiones y reglas de “no hacer eso en el hot path”. La reescritura suele arrancar limpia, luego aparecen regresiones de rendimiento bajo carga tipo producción. Entonces pegas cachés y colas y trabajos en background, reconstruyendo finalmente la misma complejidad—sin la memoria institucional.

6) El nuevo sistema es correcto a pequeña escala y equivocado a gran escala

Las revisiones de código detectan problemas locales. No detectan el comportamiento a nivel de sistema bajo fallos parciales. Las reescrituras fallan porque modelan el mundo como fiable y consistente. La producción no es ninguna de las dos cosas.

7) Seguridad y cumplimiento no son “para después”

Las reescrituras suelen posponer controles de seguridad, rastros de auditoría, reglas de retención y acceso con privilegios mínimos. Luego descubres que los “registros raros” del sistema legacy estaban ahí porque un auditor hizo una pregunta muy específica. O bien te pones a improvisar o retrasas el corte. Ambas opciones son caras.

Hechos e historia: la industria ya pasó por esto

  • 1980s–1990s: Grandes organizaciones intentaron repetidamente reescrituras impulsadas por herramientas CASE de sistemas mainframe legacy; muchas colapsaron por el alcance y la complejidad de la migración de datos.
  • El esfuerzo del Año 2000 (Y2K) enseñó a las empresas una lección brutal: reemplazarlo todo rara vez es factible; la remediación y el triage basado en riesgo suelen ganar.
  • La era de los rollouts ERP “big bang” mostró un patrón: los cortes fallan cuando los procesos de negocio no se mapean a flujos de trabajo reales y excepciones.
  • El auge de la arquitectura orientada a servicios (SOA) prometió modularidad; muchos proyectos entregaron monolitos distribuidos con más latencia y depuración más difícil.
  • La popularidad de microservicios (mediados de 2010s) incrementó la tentación de reescribir, pero también aumentó el costo de la madurez operativa: tracing, mapeo de dependencias y contención de fallos se volvieron obligatorios.
  • La maduración de las herramientas de captura de cambio de datos (CDC) hizo que las migraciones incrementales fueran más prácticas, cambiando la economía lejos de las reescrituras tipo big-bang.
  • La elasticidad cloud redujo algunos riesgos de capacidad, pero introdujo otros: vecinos ruidosos, cuotas de servicio y incidentes por facturación.
  • Observabilidad como disciplina (métricas, logs, traces) se volvió mainstream; expuso que muchas caídas “legacy” eran en realidad problemas de dependencias y capacidad.

Tres mini-historias de las trincheras corporativas

Mini-historia 1: El incidente causado por una suposición errónea

Una empresa SaaS mediana reescribió su servicio de facturación en un nuevo lenguaje para “hacerlo mantenible”. El equipo hizo un trabajo cuidadoso en tests unitarios y en el contrato API. Construyeron un esquema de base de datos limpio y lo lanzaron detrás de una feature flag.

La suposición errónea fue sutil: asumieron que todos los clientes tratarían POST /charge como no idempotente y nunca reintentarían automáticamente. El sistema legacy había implementado silenciosamente idempotencia usando un token suministrado por el cliente, porque años antes un cliente móvil reintentaba peticiones en redes inestables.

La reescritura no implementó eso. Bajo un evento rutinario de jitter de red entre regiones, un subconjunto de clientes reintentó cargos. El nuevo servicio creó múltiples cargos. Soporte se llenó de tickets. Finanzas intervino. Los ingenieros recibieron páginas por un “incidente de corrección de datos”, que es del tipo que no deja de doler incluso cuando las gráficas se ponen verdes.

La solución no fue “añadir más tests”. La solución fue tratar la idempotencia y los reintentos como requisitos de primera clase, documentarlos como invariantes y construir herramientas de reconciliación. También añadieron un canario que simulaba reintentos y verificaba que el libro mayor permaneciera estable.

La moraleja: si no modelas explícitamente el comportamiento del cliente, la red lo hará por ti.

Mini-historia 2: La optimización que salió mal

Un equipo de plataforma interna de una empresa reescribió una tubería de reporting para reducir costos. Reemplazaron un job de agregación basado en base de datos por una canalización streaming y ajustaron el batching agresivamente para minimizar CPU y almacenamiento.

La optimización lucía bien en benchmarks sintéticos. En producción fue distinto. Su batching aumentó la latencia end-to-end y creó carga en ráfagas en servicios downstream. Una tubería “barata” se convirtió en generadora de thundering herd. El downstream limitó la tasa. Los reintentos se acumularon. Los buffers internos del sistema streaming crecieron, y entonces la lógica de backpressure empezó a dropear mensajes bajo carga sostenida.

Ahora el sistema tenía dos problemas en lugar de uno: los reportes llegaban tarde y algunos estaban equivocados. El equipo pasó semanas construyendo controles compensatorios: colas dead-letter, herramientas de replay y un proceso de corrección de “datos tardíos”. Los costos subieron, no bajaron, porque la sobrecarga operativa también es un costo—pagado en atención humana.

Finalmente aflojaron el batching, aceptaron un coste de cómputo steady-state mayor y pusieron SLOs estrictos alrededor de frescura y corrección. La “optimización” había optimizado lo equivocado: la factura, no el producto.

Mini-historia 3: La práctica aburrida pero correcta que salvó el día

Una compañía que modernizaba un stack de autenticación resistió la tentación de reescribir y hizo algo dolorosamente poco glamuroso: construyó una suite de pruebas de compatibilidad basada en tráfico real de producción. No solo tests unitarios—peticiones grabadas, tokens de borde y modos de fallo representativos.

Desplegaron el nuevo servicio primero como lector shadow. Validaba tokens y calculaba decisiones pero no las aplicaba. Durante semanas comparó sus salidas con las decisiones del sistema legacy y registró discrepancias con suficiente contexto para depurar.

Encontraron una larga cola de raridades: tolerancia a desincronización de relojes, un algoritmo de firma más antiguo aún usado por un cliente y un código de error específico del que dependía un socio. Nada de esto estaba en la especificación. Todo importaba.

Cuando finalmente cortaron el tráfico, el lanzamiento fue casi aburrido. On-call recibió algunas páginas—principalmente por dashboards demasiado sensibles—y luego todo se estabilizó. La “práctica aburrida” fue tratar la migración como un ejercicio de recolección de evidencia, no como un salto heroico.

Qué funciona realmente: patrones que sobreviven al contacto con la realidad

Comienza con invariantes, no con arquitectura

Antes de debatir frameworks, escribe las invariantes. Las cosas que deben mantenerse verdaderas incluso cuando las dependencias fallan:

  • Reglas de idempotencia: qué operaciones se pueden reintentar de forma segura y cómo.
  • Restricciones de corrección de datos: qué “no puede ocurrir” (doble cargo, saldo negativo, registro de auditoría perdido).
  • Presupuestos de latencia y objetivos de disponibilidad: qué tolera el usuario.
  • Requisitos de consistencia: dónde la consistencia eventual es aceptable y dónde no.
  • Requisitos de reversión: qué significa deshacer un deploy, una migración o un backfill.

Usa el patrón strangler fig (y hazlo de verdad)

El patrón strangler fig funciona porque respeta que los sistemas en producción son ecosistemas vivos. No reemplazas el árbol en un día; haces crecer un sistema nuevo alrededor y mueves responsabilidades gradualmente.

En la práctica, esto significa:

  • Poner una capa de enrutamiento (API gateway, reverse proxy o ingress de service mesh) delante del sistema antiguo.
  • Mover un endpoint, un flujo de trabajo o una porción de dominio a la vez.
  • Mantener una reversión rápida: enrutar el tráfico de vuelta de inmediato.
  • Usar lecturas shadow y comparación cuando sea posible.

Prefiere “reemplazar detrás de una interfaz” sobre “reescribir todo”

Cuando un subsistema está realmente podrido, reemplázalo detrás de una interfaz estable. Mantén el contrato. Mantén las métricas. Mantén los runbooks operativos. Cambia los internos. Esto reduce el radio de impacto y evita que los equipos reconstruyan todo el mundo solo para arreglar una pared.

Migración de datos: dual-write o CDC, más reconciliación

Elige tu veneno con cuidado:

  • Dual-write: la aplicación escribe en la tienda vieja y la nueva. Conceptualmente más simple, pero más difícil de hacer correcto bajo fallos parciales.
  • CDC: trata la base de datos antigua como la fuente de la verdad y streamea los cambios a la nueva tienda. A menudo más robusto, pero requiere disciplina en ordenamiento y evolución de esquemas.

Sea cual sea, necesitas reconciliación: jobs periódicos que comparen recuentos, checksums e invariantes entre viejo y nuevo. Sin reconciliación estás operando con sensaciones.

Construye paridad operativa antes que paridad funcional

La paridad operativa es la capacidad de ejecutar, depurar y recuperar. Incluye:

  • Dashboards que muestren saturación, errores, latencia y salud de dependencias.
  • Alertas accionables (páginas por síntomas, no ruido).
  • Runbooks que asuman fallos parciales e incluyan reversión.
  • Pruebas de carga que coincidan con la forma de producción, no solo el volumen.

Una cita que deberías pegar en tu monitor

La esperanza no es una estrategia. — James Cameron

La operación no es cínica; es alérgica al pensamiento mágico. Planifica para los modos de fallo que definitivamente tendrás.

Mantén el sistema antiguo saludable mientras migras

Aquí es donde el liderazgo necesita madurar. Si dejas al legado sin recursos mientras construyes el reemplazo, el legado colapsará y consumirá al equipo de reemplazo. Asigna capacidad explícita para trabajo de fiabilidad del legacy durante la migración. Trátalo como reducción de riesgo, no como “esfuerzo desperdiciado”.

Broma #2: Lo único peor que un sistema frágil es dos sistemas frágiles que discrepan sobre de quién es la culpa.

Tareas prácticas: comandos, salidas, qué significa y qué decides

Estas son las tareas que realmente ejecutas cuando alguien dice “la reescritura solucionará el rendimiento/la fiabilidad”. No discutas. Mide. Cada tarea abajo incluye un comando realista, salida típica, qué significa esa salida y la decisión que tomas a partir de ella.

1) Identificar saturación de CPU vs quejas de latencia

cr0x@server:~$ uptime
 14:22:01 up 37 days,  4:11,  2 users,  load average: 18.42, 17.96, 16.88

Qué significa: Una carga promedio muy por encima del número de CPUs (necesitas saber cores) sugiere contención de CPU o acumulación en la cola de ejecutables, posiblemente también espera I/O según la carga.

Decisión: No empieces una reescritura porque “está lento”. Primero determina si estás limitado por CPU, I/O o bloqueos. Luego: comprueba desglose de CPU y cola de ejecución.

2) Comprobar utilización por CPU e iowait

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.5.0 (prod-app-01)  02/04/2026  _x86_64_  (16 CPU)

22:22:10     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
22:22:11     all   62.11    0.00   11.83   18.44    0.00    0.52    0.00    0.00    0.00    7.10
22:22:11       0   71.00    0.00   12.00   10.00    0.00    0.00    0.00    0.00    0.00    7.00

Qué significa: Alto %iowait sugiere que la CPU espera en disco/almacenamiento en red. Alto %usr sugiere carga de cómputo. Aquí es mixto: CPU ocupada y esperando I/O.

Decisión: Investiga latencia de almacenamiento y base de datos antes de reescribir lógica de aplicación. Una reescritura no cambiará tus discos.

3) Comprobar presión de memoria e intercambio

cr0x@server:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            62Gi        54Gi       1.1Gi       1.8Gi       6.9Gi       4.2Gi
Swap:          8.0Gi       2.7Gi       5.3Gi

Qué significa: El uso de swap es no trivial. Si el sistema está intercambiando activamente, la latencia tail aumentará.

Decisión: Antes de reescribir, arregla el dimensionamiento de memoria, fugas o límites de contenedores. Si no puedes ejecutar el servicio actual sin swap, el nuevo probablemente lo hará también—solo más rápido.

4) Comprobar intercambio activo y fallos mayores

cr0x@server:~$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 8  2 2795520 1187328  9120 6852140   0  64  1220  1780 8210 9230 61 11  7 21  0
 7  1 2795584 1169000  9120 6854100   0 128  1100  1650 8030 9012 60 12  8 20  0

Qué significa: so (swap out) indica intercambio activo. wa también es alto, consistente con espera I/O.

Decisión: Trata esto como un incidente operativo, no como una oportunidad de hoja de ruta. Reduce huella de memoria, arregla vecinos ruidosos o escala. Reescribir no curará el swapping.

5) Encontrar los mayores consumidores de CPU

cr0x@server:~$ ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head
  PID COMMAND         %CPU %MEM
 8123 java            345.2 18.4
 9001 redis-server     72.1  3.2
 7442 nginx            38.0  0.8

Qué significa: Un solo proceso consumiendo múltiples cores puede ser esperado, pero confirma que se alinea con el throughput. Si la CPU está alta y el throughput es bajo, estás en un bucle o con contención de locks.

Decisión: Perfila el proceso caliente y revisa contención de hilos. Si el argumento de la reescritura es “el nuevo lenguaje será más rápido”, exige evidencia con flame graphs primero.

6) Identificar rápidamente cuellos de botella en disco

cr0x@server:~$ iostat -xz 1 3
Linux 6.5.0 (prod-db-01)  02/04/2026  _x86_64_  (16 CPU)

Device            r/s     w/s   rMB/s   wMB/s  await  svctm  %util
nvme0n1         220.0   410.0    35.2    88.1  18.40   0.90  92.50

Qué significa: Alto %util y await creciente implica que el dispositivo está saturado o con colas. Bajo svctm con alto await indica profundidad de cola/latencia, no lentitud bruta del dispositivo.

Decisión: Necesitas tuning de consultas, cambios de índices o distribución de I/O. Una reescritura que mantenga los mismos patrones de acceso se topará con el mismo muro.

7) Comprobar capacidad del sistema de archivos y agotamiento de inodos

cr0x@server:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p2  900G  855G   45G  96% /
cr0x@server:~$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/nvme0n1p2  5900000 5892000     8000  100% /

Qué significa: Disco casi lleno es malo; el agotamiento de inodos es más sigiloso y puede romper despliegues, logging y archivos temporales.

Decisión: Detente. Limpia. Añade políticas de retención. Si tu reescritura es “porque los despliegues fallan” y la razón son inodos, no necesitas un nuevo código—necesitas mantenimiento.

8) Verificar errores de red y retransmisiones

cr0x@server:~$ netstat -s | egrep -i 'retrans|listen|listenoverflows|packet receive errors' | head
    12455 segments retransmitted
    37 packet receive errors

Qué significa: Retransmisiones y errores de recepción pueden producir “latencia aleatoria”. Tu app puede ser inocente.

Decisión: Investiga NIC, desajustes de MTU, load balancers sobrecargados o problemas cross-AZ antes de reescribir la capa de servicio.

9) Inspeccionar estados de conexiones TCP (fugas o clientes lentos)

cr0x@server:~$ ss -s
Total: 14021
TCP:   10234 (estab 812, closed 9132, orphaned 5, timewait 7210)

Transport Total     IP        IPv6
RAW       0         0         0
UDP       29        25        4
TCP       1102      1011      91
INET      1131      1036      95
FRAG      0         0         0

Qué significa: Excesivo timewait puede indicar conexiones de corta vida sin keep-alives, o comportamiento de reintento agresivo del cliente.

Decisión: Ajusta la reutilización de conexiones, parámetros del load balancer y comportamiento cliente. Una reescritura no cambiará la física de TCP.

10) Comprobar throttling de contenedores (los límites de CPU de Kubernetes duelen)

cr0x@server:~$ kubectl -n payments top pods | head
NAME                           CPU(cores)   MEMORY(bytes)
payments-api-6d8d6c6b6c-2qz7m  980m         740Mi
payments-api-6d8d6c6b6c-pk9h4  995m         755Mi
cr0x@server:~$ kubectl -n payments describe pod payments-api-6d8d6c6b6c-2qz7m | egrep -i 'Limits|Requests|throttl' -n | head -n 20
118:    Limits:
119:      cpu:     1
120:      memory:  1Gi

Qué significa: Pods al tope del límite de CPU probablemente experimentan throttling, causando picos de latencia que parecen “el nuevo servicio es más lento”.

Decisión: Revisa límites/requests de CPU y políticas HPA. Si reescribes sobre Kubernetes sin entender el throttling, solo habrás movido el problema a YAML.

11) Identificar contención de locks en la base de datos (un punto ciego clásico)

cr0x@server:~$ psql -U postgres -d appdb -c "select pid, wait_event_type, wait_event, state, query from pg_stat_activity where wait_event_type is not null order by pid limit 5;"
 pid  | wait_event_type |   wait_event   | state  |                  query
------+-----------------+----------------+--------+------------------------------------------
 4142 | Lock            | transactionid  | active | UPDATE invoices SET status='paid' ...
 4221 | Lock            | relation       | active | ALTER TABLE ledger ADD COLUMN ...

Qué significa: Las peticiones están bloqueadas por locks. Los problemas de rendimiento pueden deberse a DDL de migración, no a la calidad del código de la aplicación.

Decisión: Programa migraciones pesadas, reduce el alcance de locks, usa técnicas de cambio de esquema online. No reescribas porque “Postgres está lento” mientras estás reteniendo locks.

12) Comprobar queries lentas y escoger los mayores culpables

cr0x@server:~$ psql -U postgres -d appdb -c "select calls, mean_exec_time, rows, left(query,120) as q from pg_stat_statements order by mean_exec_time desc limit 5;"
 calls | mean_exec_time | rows | q
-------+----------------+------+------------------------------------------------------------
   412 |         982.14 |   12 | SELECT * FROM orders WHERE customer_id = $1 ORDER BY created_at DESC LIMIT 50
   201 |         744.33 |    1 | SELECT balance FROM accounts WHERE id = $1 FOR UPDATE

Qué significa: Tienes objetivos concretos: añadir índices, cambiar la forma de la consulta, reducir bloqueos. Esto suele ser más barato que reescribir.

Decisión: Arregla las queries calientes primero. Si aún quieres reescribir, al menos traslada las lecciones de las queries para que el nuevo sistema no las repita.

13) Validar lag de replicación antes de un corte

cr0x@server:~$ mysql -e "SHOW SLAVE STATUS\G" | egrep -i 'Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running'
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 43

Qué significa: El lag de replicación significa que tu “lectura desde el nuevo sistema” podría estar desactualizada. Esto puede romper expectativas de usuarios durante la migración.

Decisión: O aceptas explicitamente la desactualización (y la diseñas) o no cortes lecturas hasta que el lag sea consistentemente bajo.

14) Detectar cambios en tasa de errores durante un canary

cr0x@server:~$ kubectl -n payments logs deploy/payments-api --since=5m | egrep -c " 5[0-9][0-9] "
27

Qué significa: Un conteo de 5xx en aumento tras un deploy es un fallo de canario hasta que se demuestre lo contrario.

Decisión: Revierte rápido y luego depura con traces y comprobaciones de dependencias. No “empujes” porque la hoja de ruta de la reescritura lo exige.

15) Confirmar que hay suficientes descriptores de archivo bajo carga

cr0x@server:~$ ulimit -n
1024
cr0x@server:~$ cat /proc/$(pgrep -n nginx)/limits | egrep -i "open files"
Max open files            1024                 1024                 files

Qué significa: 1024 FDs suele ser demasiado bajo para proxies/servicios con mucho tráfico. Puedes obtener fallos de conexión que parecen “la nueva app es inestable”.

Decisión: Aumenta límites, verifica ajustes del runtime de contenedores y vuelve a probar. Otra vez: arregla lo fundamental antes de rediseñar el universo.

Guía de diagnóstico rápido: qué revisar primero/segundo/tercero

Este es el procedimiento cuando alguien afirma “el sistema legacy es el cuello de botella” o “la reescritura será más rápida”. Puedes realizar esto en menos de una hora en un incidente en vivo (con cuidado) o en un entorno staging con carga parecida a producción.

Primero: ¿es saturación, errores o latencia de dependencias?

  • Comprueba tasas de error (picos 5xx/4xx, timeouts). Si los errores subieron, el rendimiento puede ser síntoma de un fallo parcial.
  • Comprueba saturación: CPU iowait, await de disco, retransmisiones de red, conexiones DB, pools de hilos.
  • Comprueba salud de dependencias: DB, cache, broker de mensajes, APIs externas, DNS, expiración de certificados.

Objetivo: clasificar el problema: bounded por cómputo, I/O, bloqueo, red o fallo de dependencia.

Segundo: Encuentra el bucle ajustado en la ruta de la petición

  • Escoge un endpoint visible por el usuario (mayor tráfico o mayor latencia).
  • Trázalo end-to-end (tracing distribuido si está disponible; si no, correlación de logs con IDs de petición).
  • Mide tiempo en: CPU app, consulta DB, cache, upstream, serialización, reintentos.

Objetivo: identificar dónde se va el tiempo, no dónde parece ir.

Tercero: Valida con un experimento controlado

  • Haz un solo cambio (índice, TTL de cache, tamaño de pool de conexiones, límite de CPU).
  • Canarízalo a una pequeña fracción de tráfico.
  • Compara: percentiles de latencia, tasas de error, métricas de saturación.

Objetivo: decisiones basadas en evidencia. Si la propuesta de reescritura no aguanta este nivel de escrutinio, es un proyecto de moral, no de ingeniería.

Errores comunes: síntomas → causa raíz → solución

“Reescribimos y la latencia empeoró”

Síntomas: p95/p99 de latencia aumentó, CPU bien, dashboards muestran más llamadas de red.

Causa raíz: Descomponiste en servicios sin presupuesto de latencia, convirtiendo llamadas en proceso en cadenas RPC. Construiste un monolito distribuido.

Solución: Colapsa límites chatty, agrupa llamadas, introduce cache local y aplica presupuestos por salto. Prefiere APIs de grano grueso sobre límites microservicio “puros”.

“El cutover funcionó y luego apareció deriva de datos”

Síntomas: Los informes no coinciden, saldos difieren, clientes ven estados inconsistentes días después.

Causa raíz: Dual-write sin semántica exactly-once; falta reconciliación; eventos fuera de orden; reglas inconsistentes de zona horaria/redondeo.

Solución: Implementa jobs de reconciliación y chequeos de invariantes; usa claves de idempotencia; define fuente autoritativa por campo; adopta CDC con garantías de orden cuando sea posible.

“El nuevo sistema es estable, pero on-call es peor”

Síntomas: Más alertas, depuración más difícil, más unknown unknowns.

Causa raíz: Observabilidad y runbooks fueron pospuestos; las alertas se basan en métricas crudas en lugar de señales de impacto al usuario; falta tracing.

Solución: Instrumenta las señales doradas (latencia, tráfico, errores, saturación). Añade tracing. Reescribe alertas para que sean basadas en síntomas y vinculadas a SLOs.

“No podemos entregar porque perseguimos paridad para siempre”

Síntomas: El proyecto de reescritura corre por trimestres/años, el negocio sigue añadiendo funciones al legacy, la reescritura nunca alcanza.

Causa raíz: Mentalidad big-bang; no hay cortes incrementales; el equipo de reescritura aislado de prioridades reales del producto.

Solución: Patrón strangler con slices verticales delgados. Mueve un flujo de trabajo end-to-end. Congela algunas funciones legacy o redirige nuevas funciones solo al camino nuevo.

“Reemplazamos el esquema de la base de datos y todo empeoró”

Síntomas: Queries lentas, contención de locks, ventanas de migración que se expanden, rollbacks riesgosos.

Causa raíz: El rediseño del esquema ignoró patrones de acceso y restricciones operativas; índices faltantes; migraciones no acotadas.

Solución: Empieza con perfilado de queries y estrategia de índices. Usa migraciones online, backfills y constraints por fases. Mantén el esquema antiguo como capa adaptadora cuando sea necesario.

“Reescribimos para mejorar seguridad e introdujimos nuevas brechas”

Síntomas: Falta de rastros de auditoría, controles de autorización más débiles, proliferación de secretos.

Causa raíz: Los controles de seguridad eran implícitos en el legacy y no fueron modelados; el nuevo stack se lanzó sin modelado de amenazas.

Solución: Inventaría las invariantes de seguridad (reglas de authz, logging, retención). Añade checks automáticos en CI. Usa privilegios mínimos y gestión centralizada de secretos desde el día uno.

Listas de comprobación / plan paso a paso

Checklist de decisión: ¿deberías reescribir en absoluto?

  1. ¿Puedes nombrar el cuello de botella? Si no, haz mediciones primero (ver tareas y guía de diagnóstico).
  2. ¿El problema es mantenibilidad del código o comportamiento del sistema? Si los incidentes son mayormente de capacidad/dependencia, reescribir el código no ayudará.
  3. ¿Existe un contrato estable? Si la interfaz es inestable, fíjala antes de mover los internos.
  4. ¿Hay un plan de datos? Si no puedes articular dual-write/CDC, reconciliación y reversión, no estás listo.
  5. ¿Tienes madurez operativa? Dashboards, alertas, tracing, runbooks, despliegues por fases. Si no, construye eso primero.
  6. ¿Puedes disponer de personal para dos sistemas? Si no, haz reemplazo incremental, no reescrituras paralelas.

Un plan de modernización más seguro (funciona incluso con tiempo limitado)

  1. Inventaria las invariantes: idempotencia, reglas de corrección, retención, authz, códigos de error, límites de tasa.
  2. Instrumenta el sistema legacy si está ciego: añade request IDs, histogramas de latencia, taxonomías de error.
  3. Pon una capa de enrutamiento adelante: gateway/proxy que pueda dividir tráfico y revertir al instante.
  4. Escoge una porción vertical: un flujo de trabajo que entregue valor real y ejercite dependencias reales.
  5. Shadow primero: el sistema nuevo calcula respuestas y registra discrepancias, pero no las sirve.
  6. Canary: 1% de tráfico, luego 5%, luego 25%, midiendo SLOs e invariantes.
  7. Corta caminos de lectura con cuidado: las lecturas desactualizadas son visibles para el usuario. Usa presupuestos de consistencia y comportamiento claro.
  8. Corta las escrituras al final: asegúrate de que idempotencia, reintentos y reconciliación estén probados.
  9. Desmantela en fragmentos: elimina endpoints legacy a medida que drenan a cero tráfico; mantiene rutas de acceso de archivo para auditoría.

Checklist de lanzamiento para un componente migrado

  • SLO definido; dashboards muestran señales doradas.
  • Alertas ajustadas; on-call tiene runbooks e instrucciones de reversión.
  • Capacidad probada con una forma de carga similar a producción.
  • Timeouts y reintentos de dependencias configurados (con presupuestos).
  • Idempotencia implementada para operaciones inseguras.
  • Jobs de reconciliación de datos en marcha; proceso de triage para discrepancias definido.
  • Controles de seguridad validados: paridad de authz, logs de auditoría, retención.
  • Game day realizado: fallo de dependencia, DB lenta, deploy parcial, reversión.

Preguntas frecuentes

1) ¿Cuándo está realmente justificada una reescritura?

Cuando el sistema actual no puede evolucionar de forma segura: runtime sin soporte con riesgo de seguridad no parcheable, restricciones de licencia o una arquitectura que bloquea requisitos críticos del negocio. Incluso entonces, prefiere reemplazo incremental detrás de interfaces estables.

2) ¿No es la migración incremental más lenta que reescribir?

La incremental parece más lenta porque es honesta sobre operar dos realidades. Las grandes reescrituras parecen rápidas hasta que llega la integración, los datos y las operaciones—entonces el tiempo explota. La migración incremental gana al entregar valor temprano y reducir riesgo existencial.

3) Tenemos código de pésima calidad. ¿No exige eso una reescritura?

El código malo exige límites, pruebas alrededor de invariantes y visibilidad operativa. A menudo puedes aislar los módulos peores y reemplazarlos detrás de una interfaz. Una reescritura completa reinicia la calidad de código a “desconocida”, lo cual no es automáticamente mejor.

4) ¿Cómo evitamos “dos sistemas para siempre”?

Migrando en porciones que retiren completamente responsabilidades legacy. No construyas un sistema paralelo que duplique todo antes de lanzar. Enruta tráfico, corta una porción y luego borra la porción legacy. La eliminación es un hito.

5) ¿Cuál es el mayor riesgo oculto en las reescrituras?

La deriva semántica: el nuevo sistema se comporta diferente bajo reintentos, fallos parciales y entradas extrañas. Los usuarios no crean tickets por “deriva semántica”. Crean tickets por dinero perdido, datos incorrectos y “tu API es inestable”.

6) ¿La arquitectura de microservicios requiere una reescritura?

No. Puedes extraer servicios de un monolito con el tiempo. El primer paso suele ser crear límites modulares internos y extraer un dominio con propiedad clara y contratos de datos.

7) ¿Cómo manejamos la migración de datos sin tiempo de inactividad?

Usa CDC o dual-write, luego reconcilia. Corta lecturas cuando la desactualización sea aceptable o esté mitigada; corta escrituras al final con idempotencia fuerte. Ten siempre una ruta de reversión y un plan para backfills.

8) ¿Qué debe medir el liderazgo para saber que la migración es saludable?

No puntos de historia. Mide cumplimiento de SLO, tasa de incidentes, frecuencia de reversión, tiempo para detectar/recuperar y progreso de migración en superficie legacy retirada (endpoints/flujos eliminados).

9) ¿Cómo evitamos que los ingenieros «se vuelvan locos» queriendo reescribirlo todo?

Define una porción vertical delgada que llegue a producción y exige que cada expansión incluya un plan de salida para la ruta legacy equivalente. Premia la eliminación y la estabilidad operativa, no la novedad.

Siguientes pasos que puedes entregar este trimestre

Si estás en una reunión donde alguien propone una reescritura como panacea, esto es lo que haces en su lugar—prácticamente, sin drama:

  1. Ejecuta la guía de diagnóstico rápido y publica la clasificación del cuello de botella. Saca el debate del ámbito estético.
  2. Escribe las invariantes (idempotencia, corrección, presupuestos de latencia, reglas de authz). Hazlas revisables y testeables.
  3. Escoge un flujo de trabajo y migralo usando enrutamiento + canary + reversión. Demuestra que puedes mover slices con seguridad.
  4. Invierte en paridad operativa: dashboards, tracing, higiene de alertas, runbooks. Haz que sea más fácil ejecutar sistemas que discutirlos.
  5. Convierte la reconciliación de datos en una característica de producto, no en una misión secundaria. Si no puedes probar la corrección de datos, no tienes corrección.

La mentira de reescribir desde cero sobrevive porque ofrece una historia donde la complejidad desaparece. En sistemas reales, la complejidad no desaparece; se mueve. Tu trabajo es moverla a lugares donde sea medible, controlable y aburrida. Lo aburrido está subestimado. Lo aburrido entrega.

Panel de control de NVIDIA desaparecido: recupéralo sin conjeturas

Haces clic derecho en el escritorio para cambiar una opción y… nada. No aparece el Panel de control de NVIDIA. La GPU está claramente presente, los juegos funcionan, los ventiladores giran y, aun así, la única interfaz que necesitas ha desaparecido como si hubiese tenido una reunión incómoda.

Este problema hace perder tiempo porque la gente lo trata como una superstición de “reinstala el driver”. No lo hagas. Trátalo como un incidente: confirma el modelo de controlador, verifica los servicios, valida el paquete de la app y luego elige la solución más pequeña que devuelva el control.

Guía de diagnóstico rápido (primero/segundo/tercero)

Cuando el Panel de control de NVIDIA “desaparece”, el cuello de botella suele ser una de tres cosas: la variante de controlador equivocada (DCH vs Standard), un paquete de la app roto (Store/UWP) o un servicio NVIDIA Display Container muerto. Puedes identificar cuál es en minutos.

Primero: establece qué estás ejecutando (hardware, modelo de driver, sesión)

  • ¿Estás en un portátil con gráficos híbridos? Si el panel interno lo controla la iGPU, las opciones del Panel de control de NVIDIA pueden estar limitadas o reubicadas.
  • ¿Estás con drivers DCH? Si es así, el Control Panel a menudo se entrega como un paquete de Microsoft Store; puede desaparecer independientemente del driver.
  • ¿Estás en RDP/VM? Las sesiones remotas y las máquinas virtuales pueden ocultar la interfaz o presentar un adaptador distinto.

Segundo: comprueba el servicio que aloja la interfaz

  • NVIDIA Display Container LS es el culpable habitual. Si está detenido/deshabilitado, el Panel de control puede no aparecer en el menú contextual ni iniciarse correctamente.

Tercero: verifica el registro de la app (paquete de la Tienda / ejecutable)

  • Si DCH: confirma que el paquete NVIDIA Control Panel existe para tu usuario y no está en un estado roto.
  • Si Standard: confirma que nvcplui.exe existe y puede iniciarse.

Sólo después de esos pasos deberías golpear con la solución drástica (DDU, reinstalación completa). La mayoría de las veces puedes arreglar esto sin desmoronar tu pila de drivers.

Datos y contexto interesantes (por qué sigue ocurriendo)

Parte de este lío es histórico. Otra parte es por la actual arquitectura de apps de Windows. En cualquier caso, diagnosticarás más rápido si conoces la forma del sistema que estás analizando.

  1. Los drivers DCH cambiaron la mecánica de distribución. Con DCH (Declarative, Componentized, Hardware Support Apps), los proveedores pueden enviar partes de su interfaz como apps separadas en lugar de incrustarlo todo en el instalador del driver.
  2. El Panel de control de NVIDIA puede ser una app “HSA” entregada por la Tienda. En muchos sistemas el panel es un paquete AppX; Windows puede actualizarlo o eliminarlo independientemente del driver de GPU.
  3. El menú contextual al hacer clic derecho no es una garantía. Los shells de Windows y los manejadores del menú contextual varían según la política, la compilación y si el Explorador se reinicia correctamente.
  4. Las imágenes OEM a menudo fijan una rama de drivers específica. Los fabricantes de portátiles a veces personalizan archivos INF y empaquetan utilidades; cambiar a un driver genérico puede dejar piezas de la interfaz huérfanas.
  5. NVIDIA solía incluir más componentes de bandeja y UI “siempre activos”. Con el tiempo, los proveedores han reducido el impacto al inicio. Eso está bien hasta que el servicio que une la UI con el estado del driver queda deshabilitado.
  6. Microsoft endureció la separación entre driver y UI por seguridad y mantenimiento. El enfoque “componentizado” mejora la fiabilidad de las actualizaciones en teoría, pero da más piezas móviles que pueden fallar en la práctica.
  7. La política puede bloquear la Tienda y AppX. En entornos corporativos, las apps de la Tienda pueden estar restringidas, provocando que la UI DCH desaparezca mientras el driver sigue funcionando.
  8. El escritorio remoto puede engañarte. Las sesiones RDP pueden presentar una ruta de controlador de pantalla diferente; puedes estar diagnosticando el protocolo remoto en lugar de la pila de GPU.
  9. Las actualizaciones de Windows a veces reemplazan drivers. Una actualización de funciones puede cambiar tu paquete NVIDIA a una rama distinta, dejando el Panel de control fuera de sincronía o eliminado.

Qué significa realmente “desaparecido” (modos de fallo)

“Panel de control de NVIDIA desaparecido” es un síntoma, no un diagnóstico. En términos de operaciones, es una alerta sin etiquetas. Aquí están los modos de falla reales que verás en el campo:

1) La app de la interfaz no está instalada (o está instalada para otro usuario)

Común con drivers DCH. El driver está presente, nvidia-smi funciona, pero el paquete del Panel de control no está instalado para tu perfil de usuario actual, o falta por completo.

2) La app está instalada pero rota (registro AppX o problema de dependencias)

Los paquetes de la Tienda pueden quedar en un estado extraño tras una migración de perfil, herramientas de “limpieza” o políticas empresariales. El paquete existe pero no se abre, o se abre y se cierra inmediatamente.

3) El servicio anfitrión está detenido/deshabilitado

El Panel de control depende de servicios y tareas programadas. Si NVDisplay.ContainerLocalSystem está detenido o deshabilitado, la integración de la UI suele desaparecer.

4) En realidad no estás usando la GPU NVIDIA para la ruta de pantalla

En portátiles Optimus/híbridos, la iGPU puede manejar el panel mientras NVIDIA hace offload de cómputo/render. Algunas opciones se mueven, desaparecen o requieren usar la GPU NVIDIA como salida de pantalla principal.

5) La instalación del driver es parcial o está corrupta

Este es el estado clásico de “más o menos funciona”: el dispositivo aparece, pero faltan componentes clave. Frecuentemente causado por actualizaciones interrumpidas, herramientas de limpieza que eliminan elementos del driver store o mezclar paquetes OEM y genéricos.

6) Expectativas equivocadas: menú contextual de Windows 11 y extensiones del shell

Aun cuando todo está instalado correctamente, el Windows 11 puede ocultar entradas legacy bajo “Mostrar más opciones”, o las políticas pueden eliminar manejadores.

Una verdad seca desde la ingeniería de fiabilidad aplica: “Si no puedes medirlo, no puedes arreglarlo.” Eso es una idea parafraseada a menudo atribuida a W. Edwards Deming. Así que medimos: servicios, paquetes, drivers y políticas.

Broma #1: El Panel de control de NVIDIA no “desaparece”. Sólo lo ascienden a la gerencia intermedia donde nadie lo encuentra.

Tareas prácticas: comandos, salidas, decisiones

Estas son tareas reales que puedes ejecutar en Windows. Cada una incluye: un comando, lo que significa una salida plausible y la decisión que tomas a continuación. Ejecuta PowerShell como Administrador salvo que se indique lo contrario.

Tarea 1: Confirma compilación y edición de Windows (las políticas de la Tienda importan)

cr0x@server:~$ powershell -NoProfile -Command "Get-ComputerInfo | Select-Object WindowsProductName,WindowsVersion,OsBuildNumber"
WindowsProductName WindowsVersion OsBuildNumber
----------------- -------------- -------------
Windows 11 Pro     23H2           22631

Qué significa: Estás en Windows 11 Pro 23H2. El comportamiento de la Tienda y AppX difiere entre compilaciones; la política empresarial es común en Pro/Enterprise.

Decisión: Mantén “DCH + app de la Tienda” como sospecha principal. Si esto es Enterprise, asume restricciones de la Tienda hasta demostrar lo contrario.

Tarea 2: Verifica que la GPU NVIDIA esté presente y el driver instalado

cr0x@server:~$ powershell -NoProfile -Command "Get-PnpDevice -Class Display | Format-Table -AutoSize Status,FriendlyName,InstanceId"
Status FriendlyName                      InstanceId
------ ------------                      ----------
OK     NVIDIA GeForce RTX 3070 Laptop GPU PCI\VEN_10DE&DEV_24DD&SUBSYS_...
OK     Intel(R) Iris(R) Xe Graphics      PCI\VEN_8086&DEV_9A49&SUBSYS_...

Qué significa: Gráficos híbridos. Si la pantalla interna la maneja la iGPU, algunas opciones del Panel de control de NVIDIA pueden estar limitadas.

Decisión: No persigas aún “opciones desaparecidas” como si fuera una “app falta”. Primero confirma si la app falta o simplemente no está expuesta en el shell.

Tarea 3: Comprueba la fecha/versión del driver desde Windows

cr0x@server:~$ powershell -NoProfile -Command "Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.DeviceClass -eq 'DISPLAY' -and $_.Manufacturer -match 'NVIDIA'} | Select-Object DeviceName,DriverVersion,DriverDate | Format-Table -AutoSize"
DeviceName                         DriverVersion DriverDate
----------                         ------------- ----------
NVIDIA GeForce RTX 3070 Laptop GPU 31.0.15.5176  2024-01-15

Qué significa: Driver instalado y reconocido por Windows.

Decisión: Si falta el Panel de control, probablemente sea por empaquetado/servicio/shell y no por “sin driver”.

Tarea 4: Confirma que los servicios NVIDIA están presentes y en ejecución

cr0x@server:~$ powershell -NoProfile -Command "Get-Service *NVIDIA* | Sort-Object Status,Name | Format-Table -AutoSize Name,Status,StartType"
Name                         Status  StartType
----                         ------  ---------
NVDisplay.ContainerLocalSystem Stopped Automatic
NVIDIAFrameViewSDKService     Running Manual
NvContainerLocalSystem        Running Automatic

Qué significa: El servicio Display Container está detenido. Eso es una señal de alarma para la integración del Panel de control.

Decisión: Inícialo y vuelve a probar el Panel de control. Si no arranca, extrae los logs a continuación.

Tarea 5: Inicia el servicio Display Container (victoria rápida)

cr0x@server:~$ powershell -NoProfile -Command "Start-Service NVDisplay.ContainerLocalSystem; Get-Service NVDisplay.ContainerLocalSystem | Format-List Status,StartType"
Status    : Running
StartType : Automatic

Qué significa: El servicio arranca correctamente.

Decisión: Cierra sesión/abre sesión o reinicia Explorer; luego comprueba el menú contextual del escritorio y el menú Inicio para el Panel de control de NVIDIA.

Tarea 6: Si no arranca, extrae el error del registro de eventos del Sistema

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -FilterHashtable @{LogName='System'; StartTime=(Get-Date).AddHours(-2)} | Where-Object {$_.Message -match 'NVDisplay.Container'} | Select-Object -First 3 TimeCreated,Id,LevelDisplayName,Message | Format-List"
TimeCreated      : 2/4/2026 8:12:44 AM
Id               : 7000
LevelDisplayName : Error
Message          : The NVDisplay.ContainerLocalSystem service failed to start due to the following error: The system cannot find the file specified.

Qué significa: El servicio apunta a un binario faltante. Esto es una instalación rota o una herramienta de limpieza demasiado agresiva.

Decisión: Deja de intentar “alternar” servicios. Pasa a reparar/reinstalar el paquete del driver de forma limpia.

Tarea 7: Determina si el Panel de control está instalado como paquete AppX (ruta DCH)

cr0x@server:~$ powershell -NoProfile -Command "Get-AppxPackage -Name *NVIDIACorp.NVIDIAControlPanel* | Select-Object Name,Version,Status,PackageFullName"
Name                             Version      Status PackageFullName
----                             -------      ------ ---------------
NVIDIACorp.NVIDIAControlPanel    8.1.962.0    Ok     NVIDIACorp.NVIDIAControlPanel_8.1.962.0_x64__56jybvy8sckqj

Qué significa: El paquete de la app está instalado y sano.

Decisión: Si sigue “desaparecido”, probablemente estés tratando con problemas del shell/menú contextual o un problema en la ruta de lanzamiento.

Tarea 8: Si el paquete AppX falta, confirma que la Tienda está bloqueada por política

cr0x@server:~$ powershell -NoProfile -Command "reg query HKLM\SOFTWARE\Policies\Microsoft\WindowsStore /v RemoveWindowsStore"
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsStore
    RemoveWindowsStore    REG_DWORD    0x1

Qué significa: La Tienda está deshabilitada por política. En sistemas DCH, eso suele equivaler a “no hay Panel de control”.

Decisión: O (a) obtén una excepción de política para la app NVIDIA Control Panel, o (b) cambia a una estrategia de paquete de drivers que incluya la UI sin dependencia de la Tienda (a menudo OEM o non-DCH/Standard donde esté soportado).

Tarea 9: Lanza el Panel de control de NVIDIA directamente (funciona incluso cuando los menús no)

cr0x@server:~$ powershell -NoProfile -Command "Start-Process shell:AppsFolder\\NVIDIACorp.NVIDIAControlPanel_56jybvy8sckqj!NVIDIACorp.NVIDIAControlPanel"

Qué significa: Si el Panel de control se abre, la app está bien; tu problema es de descubribilidad (menú contextual/Inicio/índice de búsqueda), no de instalación.

Decisión: Arregla la integración del shell (reinicio de Explorer, ajustes de menú contextual, salud del servicio) en lugar de reinstalar todo.

Tarea 10: Reinicia Explorer para restaurar los manejadores del menú contextual

cr0x@server:~$ powershell -NoProfile -Command "Stop-Process -Name explorer -Force; Start-Process explorer.exe"

Qué significa: Explorer se reinicia. Esto suele restaurar las entradas del clic derecho tras una actualización de servicio/app.

Decisión: Si el Panel de control reaparece, has confirmado un problema de refresco del shell. Si no, sigue diagnosticando servicios y paquetes.

Tarea 11: Comprueba el ejecutable clásico en drivers Standard

cr0x@server:~$ powershell -NoProfile -Command "Test-Path 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe'; Get-Item 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe' -ErrorAction SilentlyContinue | Select-Object FullName,Length,LastWriteTime"
True

FullName                                                       Length LastWriteTime
--------                                                       ------ -------------
C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe  708512 1/15/2024 6:34:10 PM

Qué significa: El ejecutable existe. Si la app “falta”, probablemente sea un problema de acceso directo/menú contextual, no del binario.

Decisión: Intenta iniciarlo; si falla, inspecciona el estado de dependencias/servicios.

Tarea 12: Inicia el ejecutable directamente (ruta Standard)

cr0x@server:~$ powershell -NoProfile -Command "& 'C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe'"

Qué significa: Si se abre, puedes crear un acceso directo en el menú Inicio y dejar de perder la tarde.

Decisión: Restaura la descubribilidad (accesos directos, menú contextual) en lugar de reinstalar.

Tarea 13: Verifica el registro del menú contextual del Panel de control (chequeo de cordura)

cr0x@server:~$ powershell -NoProfile -Command "reg query 'HKCR\Directory\Background\shellex\ContextMenuHandlers' | findstr /i nvidia"
{0BB76A54-...}
NvCplDesktopContext

Qué significa: El manejador existe. Si la entrada del menú sigue ausente, Windows 11 puede estar ocultándola bajo “Mostrar más opciones”, o Explorer necesita un refresco.

Decisión: Prueba el menú contextual clásico; considera conflictos con extensiones del shell; reinicia Explorer.

Tarea 14: Confirma que el driver NVIDIA funciona vía nvidia-smi

cr0x@server:~$ nvidia-smi
Tue Feb  4 09:10:12 2026
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 551.76       Driver Version: 551.76       CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------|
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
|  0  RTX 3070 ... Off          | 00000000:01:00.0  On |                  N/A |
+-------------------------------+----------------------+----------------------+

Qué significa: El driver está cargado y funciona al menos lo suficiente para consultas de gestión.

Decisión: Enfócate en la entrega de la UI (AppX/servicio/shell) en lugar de la detección de la GPU.

Tarea 15: Audita instalaciones/actualizaciones de drivers recientes (quién cambió qué)

cr0x@server:~$ powershell -NoProfile -Command "Get-WinEvent -LogName 'Microsoft-Windows-DriverFrameworks-UserMode/Operational' -MaxEvents 20 | Select-Object TimeCreated,Id,Message | Format-Table -AutoSize"
TimeCreated           Id Message
-----------           -- -------
2/3/2026 6:44:18 PM 2003 Driver package added: oem86.inf
2/3/2026 6:44:21 PM 2004 Driver package installed for device PCI\VEN_10DE...

Qué significa: Algo cambió recientemente y quedó registrado. Bien.

Decisión: Si el Panel de control desapareció justo después, asume un cambio de variante de driver (DCH/Standard u OEM/genérico) o una actualización parcial.

Tarea 16: Comprueba lo básico de salud del disco (sí, de verdad)

cr0x@server:~$ powershell -NoProfile -Command "Get-PhysicalDisk | Select-Object FriendlyName,HealthStatus,OperationalStatus | Format-Table -AutoSize"
FriendlyName      HealthStatus OperationalStatus
------------      ------------ -----------------
NVMe Samsung 980  Healthy      OK

Qué significa: El almacenamiento no está fallando de forma evidente.

Decisión: Si el disco estuviera malo, “archivos faltantes” podría ser literal. No ignores el sustrato.

Broma #2: “¿Lo has apagado y encendido?” es gracioso hasta que lo haces y funciona, y ahora le debes una disculpa al universo.

Tres mini-historias corporativas desde el terreno

Mini-historia 1: El incidente causado por una suposición equivocada

La situación: un equipo de diseño con portátiles Windows 11 usando pantallas externas. De la noche a la mañana, varios usuarios reportaron que el Panel de control de NVIDIA había desaparecido y los perfiles de color dejaron de comportarse como su flujo de trabajo de calibración esperaba. El help desk hizo lo que hacen: reinstalaron drivers. A la mitad de las máquinas les fue mejor. A la otra mitad les fue peor.

La suposición equivocada fue simple: “El Panel de control forma parte del driver.” En esos portátiles, IT había pasado a drivers DCH meses antes para simplificar despliegues. La UI venía de un paquete AppX, y el acceso a la Tienda de la empresa estaba bloqueado más que el proceso presupuestario.

¿Qué pasó? Windows Update entregó una actualización de driver. El driver se instaló bien. Pero la app NVIDIA Control Panel no pudo reinstalarse o actualizarse porque la Tienda estaba bloqueada y la canalización de aprovisionamiento AppX no estaba configurada para esa app. Los usuarios no perdieron la aceleración GPU: perdieron la UI que controlaba los diales que les importaban.

La solución no fue reinstalar drivers. La solución fue política y empaquetado: permitieron la ruta de despliegue para ese paquete específico y lo aprovisionaron para todos los usuarios en las máquinas. Luego lo documentaron como adultos, incluyendo una verificación que confirmaba la existencia del paquete AppX.

Tras el incidente, el equipo dejó de tratar “Panel de control desaparecido” como una falla de driver y empezó a tratarlo como una falla de entrega. El tiempo medio de reparación cayó y el help desk dejó de jugar a la ruleta con reinstaladores.

Mini-historia 2: La optimización que salió mal

Un departamento financiero se quejó de que los portátiles eran “lentos al iniciar sesión”. Alguien se puso ambicioso y creó una GPO de “optimización de inicio”: deshabilitar servicios no esenciales, reducir apps en bandeja y restringir tareas en segundo plano. Funcionó: los inicios fueron visiblemente más rápidos.

Dos semanas después, los equipos de ingeniería comenzaron a reportar que el Panel de control de NVIDIA había desaparecido y las entradas del menú contextual relacionadas con la GPU habían desaparecido. Algunas máquinas también perdieron la persistencia de configuraciones de pantalla entre reinicios. Los sistemas seguían teniendo drivers NVIDIA. nvidia-smi seguía funcionando. Eso hizo que las quejas fueran más difíciles de tomar en serio hasta que algunas personas perdieron horas por escalado de monitores externos roto.

La causa raíz: la política había deshabilitado NVDisplay.ContainerLocalSystem. Alguien vio “container” y asumió que era algo moderno, opcional y probablemente en la nube. Esa suposición debe estar en un museo de malas ideas.

Rehabilitar el servicio solucionó el problema inmediatamente en los endpoints afectados. La “optimización” se revirtió y se reemplazó por una lista curada que mantenía los servicios críticos del proveedor habilitados. La lección final fue simple pero valiosa: el tuning de rendimiento de Windows no es un buffet gratuito. Si no sabes qué hace un servicio, no lo deshabilites en dispositivos de producción.

Mini-historia 3: La práctica correcta y aburrida que salvó el día

Un estudio de VFX ejecutaba una imagen estándar en estaciones de trabajo para múltiples equipos. Su responsable de IT era alérgico a los “cambios misteriosos”, así que mantenían una línea base de drivers por modelo de hardware, fijada por device ID y validada trimestralmente. También tenían un pequeño script que verificaba: dispositivo NVIDIA presente, Display Container en ejecución, paquete Control Panel instalado (cuando aplicable) y un método de lanzamiento conocido bueno.

Un lunes, tras una ola de actualizaciones de funciones de Windows, algunas máquinas perdieron el Panel de control de NVIDIA. Empezó el pánico habitual. Pero las comprobaciones de la línea base del estudio se ejecutaron al iniciar sesión y marcaron exactamente la falla: el paquete AppX faltaba para los perfiles de usuario creados después de la actualización.

No reinstalaron drivers. No limpiaron máquinas. Aprovisionaron la app para todos los usuarios y la registraron de nuevo para los perfiles afectados. El problema desapareció antes del almuerzo y los artistas volvieron a discutir sobre el desenfoque de lente en lugar de las UIs de drivers.

La “práctica aburrida” fue simplemente tratar los endpoints como una flota: líneas base fijadas, pequeñas comprobaciones de salud y rutas de recuperación documentadas. No es glamoroso. Es lo que mantiene las luces encendidas.

Errores comunes: síntoma → causa raíz → solución

Esta sección existe para evitar que hagas cosas costosas por problemas baratos.

1) Síntoma: Panel de control no aparece en el menú contextual del escritorio (Windows 11)

Causa raíz: Windows 11 oculta entradas legacy del menú contextual bajo “Mostrar más opciones”, o Explorer no se refrescó tras la instalación/actualización.

Solución: Usa “Mostrar más opciones”, reinicia Explorer y lanza vía AppsFolder. Si el lanzamiento desde AppsFolder funciona, ya está arreglado.

2) Síntoma: Panel de control ausente en la búsqueda del menú Inicio

Causa raíz: AppX instalada pero índice de búsqueda no actualizado; o instalación específica por perfil de usuario ausente.

Solución: Lanza directamente (AppsFolder o nvcplui.exe), luego épinalo. Si falta para un solo usuario, vuelve a registrar AppX para ese usuario.

3) Síntoma: Panel de control se abre y luego se cierra instantáneamente

Causa raíz: Registro AppX roto, componentes desajustados tras una actualización de driver o Display Container deshabilitado.

Solución: Confirma que el servicio Display Container esté en ejecución. Si lo está, vuelve a registrar/reinstala el paquete de la app Control Panel. Si el servicio falla al iniciar por falta de archivo, haz una reinstalación limpia del driver.

4) Síntoma: Panel de control de NVIDIA está instalado, pero faltan ajustes de “Pantalla”

Causa raíz: Gráficos híbridos; la iGPU controla la ruta de pantalla (común en portátiles). El Panel de control de NVIDIA no mostrará ajustes de pantalla que no controla.

Solución: Usa ajustes de pantalla de Windows y controles de la iGPU Intel/AMD; o conecta la pantalla a un puerto cableado a la GPU NVIDIA (varía por modelo); o cambia el modo MUX en la BIOS si está soportado.

5) Síntoma: Driver presente, pero paquete de la app Control Panel no instalado y la Tienda está bloqueada

Causa raíz: La entrega de la UI DCH depende de la Tienda/AppX; la política corporativa bloquea la Tienda.

Solución: Aprovisiona la app vía despliegue AppX aprobado por la empresa o cambia la estrategia de drivers en forma controlada. No pidas a los usuarios que “simplemente usen la Tienda” si está prohibida.

6) Síntoma: Reinstalar drivers “a veces” lo arregla

Causa raíz: Estás alternando entre paquetes OEM y genéricos, o entre modelos de driver, y de vez en cuando la UI queda en un estado funcional por accidente.

Solución: Elige una ruta de paquete soportada para ese modelo de máquina. Estandariza. Valida con comprobaciones (servicios + paquete de la app + prueba de lanzamiento).

7) Síntoma: Panel de control faltante sólo por Escritorio Remoto

Causa raíz: La sesión RDP usa una ruta de controlador de pantalla diferente o política; la UI puede no exponer las mismas opciones.

Solución: Prueba localmente/en consola. Si debes gestionar de forma remota, usa métodos fuera de banda o asegúrate de que la sesión use aceleración GPU cuando corresponda.

8) Síntoma: Panel de control de NVIDIA desaparece tras utilidades de “debloat” o “limpieza”

Causa raíz: Esas herramientas eliminan paquetes AppX, servicios o tareas programadas sin entender dependencias.

Solución: Deshaz los cambios de la herramienta si es posible; restaura paquete/servicio; de lo contrario, reinstalación limpia. Luego, prohíbe la herramienta en endpoints de producción.

Listas de verificación / planes paso a paso

Plan A: La ruta mínima y sensata (arreglar sin reinstalar)

  1. Comprueba la presencia de GPU (Tarea 2). Si el dispositivo NVIDIA no está OK, no estás en territorio de “Panel de control ausente”; estás en territorio de driver/hardware.
  2. Comprueba el servicio Display Container (Tarea 4). Si está detenido, inícialo (Tarea 5). Si no arranca, captura el log de eventos (Tarea 6).
  3. Comprueba si el Panel de control es AppX (Tarea 7). Si está presente, lánzalo vía AppsFolder (Tarea 9). Si se abre, arregla la descubribilidad (Tarea 10).
  4. Si existe el ejecutable en drivers Standard (Tarea 11), lánzalo (Tarea 12) y luego fíjalo en Inicio.
  5. Vuelve a probar el síntoma: búsqueda del menú Inicio, menú clic derecho y lanzamiento directo. No declares victoria hasta poder reproducir la corrección.

Plan B: Entorno corporativo (solución consciente de políticas)

  1. Comprueba la política de la Tienda (Tarea 8). Si la Tienda está deshabilitada y estás en DCH, asume que la app UI necesita aprovisionamiento empresarial.
  2. Decide un mecanismo de entrega soportado: aprovisionar el paquete AppX para todos los usuarios, o elegir un paquete OEM soportado que incluya la UI y no dependa de la Tienda en tu entorno.
  3. Valida con una comprobación al iniciar sesión: servicio en ejecución, paquete instalado, prueba de lanzamiento. Trátalo como higiene de endpoint.
  4. Congela una línea base de drivers conocida buena por modelo y modifícala deliberadamente, no cuando Windows Update lo decida.

Plan C: Reinstalación limpia (cuando archivos/servicios estén genuinamente rotos)

  1. Confirma que la falla del servicio se debe a binarios faltantes (Tarea 6). Si es así, deja de intentar “reparar” con alternancias.
  2. Elimina paquetes conflictivos usando las rutas estándar de desinstalación. Evita mezclar instaladores OEM y genéricos a mitad del proceso.
  3. Instala un paquete de driver conocido bueno apropiado para tu hardware y entorno (DCH con aprovisionamiento de app, o Standard donde esté soportado).
  4. Verifica inmediatamente: servicio en ejecución, lanzamiento del Panel de control, aparición en el menú contextual y persistencia de ajustes tras reiniciar.

Lista operativa: qué documentar para la próxima vez

  • Rama y versión de driver que funciona para este modelo de máquina.
  • Si el sistema usa DCH y por tanto necesita aprovisionamiento AppX.
  • Servicios requeridos (especialmente NVDisplay.ContainerLocalSystem) y sus tipos de inicio.
  • Método de lanzamiento conocido bueno (comando AppsFolder o ruta nvcplui.exe).
  • Notas sobre limitaciones de gráficos híbridos (qué puerto está cableado a qué GPU, comportamiento MUX en BIOS).

Preguntas frecuentes (FAQ)

¿Por qué desapareció el Panel de control de NVIDIA después de una actualización de driver?

Porque el driver y la UI pueden entregarse por separado (especialmente con DCH). El driver se actualizó; la app UI no lo hizo, fue removida o no pudo instalarse por políticas.

¿Ahora el Panel de control de NVIDIA es una app de Microsoft Store?

En muchas instalaciones DCH, sí: es un paquete AppX (a menudo de NVIDIA Corporation). Eso facilita las actualizaciones, y también que se rompa en entornos restringidos.

No puedo usar Microsoft Store en mi PC de trabajo. ¿Cómo recupero el Panel de control?

Primero confirma que la Tienda está bloqueada por política (Tarea 8). Luego necesitas una forma aprobada por la empresa para aprovisionar el paquete AppX del NVIDIA Control Panel, o un paquete de driver/UI soportado para tu flota. “Iniciar sesión con una cuenta personal” no es una solución; es un problema de cumplimiento.

La app está instalada pero no aparece en el menú contextual. ¿Está rota?

No necesariamente. Windows 11 puede ocultar la entrada bajo “Mostrar más opciones”, y Explorer puede no refrescar las extensiones del shell tras actualizaciones. Reinicia Explorer (Tarea 10) e intenta iniciar directamente (Tarea 9 o Tarea 12).

¿Por qué faltan los ajustes de “Pantalla” dentro del Panel de control de NVIDIA?

En muchos portátiles la iGPU maneja la pantalla integrada. NVIDIA puede no controlar el pipeline de pantalla, por lo que no mostrará ajustes de pantalla que no puede imponer. Eso es normal, no una falla.

¿Cuál es el único servicio que debería revisar primero?

NVDisplay.ContainerLocalSystem (a menudo mostrado como NVIDIA Display Container LS). Si está detenido o deshabilitado, la integración de la UI tiende a desaparecer.

¿Puedo simplemente copiar nvcplui.exe desde otra máquina?

Puedes, pero no deberías. El Panel de control está acoplado a componentes de driver y registros. Copiar binarios crea un estado frágil y no soportado. Arréglalo con una instalación correcta o aprovisionamiento AppX.

¿GeForce Experience influye en si aparece o no el Panel de control?

GeForce Experience no es estrictamente necesario para el Panel de control, pero puede influir en rutas de instalación de drivers y selección de componentes. Si estás solucionando problemas, mantén la pila simple: driver + servicios requeridos + paquete del Panel de control.

¿Por qué todo funciona localmente pero no por RDP?

Porque RDP puede presentar una ruta gráfica distinta y puede no exponer los mismos hooks de UI. Valida localmente primero; trata el comportamiento remoto como un caso separado.

¿Qué pasa si nvidia-smi funciona pero el Panel de control no?

Normalmente eso significa que el driver está bien y el problema es la entrega de la UI (AppX faltante/roto) o la integración servicio/shell. Empieza con las Tareas 4, 7 y 9.

Conclusión: próximos pasos que funcionan

Deja de tratar la desaparición del Panel de control de NVIDIA como una historia de fantasmas. Trátalo como un sistema con componentes: driver, servicios, paquete de la app e integración del shell. Mide primero, luego cambia una cosa a la vez.

  1. Ejecuta la guía de diagnóstico rápido: dispositivo presente, Display Container en ejecución, paquete/executable de la app existe, lanzamiento directo funciona.
  2. Si el servicio está detenido, arráncalo y reinicia Explorer. Ese es el arreglo con mayor ROI.
  3. Si la Tienda está bloqueada y estás en DCH, escala a aprovisionamiento AppX adecuado o cambia a una ruta de empaquetado soportada. No luches contra la política con parches precar ios.
  4. Si las instalaciones están corruptas, realiza una reinstalación limpia—pero sólo después de haber demostrado que es necesaria.
  5. Documenta tu línea base (versión del driver, DCH/Standard, servicios requeridos, método de lanzamiento) para que la próxima vez sea aburrida y rápida.