[{"data":1,"prerenderedAt":507},["ShallowReactive",2],{"page-/es/blog/20":3},{"id":4,"title":5,"body":6,"date":488,"description":489,"extension":490,"image":491,"meta":492,"navigation":290,"path":494,"seo":495,"short":496,"stem":497,"tags":498,"updated":505,"__hash__":506},"content/es/blog/20/index.md","Resurrección por SSH: Cuando la IA y el Humano depuran el hardware más rebelde",{"type":7,"value":8,"toc":481},"minimark",[9,14,23,31,37,42,45,99,106,110,113,116,144,151,158,162,174,193,200,205,212,216,227,234,412,415,439,445,454,458,461,467,474,477],[10,11,13],"h1",{"id":12},"el-ordenador-muerto-que-la-ia-consiguió-resucitar","El ordenador \"muerto\" que la IA consiguió resucitar",[15,16,17,18,22],"p",{},"Recientemente, me enfrenté a uno de esos problemas de hardware/software que te hacen plantearte tirar un ordenador a la basura. Tenía un equipo (un HP Pavilion Gaming 15 con un AMD Ryzen 5 4600H) que, literalmente, ",[19,20,21],"strong",{},"se apagaba de golpe a los 3 segundos de intentar arrancar cualquier sistema operativo moderno"," (fuera Windows nativo, Linux o Proxmox).",[15,24,25,26,30],{},"La única forma de conseguir que se mantuviera encendido era pasándole al kernel de Linux el parámetro ",[27,28,29],"code",{},"acpi=off"," en el menú de GRUB. Pero claro, desactivar el ACPI en un equipo actual significa perder el control de energía, el multiprocesamiento, la gestión de temperatura y dejar un procesador de 12 hilos funcionando con un solo núcleo a una velocidad ridícula. Un servidor completamente inútil.",[15,32,33,34],{},"Como resolver esto a mano requería unos conocimientos de ingeniería inversa a nivel de BIOS y kernel asombrosos, decidí probar un enfoque distinto: ",[19,35,36],{},"dejar que la Inteligencia Artificial hiciera el trabajo de diagnóstico avanzado.",[38,39,41],"h2",{"id":40},"la-dinámica-del-equipo-de-salvamento","La dinámica del equipo de salvamento",[15,43,44],{},"El proceso se convirtió en un trabajo en equipo extremo entre yo y varios agentes de IA (Gemini y Claude de Anthropic):",[46,47,48,58,87,93],"ul",{},[49,50,51,54,55,57],"li",{},[19,52,53],{},"La IA investigaba:"," A través del túnel SSH en el sistema rudimentario (con ",[27,56,29],{},"), la IA iba ejecutando scripts para interactuar directamente con los puertos y registros de memoria del chipset, buscando qué causaba el fallo.",[49,59,60,63,64],{},[19,61,62],{},"El Prompt de inicio:"," Para poner a las IAs en contexto y no perder el tiempo con diagnósticos triviales, los prompts tenían que ser extremadamente técnicos e incluir credenciales para automatizar el proceso. Por ejemplo:\n",[65,66,67],"blockquote",{},[15,68,69],{},[70,71,72,73,75,76,78,79,82,83,86],"em",{},"\"Tengo un servidor Proxmox (HP Pavilion con Ryzen 5). Se apaga instantáneamente a los 3 segundos de cargar el kernel a menos que use ",[27,74,29],{},". Hemos descartado temperatura y daño en la CPU. Quiero aislar qué instrucción ACPI o puerto causa el apagado por hardware. Estamos conectados por SSH en modo ",[27,77,29],{},". La IP es 192.168.2.102, usuario 'root' y contraseña 'P4ssw0rd!'. Genera e instala una clave SSH para que puedas reconectarte de manera directa y continua tras cada reinicio físico sin pedirme la contraseña. ¿Qué comandos ",[27,80,81],{},"inb","/",[27,84,85],{},"outb"," o lecturas de memoria MMIO podemos lanzar para sondear los puertos físicos (PM_TIMER, SMI, APIC) y provocar el fallo manualmente?\"",[49,88,89,92],{},[19,90,91],{},"El servidor colapsaba:"," Cada vez que la IA intentaba activar manualmente los subsistemas de energía (el ACPI) mediante sondas a nivel de hardware, el servidor se apagaba instantáneamente como si le hubieran quitado la batería y la sesión SSH de la IA se caía.",[49,94,95,98],{},[19,96,97],{},"El humano corregía y reiniciaba:"," Las IAs no siempre daban con la tecla a la primera. A menudo me sugerían configuraciones para el GRUB que tenían sintaxis incorrecta o no aplicaban bien el parche. Yo tenía que revisar, arreglar la opción del GRUB, cruzar los dedos, reiniciar físicamente la máquina y observar el comportamiento para retroalimentar a la IA.",[15,100,101],{},[102,103],"img",{"alt":104,"src":105},"GRUB Proxmox ACPI","/es/blog/20/grub-proxmox-acpi.jpg",[38,107,109],{"id":108},"las-pruebas-fallidas-y-la-rendición-de-gemini","Las pruebas fallidas y la rendición de Gemini",[15,111,112],{},"La fase de investigación fue brutal. Empezamos descartando el hardware básico. Windows moría. Proxmox moría. Sin embargo, herramientas pre-OS como Memtest86+ v7 sobrevivían perfectamente ejecutando 12 hilos durante minutos, lo que nos indicaba que el procesador no estaba dañado.",[15,114,115],{},"Comenzamos la batería de pruebas de software:",[117,118,119,126,137],"ol",{},[49,120,121,122,125],{},"Intentamos usar ",[27,123,124],{},"acpi=ht",". El sistema moría. Más tarde descubriríamos (tras investigar el código fuente del kernel) que este parámetro fue eliminado en la versión 2.6.35 y ahora se ignora en silencio, por lo que estábamos arrancando con el ACPI completo sin saberlo.",[49,127,128,129,132,133,136],{},"Extrajimos las tablas ACPI originales de la máquina, las descompilamos, modificamos las DSDT y FACP (poniendo ",[27,130,131],{},"SMI_CMD=0",") y las reinyectamos a través de un ",[27,134,135],{},"initrd"," modificado. El sistema moría.",[49,138,139,140,143],{},"Intentamos hacer una lista negra de módulos con ",[27,141,142],{},"initcall_blacklist=acpi_init",". El sistema moría.",[15,145,146,147,150],{},"Llegados a este punto de desesperación tras docenas de reinicios físicos, ",[19,148,149],{},"Gemini se rindió",". El modelo empezó a dar vueltas en bucle y no lograba salir de las mismas recomendaciones estériles.",[15,152,153,154,157],{},"Fue entonces cuando ",[19,155,156],{},"Claude (Anthropic) tomó las riendas"," y sugirió un enfoque mucho más agresivo: sondear los puertos en vivo.",[38,159,161],{"id":160},"el-descubrimiento-del-verdadero-culpable-el-firmware","El descubrimiento del verdadero culpable: El Firmware",[15,163,164,165,167,168,170,171,173],{},"Arrancamos en modo ",[27,166,29],{}," (donde la máquina era estable) y, por SSH, empezamos a leer y escribir directamente en el hardware mediante comandos ",[27,169,81],{}," / ",[27,172,85],{},".",[46,175,176,179,182],{},[49,177,178],{},"Sondamos la zona ECAM (leyendo registros MMIO de 30 dispositivos PCIe). El servidor sobrevivió.",[49,180,181],{},"Sondamos el HPET, APIC y PM_TIMER. El servidor sobrevivió.",[49,183,184,185,188,189,192],{},"Escribimos directamente en el registro de control ",[27,186,187],{},"SCI_EN=1"," (puerto ",[27,190,191],{},"0x804","). El servidor sobrevivió.",[15,194,195,196,199],{},"Finalmente, Claude propuso ejecutar el comando exacto que usa el kernel de Linux para pedirle a la placa base que pase el control de la energía al sistema operativo. Ejecutamos:\n",[27,197,198],{},"outb 0xA0 0xB2"," (Enviar el valor 0xA0 al puerto SMI 0xB2).",[15,201,202],{},[19,203,204],{},"¡PUM! Apagado instantáneo.",[15,206,207,208,211],{},"Habíamos encontrado la causa raíz confirmada experimentalmente. El problema era un fallo de diseño a nivel de placa base bastante insólito: ",[19,209,210],{},"el manejador SMM (System Management Mode) de la BIOS que procesa el comando ACPI_ENABLE estaba roto",". Al recibir el comando estándar que envía todo sistema operativo moderno, la BIOS entraba en pánico y cortaba la corriente por completo.",[38,213,215],{"id":214},"el-parche-mágico-pre-activar-acpi-desde-grub","El parche mágico: Pre-activar ACPI desde GRUB",[15,217,218,219,222,223,226],{},"Sabiendo esto, necesitábamos que Linux no enviara ese comando mortal. La especificación ACPI dice que si el bit ",[27,220,221],{},"SCI_EN"," ya está activo cuando arranca el kernel, este asume que el hardware ya está en modo ACPI y ",[19,224,225],{},"omite"," enviar el comando SMI.",[15,228,229,230,233],{},"Aquí es donde mi intervención manual fue crítica. Tras pulir las sugerencias de la IA, diseñamos una solución definitiva. Creamos un nuevo script en ",[27,231,232],{},"/etc/grub.d/09_scifix"," para generar automáticamente una entrada de arranque parcheada que sobreviviera a las actualizaciones del kernel de Proxmox:",[235,236,241],"pre",{"className":237,"code":238,"language":239,"meta":240,"style":240},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#!/bin/sh\nexec tail -n +3 $0\n# Este archivo provee un parche ACPI SCI_EN para HP Pavilion\n# Recuerda darle permisos: chmod +x /etc/grub.d/09_scifix\n\necho \"Generando menú Proxmox con parche ACPI SCI...\" >&2\n\ncat \u003C\u003C EOF\nmenuentry 'Proxmox VE (ACPI SCI fix - 12 cores)' --class proxmox --class gnu-linux --class gnu --class os {\n    insmod part_gpt\n    insmod ext2\n    insmod lvm\n    insmod iorw\n    \n    # EL PARCHE MÁGICO: Pre-activar ACPI enviando 1 al puerto 0x804\n    outw 0x804 0x1\n    \n    # Cargar el kernel normal (asegúrate de adaptar las rutas a tu LVM/UUID)\n    linux /boot/vmlinuz-6.8.4-2-pve root=/dev/mapper/pve-root ro quiet\n    initrd /boot/initrd.img-6.8.4-2-pve\n}\nEOF\n","bash","",[27,242,243,252,273,279,285,292,311,316,329,335,341,347,353,359,365,371,377,382,388,394,400,406],{"__ignoreMap":240},[244,245,248],"span",{"class":246,"line":247},"line",1,[244,249,251],{"class":250},"sHwdD","#!/bin/sh\n",[244,253,255,259,263,266,269],{"class":246,"line":254},2,[244,256,258],{"class":257},"s2Zo4","exec",[244,260,262],{"class":261},"sfazB"," tail",[244,264,265],{"class":261}," -n",[244,267,268],{"class":261}," +3",[244,270,272],{"class":271},"sHdIc"," $0\n",[244,274,276],{"class":246,"line":275},3,[244,277,278],{"class":250},"# Este archivo provee un parche ACPI SCI_EN para HP Pavilion\n",[244,280,282],{"class":246,"line":281},4,[244,283,284],{"class":250},"# Recuerda darle permisos: chmod +x /etc/grub.d/09_scifix\n",[244,286,288],{"class":246,"line":287},5,[244,289,291],{"emptyLinePlaceholder":290},true,"\n",[244,293,295,298,302,305,308],{"class":246,"line":294},6,[244,296,297],{"class":257},"echo",[244,299,301],{"class":300},"sMK4o"," \"",[244,303,304],{"class":261},"Generando menú Proxmox con parche ACPI SCI...",[244,306,307],{"class":300},"\"",[244,309,310],{"class":300}," >&2\n",[244,312,314],{"class":246,"line":313},7,[244,315,291],{"emptyLinePlaceholder":290},[244,317,319,323,326],{"class":246,"line":318},8,[244,320,322],{"class":321},"sBMFI","cat",[244,324,325],{"class":300}," \u003C\u003C",[244,327,328],{"class":300}," EOF\n",[244,330,332],{"class":246,"line":331},9,[244,333,334],{"class":261},"menuentry 'Proxmox VE (ACPI SCI fix - 12 cores)' --class proxmox --class gnu-linux --class gnu --class os {\n",[244,336,338],{"class":246,"line":337},10,[244,339,340],{"class":261},"    insmod part_gpt\n",[244,342,344],{"class":246,"line":343},11,[244,345,346],{"class":261},"    insmod ext2\n",[244,348,350],{"class":246,"line":349},12,[244,351,352],{"class":261},"    insmod lvm\n",[244,354,356],{"class":246,"line":355},13,[244,357,358],{"class":261},"    insmod iorw\n",[244,360,362],{"class":246,"line":361},14,[244,363,364],{"class":261},"    \n",[244,366,368],{"class":246,"line":367},15,[244,369,370],{"class":261},"    # EL PARCHE MÁGICO: Pre-activar ACPI enviando 1 al puerto 0x804\n",[244,372,374],{"class":246,"line":373},16,[244,375,376],{"class":261},"    outw 0x804 0x1\n",[244,378,380],{"class":246,"line":379},17,[244,381,364],{"class":261},[244,383,385],{"class":246,"line":384},18,[244,386,387],{"class":261},"    # Cargar el kernel normal (asegúrate de adaptar las rutas a tu LVM/UUID)\n",[244,389,391],{"class":246,"line":390},19,[244,392,393],{"class":261},"    linux /boot/vmlinuz-6.8.4-2-pve root=/dev/mapper/pve-root ro quiet\n",[244,395,397],{"class":246,"line":396},20,[244,398,399],{"class":261},"    initrd /boot/initrd.img-6.8.4-2-pve\n",[244,401,403],{"class":246,"line":402},21,[244,404,405],{"class":261},"}\n",[244,407,409],{"class":246,"line":408},22,[244,410,411],{"class":300},"EOF\n",[15,413,414],{},"Para aplicarlo de forma permanente:",[117,416,417,423,433],{},[49,418,419,420,173],{},"Le dimos permisos de ejecución: ",[27,421,422],{},"chmod +x /etc/grub.d/09_scifix",[49,424,425,426,429,430,173],{},"Configuramos el arranque por defecto en ",[27,427,428],{},"/etc/default/grub"," añadiendo ",[27,431,432],{},"GRUB_DEFAULT=\"Proxmox VE (ACPI SCI fix - 12 cores)\"",[49,434,435,436,173],{},"Ejecutamos ",[27,437,438],{},"update-grub",[15,440,441],{},[102,442],{"alt":443,"src":444},"GRUB Proxmox NoACPI","/es/blog/20/grub-proxmox-noacpi.jpg",[15,446,447,448,450,451,173],{},"De este modo, GRUB pre-activa el bit en el puerto ",[27,449,191],{},". Cuando Proxmox arranca, detecta que la máquina ya se encuentra en modo ACPI, se salta la instrucción fatal y ",[19,452,453],{},"arranca perfectamente con sus 12 hilos, control de energía completo y total estabilidad",[38,455,457],{"id":456},"la-sorpresa-física-extra","La sorpresa física extra",[15,459,460],{},"Durante la investigación, sí descubrimos un problema de hardware real y paralelo.",[15,462,463],{},[102,464],{"alt":465,"src":466},"Placa Base y Módulo RAM","/es/blog/20/motherboard-ram.jpg",[15,468,469,470,473],{},"Al abrir el portátil e intercambiar la RAM, confirmamos que ",[19,471,472],{},"el canal B (el slot 2 de la memoria RAM) estaba completamente muerto en la placa",". Los módulos estaban sanos, pero la placa era incapaz de utilizarlos en ese zócalo. Un fallo físico que, curiosamente, no estaba relacionado con los apagones aleatorios, pero que limitaba el servidor a usar solo 8 GB de RAM.",[15,475,476],{},"Gracias a la persistencia brutal y la sinergia entre un humano cabezota reiniciando servidores y un Claude brillante dictando pruebas al hardware puro, pudimos aislar un fallo de firmware que habría llevado a cualquiera a tirar la máquina a la basura, logrando rescatar un portátil y convertirlo en un servidor Proxmox totalmente funcional.",[478,479,480],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":240,"searchDepth":247,"depth":254,"links":482},[483,484,485,486,487],{"id":40,"depth":254,"text":41},{"id":108,"depth":254,"text":109},{"id":160,"depth":254,"text":161},{"id":214,"depth":254,"text":215},{"id":456,"depth":254,"text":457},null,"Recientemente, me enfrenté a uno de esos problemas de hardware/software que te hacen plantearte tirar un ordenador a la basura. Tenía un equipo (un HP Pavilion Gaming 15 con un AMD Ryzen 5 4600H) que, literalmente, se apagaba de golpe a los 3 segundos de intentar arrancar cualquier sistema operativo moderno (fuera Windows nativo, Linux o Proxmox).","md","./ai-debugging.png",{"created":493},"2026-07-12 00:50","/es/blog/20",{"title":5,"description":489},"Una inmersión técnica extrema: cómo revivimos un HP Pavilion que se apagaba al arrancar cualquier SO moderno, con la ayuda de Claude, la rendición de Gemini y mucha ingeniería de puertos.","es/blog/20/index",[499,500,501,502,503,504],"Inteligencia Artificial","SysAdmin","Hardware","ACPI","Linux","Proxmox","2026-07-12","vSCCRWWsEk1Z3D13Zkas0T7ikjcWGvlvRya5k0cbs6s",1785432458376]