Dual Boot Windows 10 y Arch Linux

Es una mañana cálida de verano. Los pájaros cantan, los rayos de sol entran por la ventana y el tibio palmoteo en la pared de los vecinos consagrando su amor matutino te despierta con la energía de quince soles. Te incorporas lentamente hasta erguir la espalda, miras al frente como si vieras tu propio rostro reflejado en la nada. Una media sonrisa asoma por tus labios. Lo tienes. Estás preparado. Es hora de hacer un dual boot.

Pero sabes que no será una tarea fácil. No es la primera vez que lo haces y todas las veces que lo has intentado saliste victorioso… Pero a qué precio. Lo que debería ser una tarea sencilla y rápida siempre te sorprende con un nuevo problema, un nuevo desafío… Una nueva tocada de polla. ¡WINDOWS! ¡¿POR QUÉ WINDOWS?! ¿Por qué cada vez que te actualizas me rompes el dual boot? ¿Por qué tu sola presencia ocupa 5 veces más espacio que mi instalación de Linux entera? En todas las historias de héroes hay un villano, pero jamás un villano fue tan tocapelotas.

Tras horas de aprender la diferencia entre MBR y GPT. Tras comprobar por enésima vez que tu instalación de Windows está en modo UEFI y todo está correcto… Te dispones a instalar tu amado Linux.

Sabes la teoría: la partición de /boot de Linux debe ser la misma que la creada por Windows. Sabes que usarás systemd-boot para el dual boot. Sabes que es algo sencillo pero que te tomará mínimo 3 horas. Coges tu pendrive, metes la iso de arch con rufus (asegurándote de que el esquema de partición es GPT), entras en la BIOS para cambiar el orden de arranque de los dispositivos para poner el pendrive como el primero, desactivas el Secure Boot y el Fast Startup tal y como dicen todas las guías, arrancas el PC y entras en el instalador de arch.

Miras la terminal. Hace no tanto tiempo que estuviste en esta situación. Ya ni cuentas la cantidad de veces que has instalado arch. Innumerables veces en innumerables dispositivos. La sensación que te produce es una mezcla entre ilusión y “Ah shit, here we go again.” de CJ. Creas tu partición de root /, formateas y montas root en /mnt y la partición de boot creada por Windows de 100MB en /mnt/boot. Todo va según lo planeado. De hecho, solamente te queda un paso importante en el que se podría fallar antes de configurar todo. Entras con arch-chroot y corres el comando bootctl install para crear los archivos de arranque, un comando que nunca antes te había dado ningún problema (por eso elegiste systemd-boot en lugar de grub).

Terminal window
No space left on boot.

FUCK.

96MB…

Otra vez te das cuenta de que te van a tocar los huevos. De que no podía simplemente ser una instalación normal y corriente sino de que vas a tener que investigar con el móvil entre reddit y foros de arch mientras pruebas cosas en una terminal.

Respiras hondo y comienzas el proceso. Miras a ver qué le pasa a la partición de boot… Claro. Windows la crea de 100 MB y SOLAMENTE Windows ya ocupa 96MB. Y encima no puedes simplmente hacerla más grande porque es la primera de las 4 particiones que crea Windows y no hay espacio libre adyacente. fuck Fuck FUCK. En tu cabeza empiezan a pasar pensamientos como formatear todo el disco duro, instalar primero Linux y luego Windows, seguidos de pensamientos como comprar un disco duro aparte para Linux o desinstalar Windows a tomar por culo. Pero necesitas ese programa pirata privativo que solamente está para Windows y Mac… Lo necesitas tanto que te dispones a seguir intentándolo.

Entre foros de gente con problemas parecidos lees algo de XBOOTLDR. Ni puta idea. Lo buscas en google y te aparece mencionado en la wiki oficial de arch donde se habla de systemd-boot . Estos cabrones piensan en todo. Al parecer puedes crear una nueva partición de tipo XBOOTLDR, montar la partición de boot de Windows en /efi y la de Linux en /boot. systemd-boot sabrá que la partición con tipo XBOOTLDR es como una especie de extensión de la partición de /efi y la leerá también. Por tanto no más problemas de espacio y encima cuando Windows se actualice no te va a joder el arranque de Linux. Creas la partición de 500MB, lo formateas en FAT32 y reinstalas los paquetes de Linux.

¿Dónde está Windows?

Ahora sí. Tras hacer las configuraciones, instalar NetworkManager, ponerle contraseña al usuario root y todas esas polladas todo debería funcionar después de reiniciar.

Reinicias y… entra en Linux sin avisar. Reinicias otra vez y… lo mismo. Te metes en las particiones de /efi y de /boot. Analizas lo que hay dentro, analizas las tablas que te ha creado systemd-boot. Todo parece correcto. No entiendes por qué no funciona. Entras en la BIOS y ves que puedes elegir entre si bootear Windows o Linux. Cruzas los dedos y seleccionas Windows y para tu sorpresa bootea correctamente y todo va bien. Un pensamiento intrusivo se te pasa por la cabeza. Quieres dejarlo así y acceder a través de la BIOS para el resto de lo que te queda de vida. Pero eres mejor que eso. Son las 2 de la mañana y sientes miedo de haberte cargado algo. Algún detalle que escapaba a tu control. Hasta que después de un largo rato leyendo foros y debuggeando pruebas a configurar el loader y le pones un timeout de 3 segundos.

Reinicias y funciona. Aparecen las dos opciones, Windows y Linux, los pruebas y funciona correctamente. Te das cuenta de que todo llevaba funcionando correctamente desde la primera vez que reiniciaste. Te das cuenta de que eres un mono y te acuestas a dormir.

Hora desincronizada

Te despiertas al día siguiente y todo va bien menos por un pequeño detalle. Cada vez que cambias entre Linux y Windows la hora se desincroniza 2 horas. Pasas de ello, total solo tienes que darle a un botón para sincronizarlo de nuevo. Pasan los días, le das al botón, continúas. Siguen pasando los días, sigues dándole al botón. Se vuelve costumbre mirar la hora del ordenador y compararla con la del móvil por si acaso. Hasta que se te terminan de hinchar las pelotas y te decides a solucionarlo. Tras muchas pruebas y muchos reinicios das en reddit con el comando mágico. Solo tienes que correr lo siguiente en Windows:

Terminal window
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

Reinicias. Miras la hora. Sonríes. Te echas un lol.