File desktopAvvio doppio con Windows XP e Windows PE 2.0

Wes Miller

Scarica il codice per questo articolo: Desktop2008_02.exe (151KB)

Negli articoli precedenti di File desktop, ho accennato a come Windows PE sia diventato uno strumento per il ripristino e ho spiegato come sia possibile utilizzarlo da una seconda partizione. Una domanda ricevuta di recente mi ha spinto ad approfondire questa discussione sull'utilizzo contemporaneo di Windows PE 2.0 e Windows XP.

Dopotutto, sono molti i lettori che utilizzeranno Windows® XP ancora per un po' e Windows PE 2.0 è la versione che Microsoft supporterà in futuro (non ci saranno altri aggiornamenti a Windows PE 1.x).

Una differenza importante tra Windows PE 1.x e 2.x è che Windows PE 2.x può essere avviato tramite un'interfaccia di avvio standard (a differenza del metodo specifico utilizzato per Windows PE 1.x). Sebbene sia possibile avviare Windows PE 1.x o 2.x da una seconda partizione, l'avvio dalla stessa partizione in cui è installato il sistema operativo presenta molteplici potenzialità che saranno illustrate di seguito.

Avvio doppio per Windows

Windows NT® si è sempre dimostrato tollerante all'avvio doppio. Ma non appena si è iniziato a sostituire con i computer basati su EFI (Extensible Firmware Interface) il precedente BIOS AT dei PC IBM, Microsoft ha modificato il meccanismo di avvio di Windows perché funzioni in modo ottimale con EFI e per avere un meccanismo di avvio unico su tutte le architetture. Il nuovo meccanismo di avvio per Windows, a partire da Windows Vista®, viene definito come Database di configurazione di avvio o BCD (vedere microsoft.com/whdc/system/platform/firmware/bcd.mspx). Ma che si parli del precedente boot.ini o del nuovo meccanismo di BCD, Windows è in genere in grado di eseguire l'avvio di entrambi i sistemi operativi, anche se ciò significa passare il processo di avvio a un altro caricatore di avvio.

Prima di iniziare, è importante ricordare che Windows PE 2.0 funziona solo su sistemi dotati sia di compatibilità APCI (Advanced Configuration and Power Interface) completa che di una RAM di 384 MB (meglio se di 512 MB). Come accennato nell'articolo di maggio (technetmagazine.com/issues/2007/05/DesktopFiles), sui sistemi non ACPI non sarà possibile eseguire l'avvio di Windows PE 2.0 e, poiché l'avvio di Windows PE 2.0 deve essere eseguito su un RAMDisk, è necessario disporre di RAM sufficiente a contenere il RAMDisk, eventuali aree scratch e l'intero working set della RAM. Se il sistema che si utilizza dispone di meno di 384 MB di RAM, anziché seguire questa strada è consigliabile utilizzare Windows PE 1.6. Anche una mano esperta nella riduzione delle dimensioni di Windows PE non può garantirne una corretta esecuzione con 256 MB.

I problemi che si possono risolvere

Di seguito sono elencati i problemi che sarà possibile affrontare eseguendo l'avvio di Windows PE 2.0 dalla stessa partizione di Windows XP.

Ripristino completo del sistema Si tratta solo di una delle attività rese possibili dall'avvio di Windows PE direttamente dalla partizione di Windows XP. Poiché Windows PE 2.0 (come Windows PE 1.6) può essere avviato interamente su un RAMDisk, è possibile creare una nuova immagine dell'intero disco o utilizzare ImageX per ripristinare i file Windows XP, poiché non è necessario ripristinare l'intera partizione.

Se si consente agli utenti di eseguire l'avvio di Windows PE, essi potranno ripristinare i relativi sistemi anche lavorando in modalità remota. L'immagine potrebbe provenire da una partizione secondaria, una condivisione di rete (se gli utenti non saranno mobili), un disco rigido USB o un DVD di ripristino oppure, se si utilizza ImageX, sarà persino possibile memorizzarla sulla partizione da recuperare. Questo tipo di ripristino su disco è una valida soluzione per molti problemi (ad eccezione del danneggiamento fisico del disco). Non è ovviamente una soluzione altrettanto valida per il ripristino dei dati utente, a meno che i dati vengano prima protetti e quindi ripristinati come parte del ripristino. Per evitare perdite di questo tipo, è opportuno utilizzare profili mobili ed eseguire il backup dei dati dal computer. È inoltre necessario accertarsi che il meccanismo di ripristino utilizzato sia in grado di ridurre il rischio di qualsiasi potenziale perdita di dati da parte dell'utente (compresa la perdita dovuta alla reimpostazione delle chiavi di crittografia EFS).

Ripristino di file Windows PE fornisce anche un meccanismo per ottenere un sistema funzionante, anche quando non si riesce a eseguire l'avvio dell'installazione primaria di Windows. In questo caso sarà possibile eseguire l'avvio e il ripristino dei dati utenti su un altro sistema (purché siano disponibili sistemi di backup a caldo per gli utenti) o in un'altra posizione, in modo che l'utente possa iniziare a lavorare subito.

Ripristino del sistema Infine, l'avvio di Windows PE su Windows XP consente di ripristinare un sistema mediante l'esecuzione di un set di script di risoluzione dei problemi o una semplice applicazione di ripristino gestita dall'utente. Il processo è simile al ripristino completo del sistema, ma l'ambito risulterà più ristretto (e non vi saranno rischi per i dati dell'utente).

Ora che sono più chiari i vantaggi dell'avvio di Windows PE sulla partizione di Windows XP, si illustrerà cosa accade dietro le quinte, in modo che sia possibile applicare il processo a qualsiasi soluzione si desideri.

Prima di Windows Vista

Prima dell'avvento di Windows Vista, ecco come veniva eseguito l'avvio dei sistemi basati su BIOS/Record di avvio principale (MBR): Il BIOS rilevava il dispositivo di avvio (nel caso del disco rigido, al record MBR del disco). Il record MBR eseguiva il codice che specifica la partizione da cui eseguire l'avvio, ovvero della prima partizione per cui era impostato il flag di partizione attiva. Nelle prime versioni di diskpart, non era possibile rendere inattiva una partizione (vale a dire che non era possibile rimuovere il flag di partizione attiva). Per ovviare a questo problema è stata aggiunta un'opzione a diskpart. In caso contrario si sarebbe trattato della prima partizione della tabella delle partizioni con il flag di partizione attiva. La partizione contiene il settore di avvio che indica il codice successivo da eseguire. Da Windows NT a Windows Server® 2003, il codice da eseguire è in un file denominato ntldr, senza estensione del file. Se qualche volta si è formattato un disco, non si è installato Windows e si è quindi tentato di eseguire l'avvio, si sarà notato il messaggio di errore "NTLDR non trovato".

Per i lettori sarà interessante sapere che il file ntldr è completamente compatibile con le versioni precedenti, ma naturalmente non con le versioni future. Ne consegue che il file ntldr di Windows XP può eseguire l'avvio di Windows 2000, ma non viceversa. Per questo motivo, quando si intende eseguire un avvio doppio, è sempre importante installare per primo il sistema operativo meno recente. Poiché al file ntldr non è associato un numero di versione, è ancora più importante osservare queste indicazioni.

Il file Ntldr è un'applicazione in modalità reale (16 bit) che avvia NTDetect.com, che esegue il rivelamento dei dispositivi di base e avvia quindi il kernel, ntoskrnl.exe (che può essere uno di diversi file, sempre rinominato in ntoskrnl.exe). Il kernel è il componente fondamentale nel processo di avvio di Windows.

Questo riepilogo del processo di avvio è piuttosto semplicistico ed è stata omessa l'intera inizializzazione di Win32® che tuttavia non è attinente all'argomento dell'articolo. Se si desiderano ulteriori informazioni al riguardo, è consigliabile leggere Windows Internals, Fourth Edition di Mark Russinovich e David Solomon (Microsoft Press®, 2004).

Un altro aspetto importante è che, quando si esegue l'avvio da CD, l'Installazione di Windows e Windows PE eseguono setupldr.bin anziché ntldr. Questo file contiene in realtà codice di avvio leggermente diverso perché sia possibile eseguire l'avvio da CD (cosa impossibile per il file ntldr). Per avviare Windows PE 1.x, è quindi necessario rinominare setupldr.bin in ntldr e metterlo su disco. Inoltre il file non può caricare un file boot.ini (perché setupldr.bin è stato progettato proprio per l'avvio da CD e, di conseguenza, boot.ini non doveva essere necessario).

Dopo Windows Vista

Windows Vista ha modificato molte parti di questo processo. Windows Server 2008 lo modifica ulteriormente attivando IA32 (il supporto di 32 bit) per l'avvio da EFI, operazione che non è stato possibile effettuare al di fuori dei sistemi basati su Itanium. Per i sistemi basati su BIOS, i passaggi iniziali del processo di avvio sono in gran parte identici. La differenza principale è che BOOTMGR è il caricatore di avvio che viene inizializzato e che esegue quindi i passaggi successivi.

Cerca nella directory di avvio il file BCD, che è in realtà l'hive corrispondente del Registro di sistema. Il file BCD contiene le voci di avvio (compresa quella predefinita) da avviare. Vedere la Figura 1 per i tipi di immagine (i tipi di file eseguibili) e la Figura 2 per i tipi di applicazione specifici da avviare. Una o più di una di queste voci può essere un riferimento al file ntldr. Solo una delle voci può fare effettivamente riferimento al GUID noto utilizzato per caricare il file ntldr (vedere la quinta riga della Figura 3). BOOTMGR decide quindi la voce successiva da caricare, a seconda che si stia eseguendo l'avvio del sistema, che il sistema sia stato sospeso o che venga eseguito l'avvio su ntldr o su un altro Boot Manager (nel qual caso farebbe riferimento a un altro settore di avvio ed eseguirebbe il caricatore corrispondente). Questa è la situazione più comune quando si configura l'avvio doppio con un sistema operativo non Windows. È possibile trovare ulteriori informazioni all'indirizzo microsoft.com/whdc/system/platform/firmware/bcd.mspx.

Figure 3 Oggetti applicazione standard

Descrizione ID BCDEdit GUID
Windows Boot Manager {bootmgr} 9dea862c-5cdd-4e70-acc1-f32b344d4795
Boot Manager firmware {fwbootmgr} a5a30fa2-3d06-4e9f-b5f4-a01df9d1fcba
Tester memoria Windows {memdiag} b2721d73-1db4-4c62-bf78-c548a880142d
Applicazione Windows Resume Nessun alias 147aa509-0358-4473-b83b-d950dda00615
Caricatore di Windows preesistente {ntldr} 466f5a88-0af2-4f76-9038-095b170dc21c
Voce di avvio corrente {current} fa926493-6f1c-4193-a414-58f0b2456d1e
Voce di avvio predefinita {default} nessun GUID predefinito
     

Figure 2 Tipi di applicazione

Descrizione Valore Descrizione
Boot Manager firmware 0x1 Applicabile solo ai sistemi EFI.
Windows Boot Manager 0x2 Controlla il flusso di avvio. In un sistema ad avvio doppio, presenta all'utente un menu di selezione dell'avvio.
Caricatore di avvio di Windows 0x3 Carica una specifica versione o configurazione di Windows.
Applicazione Windows Resume 0x4 Ripristina Windows nello stato di esecuzione proprio di quando un computer si riattiva dalla sospensione.
Tester memoria Windows 0x5 Un'applicazione di diagnostica della memoria.
Ntldr 0x6 Applicabile solo ai sistemi BIOS PC/AT. Carica versioni di Windows precedenti a Windows Vista.
Settore di avvio 0x8 Applicazione in modalità reale a 16 bit. Applicabile solo ai sistemi BIOS PC/AT. Può essere utilizzato per riavviare il processo di avvio e caricare un sistema operativo non Windows.
     

Figure 1 Tipi di immagini

Descrizione Valore
Applicazione firmware 0x1
Applicazione di avvio 0x2
Oggetto basato su Ntldr 0x3
Applicazione in modalità reale 0x4
   

Si noterà che la nuova infrastruttura di avvio di Windows Vista è molto più organizzata rispetto alle versioni precedenti: al di fuori di bootmgr, tutto il codice di avvio si trova nella directory principale/di avvio e viene passato ai file binari specifici di Windows quando BCD lo specifica.

Avvio di Windows XP e Windows PE 2.0

Ora probabilmente si inizia a comprendere come Windows PE, utilizzando il Boot Manager di Windows Vista, possa agire da intermediario e consentire di continuare ad avviare Windows XP o le versioni precedenti di Windows aggiungendo Windows PE 2.0 come strumento di ripristino integrato.

Certo sarà necessario aggiungere un altro passaggio al processo di avvio, ma si tratta di un passaggio progettato da Microsoft. Con la consapevolezza che la nuova infrastruttura di bootmgr doveva essere compatibile con le versioni precedenti del file ntldr esistenti e con gli altri Boot Manager di terze parti, bootmgr è stato creato intenzionalmente per supportare tali soluzioni.

Dopo aver esaminato come avviene l'avvio di Windows e come funziona il nuovo BCD, è il momento di scoprire come sia possibile unire tali conoscenze e utilizzare Windows PE 2.0 nelle installazioni di Windows XP esistenti. Esistono due modi per impostare il settore di avvio di Windows Vista, la parte di codice che chiede al sistema di avviare bootmgr. Uno consiste nell'utilizzare diskpart e creare e formattare una nuova partizione con Windows PE 2.0. Ma non si tratta di un'opzione applicabile in questo caso, perché esiste già un'installazione di Windows XP che non si può rischiare di danneggiare o spostare. È possibile seguire invece questa procedura:

  1. Accertarsi di disporre di una copia di bootsect.exe e di bcdedit.exe sul CD di avvio di Windows PE 2.0 (è possibile trovare entrambi sul DVD di installazione di Windows Vista).
  2. Avviare il sistema Windows XP con il CD di Windows PE 2.0.
  3. Una volta eseguito l'avvio, eseguire il seguente comando:
    bootsect.exe /NT60 ALL

In questo modo il settore di avvio compatibile con Windows Vista in grado di avviare bootmgr verrà impostato come settore di avvio.

4. Copiare Boot Manager sul disco rigido:

    xcopy BOOTMGR C:\BOOTMGR /I

5. Copiare il file boot.SDI nella directory \BOOT sul disco rigido. Prima di eseguire l'avvio sarà necessario farne una copia, dato che verrà bloccato e non sarà possibile copiarlo durante l'esecuzione di Windows PE:

    xcopy BOOT.SDI C:\BOOT\ 

Correggere il percorso di origine di conseguenza.

6. Copiare boot.WIM sul disco rigido: Come per il file SDI, dovrebbe essere disponibile un'altra copia perché non sarà possibile copiare il file durante l'esecuzione:

    xcopy BOOT.WIM C:\BOOT\BOOT.WIM 

Correggere il percorso di origine di conseguenza.

7. Creare adesso un nuovo archivio BCD:

    bcdedit /createstore

8. Creare quindi le voci BCD per caricare Windows PE:

    bcdedit /create {ramdiskoptions} /d "Boot Windows PE"
    bcdedit /set {ramdiskoptions} ramdisksdidevice partition=c:
    bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
    bcdedit /create /d "Windows PE" /application OSLOADER

9. L'ultima riga restituirà un GUID. Sostituire {YOURGUID} con il GUID restituito. Queste sono le voci di RAMDisk che consentono l'avvio di Windows PE dal disco rigido, riportate nella Figura 4.

Figure 4 Le voci di RAMDisk che consentono l'avvio di Windows PE dal disco rigido

bcdedit /set {YOURGUID} device ramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} path \windows\system32\winload.exe
bcdedit /{YOURGUID} osdeviceramdisk=[c:]\boot\boot.wim,{ramdiskoptions}
bcdedit /set{YOURGUID} systemroot \windows
bcdedit /set{YOURGUID} winpe yes
bcdedit /set {YOURGUID} detecthal yes

10. Creare adesso le voci di bootmgr per consentire l'avvio di Boot Manager:

    bcdedit /create {bootmgr} /d "Boot Manager"
    bcdedit /set {bootmgr} device boot

11. Impostare infine una voce di BCD per l'installazione di Windows esistente (modificare il testo visualizzato da Windows XP in base a come si desidera che venga visualizzato nel menu di avvio di Boot Manager). L'ultimo comando imposta anche tale voce in modo che sia la prima voce (predefinita) nel menu di avvio:

    bcdedit /create {ntldr} /d "Windows XP"
    bcdedit /set {ntldr} device partition=C:
    bcdedit /set {ntldr} path \ntldr
    bcdedit /displayorder {ntldr} /addfirst

12. Dovrebbe ora essere possibile riavviare il sistema e fare in modo che avvii l'installazione precedente di Windows o Windows PE 2.0 selezionando la voce appropriata del menu di avvio. Nella Figura 5 è illustrato l'output di esempio di bcdedit /enum all. Con questo comando si ottiene un elenco con tutte le voci in BCD dopo l'aggiunta delle voci (da Windows PE 1.6).

Input di esempio

Input di esempio  (Fare clic sull'immagine per ingrandirla)

Sto lavorando a uno script che consenta di eseguire questa attività automaticamente. Al momento lo script è in grado di copiare solo i file di avvio sul disco rigido e configurare le voci di BCD. Non è ancora in grado di impostare il settore di avvio come nuovo valore di Windows Server 2008 durante l'esecuzione di Windows: l'operazione deve essere eseguita non in linea, in Windows PE. È possibile trovare lo script nel download disponibile nel sito Web TechNet Magazine all'indirizzo technetmagazine.com. Per eseguire lo script, è necessario che nella stessa directory del VBScript che si sta eseguendo siano presenti gli elementi seguenti:

  1. BCDEdit
  2. BOOTMGR
  3. Una directory \BOOT\ (dal supporto di Windows Vista o Windows PE 2.0)
  4. Una directory \SOURCES\ con un file BOOT-WIM di Windows PE 2.0 valido e avviabile

Lo script creerà il BCD e copierà i file di avvio appropriati. Dopo aver eseguito l'avvio con Windows PE e aver eseguito il bootsect, dovrebbe essere possibile eseguire l'avvio doppio.

Annullamento dell'avvio doppio

Annullare l'avvio doppio è un'operazione ancora più semplice della configurazione. È solo necessario ripristinare il settore di avvio sul settore di avvio precedente a Windows Vista eseguendo il comando seguente:

bootsect.exe /NT52 ALL

Una volta ripristinato, sarà possibile eliminare il bootmgr e la directory \boot. Al riavvio successivo, il settore di avvio forzerà l'avvio di ntldr e rimuoverà completamente Windows PE 2.0 e tutti i file binari di avvio di Windows Vista dal flusso di avvio.

Wes Miller è un Technical Product Manager di Initiate Systems (InitiateSystems.com) ad Austin, Texas. In passato ha lavorato per Winternals Software e per Microsoft in qualità di Program Manager. È possibile contattarlo all'indirizzo technet@getwired.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.