Windows 11 ligero (Tiny11) en una USB, en 25 minutos

TL;DR

Tenía una USB con Ubuntu y quería reutilizarla para hacer pruebas con un Windows 11 ligero. En vez de bajar una imagen dudosa de internet, partí de una ISO oficial de Windows 11 y la aligeré yo mismo con DISM + PowerShell: fuera bloatware, Copilot, telemetría y el arranque de OneDrive, más el bypass de TPM/SecureBoot/RAM para que instale en cualquier equipo viejo o máquina virtual. El resultado: una USB booteable UEFI en ~25 minutos, con un solo script que hace todo de corrido.

El punto de partida

  • Una USB SanDisk de 16 GB que traía Ubuntu (se iba a formatear por completo).
  • Una ISO oficial de Windows 11 25H2 en el disco.
  • Ganas de un Windows limpio y liviano para probar cosas, no el Windows 11 completo lleno de apps que nunca uso.

Aclaración honesta desde el principio: “ligero” aquí significa menos apps, menos telemetría y menos consumo de RAM en reposo — no un Windows minúsculo de 2 GB. La mayor parte del peso de un install.wim es el almacén de componentes de Windows, que se comparte internamente y casi no baja aunque quites aplicaciones.

La receta (estilo Tiny11)

El proceso es el que popularizó la comunidad con Tiny11, pero automatizado en un script propio para no depender de herramientas interactivas ni de ADK:

  1. Montar la ISO y copiar su contenido a una carpeta de trabajo.
  2. Elegir la edición (aquí, Windows 11 Pro) dentro del install.wim.
  3. Montar la imagen con DISM y quitarle las apps provisionadas (AppX) que no aportan.
  4. Ajustes de registro offline: apagar telemetría, Copilot, el icono de Chat/Teams y el arranque de OneDrive.
  5. Bypass de requisitos (TPM 2.0, Secure Boot, RAM, CPU) tanto en la imagen instalada como en el instalador (boot.wim).
  6. Limpieza de componentes (/ResetBase) y export de solo esa edición con compresión máxima.
  7. Formatear la USB en GPT + FAT32 (arranque UEFI) y copiar los archivos.
  8. Como el install.wim pesa más de 4 GB y FAT32 no admite archivos tan grandes, se divide en .swm (Windows lo lee sin problema).

Lo que quita el script (bloatware)

Se eliminan como paquetes provisionados, entre otros:

Categoría Ejemplos
Juegos / Xbox Xbox TCUI, Game Overlay, Identity Provider, Speech-to-Text, GamingApp, Solitaire
Bing / noticias Bing News, Bing Weather, Bing Search
Productividad de relleno Office Hub, Outlook (nuevo), Power Automate, To Do, Sticky Notes, Clipchamp
Comunicación Teams (Chat), Your Phone
Sistema opcional Copilot, Cortana, Widgets (WebExperience), Feedback Hub, Quick Assist, Dev Home, Sound Recorder

Se conserva lo necesario para que sea usable: Tienda, Explorador, Notepad, Calculadora, Terminal, Fotos y los runtimes base.

El detalle importante: FAT32 y el .swm

Para que una USB arranque por UEFI sin líos, lo más compatible es FAT32. Pero FAT32 tiene un límite: ningún archivo puede pasar de 4 GB. Como nuestro install.wim quedó en ~6 GB, la solución es dividirlo:

Dism /Split-Image /ImageFile:"install.wim" /SWMFile:"D:\sources\install.swm" /FileSize:3800

Eso genera install.swm + install2.swm (cada uno < 4 GB) y el instalador de Windows los reensambla solo. Sin ADK, sin oscdimg, sin reconstruir una ISO: escribimos los archivos directo a la USB.

El bypass de requisitos

Para que instale en hardware “no compatible” o en una VM de pruebas, se cargan las claves LabConfig en el registro offline, tanto en la imagen como en el boot.wim del instalador:

reg load "HKLM\zSYS" "$Mount\Windows\System32\config\SYSTEM"
reg add "HKLM\zSYS\Setup\LabConfig" /v BypassTPMCheck        /t REG_DWORD /d 1 /f
reg add "HKLM\zSYS\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
reg add "HKLM\zSYS\Setup\LabConfig" /v BypassRAMCheck        /t REG_DWORD /d 1 /f
reg add "HKLM\zSYS\Setup\LabConfig" /v BypassStorageCheck    /t REG_DWORD /d 1 /f
reg add "HKLM\zSYS\Setup\LabConfig" /v BypassCPUCheck        /t REG_DWORD /d 1 /f
reg unload "HKLM\zSYS"

Buenas prácticas que me ahorraron dolores

  • Todo requiere Administrador. El script se auto-eleva (UAC) para no fallar a mitad de camino.
  • Idempotencia + try/finally. Antes de empezar, descarta montajes viejos de DISM y desmonta la ISO; al final, pase lo que pase, siempre desmonta y descarga los hives del registro. Así una corrida a medias no deja la imagen “colgada”.
  • Detección segura de la USB. El script busca la USB por modelo + tamaño + tipo removible; si no encuentra exactamente una, se detiene sin tocar ningún disco (nada de formatear el disco equivocado).
  • Verifica el efecto, no solo el log. Al terminar, comprobé en la propia USB que existieran bootmgr, efi\boot\bootx64.efi, sources\boot.wim, los .swm y setup.exe. Un log que dice “listo” no es prueba de que arranque.

Cómo se usa la USB

  1. Conéctala en el equipo de pruebas.
  2. Entra al menú de arranque (F12/F8/Esc según la marca) y elige UEFI: (tu USB).
  3. En la instalación, elige “No tengo clave de producto” y la edición Pro.
  4. Gracias al bypass, no pedirá TPM ni Secure Boot aunque el equipo sea viejo.

Conclusión

Con una ISO oficial y un solo script de PowerShell se arma un Windows 11 aligerado y una USB booteable reproducible, sin herramientas externas ni imágenes de terceros de origen dudoso. Lo mejor: al ser un script idempotente, repetir el proceso con otra edición u otra ISO es cambiar dos variables y volver a correrlo.

¿El siguiente paso? Meterle un autounattend.xml para saltarse también las preguntas de la instalación (región, cuenta, red) y dejar un Windows de pruebas desatendido de punta a punta.

VPN corporativa que mata Internet en la MacBook: no era la red, era el DNS
Older post

VPN corporativa que mata Internet en la MacBook: no era la red, era el DNS

Configuré una VPN corporativa en la MacBook, no pude desconectarla y me quedé sin Internet salvo WhatsApp. El diagnóstico remoto por SSH reveló que no era la conexión: era el DNS, y Tailscale MagicDNS lo empeoraba.

Newer post

Correo corporativo con alias: un solo buzón, todas tus direcciones

Cómo montar un correo profesional con tu propio dominio: un solo asiento, alias ilimitados y 'enviar como', sin pagar una cuenta por cada dirección.

Correo corporativo con alias: un solo buzón, todas tus direcciones
raul@wesoft: ~/ficha