logo linux desarrollo

Dualboot: dos sistemas operativos en la misma máquina, eligiendo en cada arranque. Lo habitual es instalar primero Windows y luego Linux, pero aquí parto del caso opuesto — Ubuntu 24.04 ya funcionando y ocupando entero un disco de 4 TB — y describo cómo añadir Windows 11 Pro: redimensionar la partición, instalar Windows y personalizar el menú de arranque de GRUB.


Serie de apuntes sobre Windows

Primeros pasos

Los características del mi PC Slimbook Kymera ATX

  • Motherboard Gigabyte Z790 UD AX con BIOS F11d y una CPU Intel Core i9-14900K
  • Memoria: 96GB (2x48GB) DDR5 6000MT/s / x2 Channel
  • Discos: 1 disco 4TB nvme (principal) + 2 discos para datos de 2TB SDD
  • Sistema con UEFI y esquema de particionamiento GPT
  • Tengo ya Ubuntu 24.04 instalado (Kernel: 6.8.0-41-generic)

Detalles del disco principal, de momento solo con linux:

Gparted Linux
Gparted Linux

Requisitos

  • Dos USB de 8 GB mínimo (una para Ubuntu Live, otra para Windows 11). Con una sola también se puede, reutilizándola entre pasos — es más engorroso.
  • Hardware con soporte UEFI y tabla de particiones GPT (no MBR).
  • Conexión a internet durante la instalación de Windows (preferible).
  • Backup del disco. Trastear particiones = riesgo real de perder datos. Uso Clonezilla para clonar. Si tu disco es demasiado grande para clonar, salva al menos los archivos importantes a un disco externo.

Crear USB con Ubuntu Live

La voy a usar solo para estrechar la partición existente y dejarle sitio a Windows. No lo puedo hacer desde el mismo Linux porque está montada. Descargo la ISO de Ubuntu desde Download Ubuntu Desktop (Desktop 24.04 LTS (6GB)).

Podría haber usado Startup Disk Creator (que viene con Ubuntu), pero prefiero quemar la USB con Balena Etcher (guía externa). Me bajo Etcher for Linux x64 (64-bit) (zip),

unzip ../Downloads/balenaEtcher-linux-x64-1.19.21.zip
cd balenaEtcher-linux-x64
sudo chown root:root chrome-sandbox
sudo chmod 4755 chrome-sandbox
./balena-etcher.sh

Importante: identifica con precisión el device de la USB (aquí /dev/sdc). Confundirlo con otro disco borra datos reales.

# lsblk -p -o NAME,VENDOR,MODEL,SIZE,TYPE,SERIAL
NAME             VENDOR   MODEL                    SIZE TYPE SERIAL
/dev/loop0                                        10,1M loop
/dev/loop1                                        63,9M loop
/dev/loop2                                        74,2M loop
/dev/loop3                                        74,2M loop
/dev/loop4                                        13,9M loop
/dev/loop5                                        38,8M loop
/dev/sda         ATA      CT2000MX500SSD1          1,8T disk
└─/dev/sda1                                        1,8T part
/dev/sdb         ATA      CT2000MX500SSD1          1,8T disk
└─/dev/sdb1                                        1,8T part
/dev/sdc         Lexar    USB Flash Drive         58,2G disk  <-- !!! este
/dev/nvme0n1              Samsung SSD 990 PRO 4TB  3,6T disk
├─/dev/nvme0n1p1                                   300M part
└─/dev/nvme0n1p2                                   3,6T part
Quemo la imagen Ubuntu
Quemo la imagen Ubuntu
Proceso de transferencia
Proceso de transferencia

Crear USB Live con Windows

Primero descargo Windows 11, desde el sitio oficial de descargas. Sección ISO, opción Windows 11 (multi-edition ISO for x64 devices). Selecciono el Product language y empiezo la descarga (aprox. 6,3GB).

Para pasarla a una USB es sencillo si tienes ya un Windows (aquí las instrucciones). En mi caso lo hago desde mi linux con Ventoy (una guía).

Al instalar Ventoy en la USB, la hace bootable y crea dos particiones, una para él (para que Ventoy haga boot) y otra para copiar el ISO de Windows. Descargo la última versión desde Ventoy.

cd Downloads
tar xfz ventoy-1.0.99-linux.tar.gz
cd ventoy-1.0.99
sudo ./VentoyWeb.sh

Contecto con http://127.0.0.1:24680. En Option deshabilito Secure Boot y selecciono GPT como tipo de partición.

Quito Secure boot y selecciono GPT
Quito Secure boot y selecciono GPT

Selecciono la ruta del device donde tengo la USB (en mi caso ahora es /dev/sdd) y pulso Install.

Instalo Ventoy
Instalo Ventoy

Copio el ISO de Windows a la segunda partición “Ventoy”.

Copio el ISO a la partición Ventoy
Copio el ISO a la partición Ventoy

Así queda la USB

Particiones de la USB con Ventoy y Windows
Particiones de la USB con Ventoy y Windows

Expulso ambas particiones (Ventoy, VTOYEFI), ya hemos terminado, tenemos lista la segunda USB Windows.

Liberar espacio en el disco

Hago boot con la USB Live de Ubuntu. Para que la BIOS arranque desde la USB, pulsa la tecla de boot-menu (F2/F7/F10/F12/ESC según tu BIOS).

Selecciono la USB con Ubuntu
Selecciono la USB con Ubuntu

Seleccino la USB, pulso Enter. Aparece un menú, selecciono Try or Install Ubuntu, pongo el idioma, accesibilidad, teclado, conexión a internet, me salto actualizar el instalador y selecciono Try Ubuntu. Una vez que tengo Ubuntu arrancado, ejecuto la Aplicación Discos (Disks)

Aplicación Discos
Aplicación Discos

Selecciono mi disco duro principal y la partición donde está Linux, que es la que tengo que estrechar.

Selecciono Disco y partición
Selecciono Disco y partición

Selecciono redimensionar / resize.

Redimensionar partición
Redimensionar partición

Introduzco en nuevo valor (la mitad del disco), pulso en Resize, pulso en Autenticar (no pide password)

Nuevo tamaño
Nuevo tamaño

Inicia el proceso de redimensionamiento (tarda un buen rato) y cuando termina queda como esperaba

Resultado final
Resultado final

Rearranco el equipo, quito la USB de Ubuntu y por asegurar, compruebo que puede seguir haciendo boot en la partición redimensionada. Ya estoy listo para instalar Windows

Instalar Windows

Ahora toca instalar Windows — ten paciencia, tarda bastante. Introduzco la USB con Ventoy + ISO, rearranco y selecciono la USB desde el boot-menu de la BIOS.

Arranque con Ventoy
Arranque con Ventoy

Enter sobre la ISO, Boot in normal mode. En el asistente de Windows: idioma y teclado, Instalar ahora, omito la licencia (se activa después), elijo Windows 11 Pro, Install Windows Custom y selecciono la única partición libre (Unallocated Space). Windows copia ficheros y reinicia. Nota: en hardware antiguo a veces volvía a arrancar desde la USB — si te pasa, entra en la BIOS y selecciona el disco duro como fuente de boot.

Windows 11 OOBE (setup inicial)

Esta secuencia de preguntas del primer arranque de Windows 11 es la misma en todas las instalaciones del blog (VMware, Proxmox, dualboot). La dejo aquí como referencia:

  • País, teclado, actualizaciones, reinicio.
  • Nombre del equipo, reinicio.
  • Uso personal vs. trabajo → Personal.
  • Login con cuenta Microsoft (o local — más abajo).
  • Crear PIN.
  • Diagnóstico y privacidad: decir no a localización, buscar dispositivo, diagnósticos, inking/typing, tailored experiences y ads ID.
  • Saltarse teléfono, backups y migración desde otros navegadores.
  • Último update y entramos.

Configurar el arranque dual con GRUB

Windows ha dejado su Boot Manager como primera entrada en la BIOS. Lo cambio para que arranque Linux primero, y configuro GRUB para que presente el menú de selección entre los dos sistemas.

Entro en el Setup de la BIOS y cambio la secuencia de arranque para poner Ubuntu el primero.

Posibilidad de cambiar el orden de Boot en la BIOS
Posibilidad de cambiar el orden de Boot en la BIOS

Añadir Windows a Grub

Una vez en Linux y desde root voy a parametrizar grub. Empiezo confirmando que os-prober detecta la nueva partición “arrancable” de Windows:

os-prober

/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi  <-- !! Correcto

Edito /etc/default/grub, descomento la línea GRUB_DISABLE_OS_PROBER=false, de tal manera que update-grub use os-prober y añada una entrada de menú adicional al fichero /etc/boot/grub/grub.cfg

cat /etc/default/grub | grep PROBER

GRUB_DISABLE_OS_PROBER=false

Ejecuto update-grub para que me añada la partición Windows al fichero de configuración (/boot/grub/grub.cfg) como un elmento del menú de arranque.

update-grub

:
Sourcing file `/etc/default/grub'
Warning: os-prober will be executed to detect other bootable partitions.
:
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
:

Nota: Yo volví a dejar esta línea comentada #GRUB_DISABLE_OS_PROBER=false en el /etc/default/grub y volver a ejecutar update-grub, ya no me hace falta que detecte nada.

Rearranco el equipo y veo el nuevo menú

Diferentes opciones de arranque
Diferentes opciones de arranque

Tenemos diferentes opciones pero prefiero limpiar este menú, arranco de nuevo con Linux para instalar un App llamada Grub Customizer

sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y
apt install software-properties-common
add-apt-repository ppa:danielrichter2007/grub-customizer
apt-get update
apt install grub-customizer

Ejecuto grub-customizer desde mi usuario y el CLI; me pide la contraseña de root y me muestra todas las entradas que ví en el menú de arranque. Elimino las que no voy a usar (opciones avanzadas, memtest), cambio los títulos,

Reconfiguro el menú de Grub
Reconfiguro el menú de Grub

En General Settings establezco boot automático en 5 seg y en Appearance Settings la resolución en 1920x1080.

Después de Salvar, vuelvo a hacer boot para comprobar.

Nuevo menú de arranque
Nuevo menú de arranque

Personalizo Grub

Grub permite aplicar temas y personalizar la apariencia de su gestor de arranque. Si desea un menú de arranque que sea visualmente atractivo y también fácil de navegar, puedes personalizar con temasa. Una buena fuemte es Gnome-Look.org. En mi ejemplo descargué Stylish-1080p.tar.xz desde aquí.

mkdir -p /boot/grub/themes
cd /boot/grub/themes
tar xvf Stylish-1080p.tar.xz

Modifico bajo /etc/default/grub.d, elimino el que venía con mi sistema y pongo el nuevo

rm /etc/default/grub.d/slimbook.cfg

cat /etc/default/grub.d/tema-grub.cfg

GRUB_THEME="/boot/grub/themes/Stylish/theme.txt"

Dejo aquí algunos cambios que hice al final sobre el fichero /etc/default/grub a modo de referencia.

GRUB_DEFAULT="0"
GRUB_TIMEOUT="5"
GRUB_DISTRIBUTOR="Slimbook-OS"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_GFXMODE="1920x1080x32"
GRUB_GFXPAYLOAD_LINUX="1920x1080x32"
GRUB_INIT_TUNE="1000 334 1 334 1 0 1 334 1 0 1 261 1 334 1 0 1 392 2 0 4 196 2"
GRUB_ENABLE_BLSCFG="false"

Ejecuto el update y hago un reboot

update-grub
reboot -f
Nuevo look & feel de mi menú de arranque
Nuevo look & feel de mi menú de arranque

Listo, ya tengo dualboot. Continúo con el siguiente apunte, sobre cómo dejar Windows 11 lo más decente posible.

Gotcha: la hora en dualboot

Problema clásico en dualboot Windows/Linux: uno de los dos muestra la hora mal. El motivo es que Windows por defecto interpreta que el RTC (reloj hardware) está en hora local, mientras que Linux lo interpreta en UTC — que es lo correcto.

  • RTC en local → Windows feliz, Linux desorientado (salvo NTP bien configurado).
  • RTC en UTC → Linux feliz, Windows desorientado (salvo NTP bien configurado).

Si te fías solo de NTP puede parecer que todo va bien, pero la incoherencia interna acaba apareciendo. Guías externas: itsfoss, howtogeek.

Mi solución: poner UTC en la BIOS y decirle a Windows que el RTC es UTC.

  1. BIOS: pongo la hora en UTC. En Madrid en verano son 2 horas menos. Hora UTC actual.
  2. Linux: nada, ya espera UTC.
  3. Windows: le digo que el RTC es UTC vía registro:
    • regeditHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation.
    • Añado un valor string RealTimeIsUniversal = 1.
    • Reinicio.
  4. En ambos SO, configuro NTP client.
  5. En ambos SO, configuro mi timezone (Europe/Madrid en mi caso, con horario de verano).