winload.exe is missing or corrupted…

En realidad, no ha ocurrido nada malo, ni hay nada “corrupto”. Es una mala broma de Windows.

Una mejor forma

Quizá hubiera sido mejor usar CloneZilla o Norton Ghost para duplicar los discos. Estos programas sacan copia exacta del disco. Pero como no tenía el Ghost, y para usar Clonezilla necesitaba unos cincuentaitantos gigas en algún sitio para crear la imagen del disco duro de la laptop… simplemente conecté el disco nuevo via USB a la laptop, y usé GParted[1] para copiar las particiones de Windows y Linux de un disco a otro.

winload.exe is missing or corrupted

El problema es que GParted no copia la tabla de particiones del disco original, sino que crea una nueva tabla y luego copia. Después de buscar un poco en Google, gracias a Hazard’s Stuff descubrí que lo único que quiere decir Windows con ese mensaje es que el número de serie del disco duro ha cambiado, y que por eso se niega a funcionar. La entrada en Wikipedia sobre el sector de carga (MBR)/en español[2] explica que en el offset $1B8 del primero sector del disco duro hay un número entero de 4 bytes que es la firma del disco, un número de serie. Es un campo opcional, pero cuando se crea la tabla de particiones por primera vez el programa escribe allí un número. (No me he detenido a averiguar cómo lo genera.) Si Windows descubre que este número ha cambiado, muestra el famoso mensaje, winload.exe is missing or corrupted y se niega a seguir. Menos mal, como este numerito realmente no sirve para nada, basta reemplazarlo por el número del disco viejo para que Windows funcione. El procedimiento que usé seguro que no es el más amigable. Pero igual lo recojo, porque funciona. Si a alguno se le ocurre algo más amigable (aparte de usar el disco de instalación de Windows para corregir el problema), bienvenidas sean las sugerencias.

Cambiar el número de serie del disco duro

Antes de seguir, advierto que este procedimiento, si sale mal, puede hacer que se pierda toda la información del disco. Tampoco sé si esto viola de algún modo la licencia de Windows. * Arrancamos la laptop desde un Live CD con Linux. Conectamos el disco antiguo a través del cable USB. En mi caso, /dev/sda es el disco nuevo, y /dev/sdb el disco antiguo. En un terminal: * Instalamos hexedit, un programa muy liviano que nos permitirá editar el contenido del archivo en formato hex. $ sudo apt-get install hexedit * Copiamos el MBR (el sector 0) del disco nuevo al archivo mbr.bin $ sudo dd if=/dev/sda of=mbr.bin bs=512 count=1 * Copiamos el MBR del disco viejo al archivo mbr_old.bin $ sudo dd if=/dev/sdb of=mbr_old.bin bs=512 count=1 * Abrimos el MBR del disco antiguo con hexedit ($ hexedit mbr_old.bin) y tomamos nota en un papel de los 4 bytes en la posición $1B8 del archivo. Estos cuatro bytes son la firma del disco duro antiguo. Por ejemplo, A0 00 A1 00. * Salimos de hexedit, y ahora abrimos el MBR del disco nuevo, también usando hexedit ($ sudo hexedit mbr.bin). Vamos al offset $1B8. La firma de este disco es E1 F5 63 EC, la reemplazamos por la del disco viejo (A0 00 A1 00) y guardamos el archivo. * Reescribimos el MBR modificado al disco nuevo: $ sudo dd if=mbr.bin of=/dev/sda bs=512 count=1 * Listo, reiniciamos la PC. Windows debe cargar sin problemas.

Algunas aclaraciones

  • El procedimiento que seguí es un poco distinto al que he descrito. Lo primero que hice fue reinstalar GRUB, el boot loader de Ubuntu, en el sector 0, de modo que pudiera cargar Linux en la portátil. La modificación del sector de carga no la hice desde el Live CD, sino desde Linux instalado en la portátil. Notas: [1] GParted es una especie de Partition Magic, pero Open Source. Aunque corre en Linux, puede copiar también particiones de Windows (FAT32 y NTFS), de Mac (HFS) y otros tipos. Gracias al Live CD no hace falta instalar Linux para usarlo. [2] El Master Boot Record (MBR) es el primer sector del disco duro. Contiene la tabla de particiones y otra información adicional. Es esencial para el arranque de la PC. Ver Wikipedia sobre el MBR/en español.
boot-sector drive-upgrade dual-boot mbr partition ubuntu winload-exe

Join my free newsletter and receive updates directly to your inbox.