sábado, junio 10, 2006

Google
 
Web www.sistemaxp.blogspot.com

Manejo del Boot en Windows Vista ¿Que sucede si tenemos XP e instalamos Vista?

Manejo del Boot en Windows Vista
-------------------------------------

El sistema de Boot (arranque) de Windows Vista (beta2 y posteriores) tiene ya poco que ver con los sistemas tradicionales y el boot.ini que estábamos acostumbrados a manejar.

Recordemos un poco el sistema de XP (y sistemas basados en núcleo NT):

1) El sector de arranque de la partición (que se establece al formatear) tiene "hardcoded" -es decir, incorporado "a pelo" en su interior y no parametrizable- el primer archivo que se carga: NTLDR

2) En C:\ existen tres ficheros que son necesarios para la carga, esté donde esté situado el sistema operativo: NLTDR, NTDETECT.COM y BOOT.INI

3) El BOOT.INI es un archivo de parámetros. Archivo de texto que podemos tocar y modificar y que contiene los posibles sistemas operativos y sus lo calizaciones.

* La secuencia de arranque: la Bios carga el MBR del disco el cual contiene las particiones del disco y la marca de partición activa. El miniprograma del MBR, decide entonces cargar el primer sector (sector de Boot) de la partición marcada como activa. Esto carga el punto 1) anterior. Ese sector es un miniprograma que carga el archivo que tiene "harcoded" en su interior. En este caso el NTLDR. Es el responsable entre otra cosas de leer el BOOT.INI y si existe más de una entrada (más de un sistema operativo) nos mostrará un menú y nos permitirá seleccionar.

Hasta aquí todo sencillo. Si formateábamos C:\ siempre podíamos luego reconstruir a mano el BOOT.INI sin más que saber su sintaxis (ver un articulo mío titulado"Instalación de un Sistema Operativo.doc" publicado en http://www.multingles.net/jmt.htm para profundizar sobre el tema).


MODIFICACIONES INTRODUCIDAS POR WINDOWS VISTA
---------------------------------------------

Windows Vista cambia drásticamente la filosofía de arranque.

1) Se modifica el sector de boot de la partición el cual contendrá ahora "harcoded" el nombre del primer fichero a cargar y ejecutar. En este caso BOOTMGR

2) En C:\ se graba oculto el archivo BOOTMGR

3) En C: se crea una carpeta llamada Boot cuyo contenido es:

Directory of C:\Boot

20/10/2005 19:29 <DIR> .
20/10/2005 19:29 <DIR> ..
22/10/2005 23:06 262.144 BCD
22/10/2005 23:06 29.696 BCD.LOG <----- está oculto.
20/10/2005 19:29 <DIR> EFI
13/09/2005 21:29 1.024 bootfix.bin
05/10/2005 12:44 248.320 fixfat.exe
05/10/2005 12:44 260.096 fixntfs.exe
05/10/2005 09:16 370.176 hibrsm32.efi
05/10/2005 09:16 371.712 hibrsm32.exe
05/10/2005 09:23 534.016 hibrsm64.exe
05/10/2005 09:16 359.936 memtest.exe
05/10/2005 15:44 1.556 windowscodeintegrity.luacdf

He marcado el archivo oculto BCD.LOG porque realmente es el que va a hacer con Windows Vista y los posibles sistemas operativos que tengamos, la función que hacia el BOOT.INI en sistemas anteriores (XP y previos).


¿QUE SUCEDE SI TENEMOS XP E INSTALAMOS VISTA?
--------------------------------------------

Imaginemos que tenemos XP y otros sistemas operativos de núcleo NT instalados en nuestra máquina, y por tanto ya poseemos un BOOT.INI. Para nuestro ejemplo, pongamos que tenemos esto:

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(5)partition(1)\WINDOWS

[operating systems]
multi(0)disk(0)rdisk(5)partition(2)\WINDOWS="Windows XP Professional x64 Edition [E]" /NOEXECUTE=OPTIN /FASTDETECT
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP Professional x64 Edition" /NOEXECUTE=OPTIN /FASTDETECT
multi(0)disk(0)rdisk(4)partition(2)\WINDOWS="Windows Server 2003, Standard [R]"/NOEXECUTE=OPTOUT /FASTDETECT
multi(0)disk(0)rdisk(4)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /FASTDETECT /PAE /NOEXECUTE=OPTOUT
multi(0)disk(0)rdisk(3)partition(1)\WINDOWS="Microsoft Windows XP Professional [K]" /FASTDETECT /NOEXECUTE=OPTIN
multi(0)disk(0)rdisk(5)partition(1)\WINDOWS="Microsoft Windows XP Professional [I]" /FASTDETECT /NOEXECUTE=OPTOUT
multi(0)disk(0)rdisk(6)partition(3)\WINDOWS="Microsoft Windows XP Professional [Q]" /FASTDETECT
C:\BOOTSECT.DOS="Previous Operating System"

Al instalar Windows Vista, nos machará el sector de Boot de la partición, nos grabará en C:\ el archivo BOOTMGR (ejecutable) y nos creará la carpeta Boot rellenándola con los archivos citados anteriormente.

El proceso de arranque, en este caso, nos mostrará un menú con 3 líneas:

Legacy (pre-Longhorn) Microsoft Windows Operating System
Microsoft Windows
Legacy (pre-Longhorn) Microsoft Windows Operating System

La primera línea, si la pulsamos, iniciará el proceso de carga de los antiguos sistemas operativos: es decir no sacará el menú clásico que está embebido en el BOOT.INI y podremos arrancar cualquiera de nuestros anteriores sistemas.

La segunda línea (existirá una de este estilo por cada Windows Vista instalado en nuestra máquina) nos permitirá arrancar directamente Windows Vista.

La última línea (si existiese), nos permitirá arrancar un viejo MSDOS en el sistema. Es decir, lo que realmente permite es arrancar el viejo BOOTSECT.DOS si existiese en nuestra máquina, correspondiente en el ejemplo que estoy poniendo, justo a la ultima línea del BOOT.INI.


¿DÓNDE ESTÁN LAS LINEAS DE ESTE MENU Y COMO PODEMOS MODIFICAR SU CONTENIDO?
---------------------------------------------------------------------------

Aquí empieza el primer problema. No existe un fichero de texto equivalente al BOOT.INI. Modificar el orden de carga (es decir, qué línea estará preseleccionada), puede hacerse de una manera similar a Windows XP: botón derecho en mi PC, propiedades, pestaña de avanzado, botón de inicio y recuperación. Allí podremos establecer qué sistema operativo será seleccionado por defecto y el tiempo en segundos que esperará el menú. Pero no existe ya el botón de "editar" porque no se puede editar nada: no hay archivo de texto como antes era el BOOT.INI.

Dónde conserva Windows Vista estos datos es en el fichero oculto BCD.LOG que está en la carpeta Boot. Pero este archivo es un archivo binario, que no sólo contiene eso, sino también código ejecutable. No podemos editarlo ya que lo destruiremos.

Existe una utilidad de comando de línea que veremos a continuación: BCDEDIT.EXE la cual nos permite la modificación. Pero no es sencilla ni tan siquiera intuitiva.

Imaginemos que instalamos en nuestra máquina dos Windows Vista: un vista de 32 y uno de 64. El menú nos quedará:

Legacy (pre-Longhorn) Microsoft Windows Operating System
Microsoft Windows
Microsoft Windows
Legacy (pre-Longhorn) Microsoft Windows Operating System

El cual contiene dos líneas"Microsoft Windows". La primera corresponde al 64 bits y la segunda al 32. Lo lógico es que queramos que cada línea muestre el texto correspondiente para no inducirnos a error. Es decir, que contenga, por ejemplo:

Legacy Microsoft Windows Operating System
Microsoft Windows Vista 64
Microsoft Windows Vista 32
Legacy Microsoft Windows Operating System

La manera de hacerlo es mediante el comando de línea BCDEDIT.EXE el cual modificará el archivo BCD.LOG (oculto) que he citado anteriormente.

Al ejecutar BCDECIT.EXE en una consola de comandos, nos mostrará (en nuestro ejemplo anterior):

Windows Boot Manager
--------------------
Identifier: {bootmgr}
Type: 10100002
Device: partition=C:
Description: Windows Boot Manager
Locale: ENG-US
Inherit options: {emssettings}
{dbgsettings}
Default: {legacy}
Display order: {legacy}
{5a45d108-42ed-11da-ab93-b0ac505a9c5d}
{c59756d6-419f-11da-bb58-e429938b8537}
Timeout: 10

Windows Legacy OS Loader
------------------------
Identifier: {legacy}
Type: 10300006
Device: partition=C:
Path: \ntldr
Description: Legacy (pre-Longhorn) Microsoft Windows Operating System

Windows Boot Loader
-------------------
Identifier: {5a45d108-42ed-11da-ab93-b0ac505a9c5d}
Type: 10200003
Device: partition=D:
Path: \Windows\system32\winload.exe
Description: Microsoft Windows
Locale: ENG-US
Inherit options: {emssettings}
{dbgsettings}
Windows device: partition=D:
Windows root: \Windows
No Execute policy: OptIn

Windows Boot Loader
-------------------
Identifier: {c59756d6-419f-11da-bb58-e429938b8537}
Type: 10200003
Device: partition=L:
Path: \Windows\system32\winload.exe
Description: Microsoft Windows
Locale: ENG-US
Inherit options: {emssettings}
{dbgsettings}
Windows device: partition=L:
Windows root: \Windows
No Execute policy: OptIn

Se pueden modificar los parámetros, textos, etc con el mismo comando. Incluso añadir entradas. Si se ejecuta con /? nos dará la sintaxis. En nuestro caso, para modificar únicamente los literales a mostrar en el menú de arranque debemos hacer:

BCDEDIT -set {5a45d108-42ed-11da-ab93-b0ac505a9c5d} Description "Microsoft Windows Vista 64"

Es decir {ID a modificar}y a continuación lo que queremos modificar. Puede ser la Descripcion, el Path, las políticas de No Execute, etc.....


POSIBLES PROBLEMAS SI INSTALAMOS XP/W2003 CON POSTERIORIDAD
-----------------------------------------------------------

El problema surge porque la instalación de XP / W2003 o cualquier sistema operativo anterior nos machacará el sector de Boot y por tanto ya no apuntará a los cargadores de Windows Vista.

Para recuperarlo, dentro de la carpeta Boot tenemos dos programas:

FIXFAT
FIXNTFS

Deberemos ejecutar el correspondiente a nuestro sistema de archivos (FAT O NTFS) que exista en C:\ (independientemente de cómo sea el sistema de archivos de las instalaciones de Windows). Ejecutándolo con /? os dará la sintaxis de cómo lanzarlo para recuperar el sector de Boot de Windows Vista.


Nota Autor: Brianxp