domingo, 29 de mayo de 2016

Instalando Windows 10 en un disco GPT con BIOS legacy y GRUB2

English version: Installing Windows 10 on a GPT disk with legacy BIOS and GRUB2

En mi primera entrada de este blog  deje preparada la tabla de particiones para instalar Windows. Sin embargo desde entonces no había vuelto a ocuparme de esta cuestión y ahora es el momento de retomarla.

Desde la versión de Windows 8 el programa de instalación de Windows es capaz de instalar Windows en discos con particiones GPT, siempre y cuando el equipo soporte el modo UEFI.

El programa de instalación de windows detecta si el equipo se arrancó en modo UEFI o en modo BIOS Legacy. Según sea el tipo de arranque el instalador permite gestionar las particiones de disco con un estilo de particiones GPT -UEFI-  o con estilo MBR -BIOS Legacy-.

En esta entrada pretendo ilustrar un método para evitar esta limitación del programa de instalación de Windows. Voy a  instalar Windows 10 en un equipo con estilo de particiones GPT y con arranque desde BIOS Legacy.


Consideraciones previas.

  • Esta guía  está enfocada a la instalación de Windows 10 en un entorno con GRUB2 como gestor de arranque, con la tabla de particiones ya definida y coexistiendo con otros S.Os. 
  • He realizado está prueba utilizando como imagen ISO Windows10_InsiderPreview_x64_ES-ES_10565.iso, descargada desde los repositorios oficiales de Microsoft.
  • Este procedimiento de instalación ha sido probado con éxito en Windows 8.1.


Requisitos técnicos.

  • Es necesario instalar el módulo memdisk en la misma partición donde reside GRUB2.
  • Para realizar la instalación se precisan 2 pendrives, con una capacidad mínima de 4GB. El pendrive #1 se utilizará para crear un Windows PE desde donde realizar la instalación. El pendrive #2 o  Pendrive Auxiliar lo utilizaremos temporalmente para alojar el boot loader de Windows 10 hasta que estén completadas las tareas posteriores de instalación de esta guía.


Método de Instalación.

Vamos a realizar una instalación manual de Windows 10, para ello vamos a generar una imagen de Windows pre-instalado -Windows PE- a partir del archivo boot.wim utilizando el script de linux mkwinpeimg, que dependiendo de la distribución linux empleada se encuentra en el paquete wimlib o wimtools.


Desde el Windows PE realizaremos la configuración de los sistemas de ficheros, preparación del Pendrive Auxiliar, creación del archivo vdisk, y carga de windows 10 desde el archivo install.wim.

Finalmente configuraremos GRUB2 para poder cargar Windows 10.

Tareas Previas a la instalación.

Las tareas previas las realizamos desde linux, asumiendo que disponemos de la imagen ISO de Windows en el directorio /home/bandido/Descargas.

Preparación de las particiones para Windows 10.
Las particiones 3 y 5 las tenía asignadas con anterioridad para la instalación de Windows 10.


Extracción archivo install.wim.

En primer lugar se extraen el archivo install.wim:

# mkdir /mnt/ISO
# mkdir /mnt/NTFS
# mkdir /home/bandido/iso 
# mount -o loop /home/bandido/Descargas/Windows10_InsiderPreview.iso /mnt/ISO 
# mount /dev/sda18 /mnt/NTFS
# cp /mnt/ISO/sources/install.wim /mnt/NTFS

Por comodidad el archivo lo he transferido a una partición formateada como NTFS.

Preparación del pendrive #1 como PE de Windows 10

Una vez que disponemos del archivo boot.wim podemos crear un pendrive como Windows PE desde donde  podemos realizar la instalación:

# mkwinpeimg --iso --windows-dir=/mnt/ISO /home/bandido/iso/windows10PE.iso 
:: Copying primary boot files from mounted Windows DVD (/mnt/ISO) [DONE]
:: Exporting image from "/mnt/ISO/sources/boot.wim" [BUSY] Writing LZX-compressed data using 2 threads
694 MiB of 694 MiB (uncompressed) written (100% done)
[DONE]
:: Making ISO image "/home/bandido/iso/windows10PE.iso" [BUSY] Warning: creating filesystem that does not conform to ISO-9660.
[DONE]
The image (/home/bandido/iso/windows10PE.iso) is 257009664 bytes.
:: Exporting image from "/mnt/ISO/sources/boot.wim" [BUSY] Writing LZX-compressed data using 2 threads694 MiB of 694 MiB (uncompressed) written (100% done) [DONE]
:: Making ISO image "/home/bandido/iso/windows10PE.iso" [BUSY] Warning: creating filesystem that does not conform to ISO-9660. [DONE]
The image (/home/bandido/iso/windows10PE.iso) is 257009664 bytes.

A continuación transferimos la ISO creada al pendride #1, en mi caso he utilizado el programa winusb.


Transferencia de memdisk a GRUB2 .

Copiamos el módulo memdisk a la partición donde reside GRUB2:

# mkdir /mnt/GRUB2
# mount /dev/sda2 /mnt/GRUB2
# mkdir /mnt/GRUB2/boot/syslinux
# cp /boot/syslinux/memdisk /mnt/GRUB2/boot/syslinux

El directorio origen de memdisk puede ser cualquier medio que contenga una imagen de Archlinux.


Pasos de la Instalación.

Tras completar las tareas previas estamos en condiciones de iniciar la instalación de Windows 10.

1.- ArrancarWindows PE desde el Pendrive #1. Tras arrancar el Windows PE, pulsamos Shift+F10 para acceder al interprete de comandos.

2.- Ejecutamos el comando DISKPART y comenzamos a preparar la partición 5 como unidad destino para la instalación:

X:\Sources>diskpart
Microsoft DiskPart versión 10.0.10565
Copyright (C) 1999-2013 Microsoft Corporation.
En el equipo: MINWINPC
DISKPART> list disk
Núm Disco Estado Tamaño Disp Din Gpt
---------- ---------- ------- ------- --- ---
* Disco 0 En línea 465 GB 1920 MB *
Disco 1 En línea 7656 MB 0 B

DISKPART> select disk 0DISKPART> list partition
Núm Partición Tipo Tamaño Desplazamiento
------------- ---------------- ------- ---------------
Partición 1 Desconocido 2048 KB 1024 KB
Partición 2 Desconocido 1024 MB 3072 KB
Partición 3 Reservado 128 MB 1027 MB
Partición 4 Principal 32 GB 1155 MB
Partición 5 Principal 32 GB 33 GB
Partición 6 Desconocido 32 GB 65 GB
Partición 7 Desconocido 32 GB 97 GB
Partición 8 Desconocido 32 GB 129 GB
Partición 9 Desconocido 32 GB 161 GB
Partición 10 Desconocido 8 GB 193 GB
Partición 11 Desconocido 32 GB 202 GB
Partición 12 Desconocido 32 GB 234 GB
Partición 13 Desconocido 32 GB 266 GB
Partición 14 Desconocido 32 GB 298 GB
Partición 15 Desconocido 32 GB 330 GB
Partición 16 Desconocido 32 GB 362 GB
Partición 17 Desconocido 32 GB 394 GB
Partición 18 Principal 32 GB 426 GB
Partición 19 Desconocido 6921 MB 459 GB

DISKPART> select partition 5
DISKPART> format label="Windows 10" quick
DISKPART> assign letter=c


3.- Insertamos el Pendrive Auxiliar y lo preparamos para ser utilizado como disco de arranque:

DISKPART> list disk
Núm Disco Estado Tamaño Disp Din Gpt
---------- ---------- ------- ------- --- ---
* Disco 0 En línea 465 GB 1920 MB *
Disco 1 En línea 7656 MB 0 B
Disco 2 En línea 3690 MB 0 B

DISKPART> SELECT DISK 2
DISKPART> CREATE PARTITION PRIMARY
DISKPART> SELECT PARTITION 1
DISKPART> ACTIVE
DISKPART> FORMAT FS=FAT32
DISKPART> ASSIGN letter=k


4.- Preparamos el vdisk que será utilizado posteriormente por GRUB2 para iniciar el proceso de arranque de Windows :

DISKPART> create vdisk file=c:\bootmgr.vhd maximum=32 type=fixed
DISKPART> attach vdisk
DISKPART> list disk
Núm Disco Estado Tamaño Disp Din Gpt
---------- ---------- ------- ------- --- ---
Disco 0 En línea 465 GB 1920 MB *
Disco 1 En línea 7656 MB 0 B
Disco 2 En línea 3690 MB 0 B
* Disco 3 En línea 32 MB 32 MB

DISKPART> select disk 3 

DISKPART> create partition primary offset=1024
DISKPART> active
DISKPART> format label=bootmgr quick
DISKPART> assign letter=b
DISKPART> exit


5.- Desde lìnea de comandos procedemos a instalar Windows en el disco C:, la partición NTFS donde habíamos transferido previamente el archivo install.wim tiene asiganada la letra E:
X:\Sources>e:
E:\>dism /Apply-Image /ImageFile:install.wim /Index:1 /ApplyDir:C:\

6.- Preparamos los disco  B: y K: (vdiskPendrive Auxiliar) para que pueda arrancar Windows desde ellos:
E:\>bootsect /nt60 b: /mbr 
E:\>bcdboot c:\Windows /s b:
E:\>bootsect /nt60 K: /mbr
E:\>bcdboot c:\Windows /s K:

7.- Se reinicia el ordenador arrancando desde el  Pendrive Auxiliar y se completa la instalación.

8.-  Una vez completada la instalación de Windows abrimos una ventana de comandos y creamos una tarea para que se monte el disco virtual en cada arranque del sistema. Esto es necesario para que funcione correctamente Windows cuando se arranque desde GRUB2.


schtasks.exe /Create /TN MOUNT_VHD /SC ONSTART /TR "powershell.exe Mount-DiskImage -ImagePath c:\bootmgr.vhd  -NoDriveLetter"

Paso final de la Configuración de Windows

Tareas Posteriores a la instalación.

Después de completar la instalación, se arranca desde Linux para configurar GRUB2 para el arranque Windows utilizando el vdisk:

1.-  Copiamos el vdisk desde la partición 5 -Windows- a la partición 2 -GRUB Standalone-.

# mount /dev/sda2 /mnt/grub
# mount /dev/sda5 /mnt/win
# cp /mnt/win/bootmgr.vhd /mnt/grub/boot/vhd/bootmgr_w10.vhd

2.- añadimos al archivo de configuración grub.cfg la siguiente entrada:

// COMIENZA EL FRAGMENTO
menuentry "Windows 10 preview" {  
  linux16 /boot/syslinux/memdisk harddisk
  initrd16 /boot/vhd/bootmgr_w10.vhd

}
// FIN DE FRAGMENTO

Consideraciones finales.

En la preparación de esta entrada del Blog he intentado, sin éxito,instalar Windows sin utilizar el Pendrive Auxiliar arrancado desde GRUB2 a través del vdisk. Pero Windows necesita acceder al disco con el sector de arranque y sin él no es posible completar la secuencia de iniciación de Windows. 

Para satisfacer este requerimiento  se utiliza el Pendrive Auxiliar durante el proceso de instalación. Una vez se crea la tarea de montaje del vdisk, éste será acesible durante la secuencia de arranque de Windows, completándose esta con normalidad. A partir de este momento podemos prescindir del Pendrive Auxiliar

Hasta donde he podido determinar el funcionamiento del Windows resulta estable con este procedimiento de instalación, he instalado drivers de Windows Vista y actualizado Windows sin mayores contratiempos.

2 comentarios:

  1. He visto que hay un problema: No se puede actualizar según que actualización de Windows, creo que las que tienen que ver con el Boot Manager, por lo demás genial.

    ResponderEliminar
  2. Una pregunta, ¿ Por que montas una imagen ISO , para después crear otra ISO con ella? No sirve crear el usb con la primera iso?

    ResponderEliminar

Vuestros comentarios son bien recibidos, os animo a contribuir proponiendo temas que os interesen para desarrollar en este blog.