A partire da Windows NT 4, il boot loader è stato incluso nella fornitura delle versioni “principali” di Windows. Il boot loader avvia le versioni di Windows installate e già esistenti. Se installate un vecchio Windows o un altro sistema operativo senza essere preparati, potreste avere una brutta sorpresa, poiché il boot loader può essere danneggiato molto facilmente. In questo articolo spieghiamo la struttura, la riparazione e l’estensione del boot loader.
Indice dei contenuti
1. struttura e procedura del boot loader
Il boot loader si scrive sulla prima partizione primaria (visibile) del sistema, di solito l’unità C:, anche se Windows NT/2000/XP è stato installato su un’altra partizione. Se si utilizza un “vero” boot manager prima del boot loader NT, il boot loader si trova sulla prima partizione visibile per NT.
L’installazione scrive il codice di avvio nel settore di avvio di questa prima partizione di sistema.
Il codice di avvio richiama automaticamente il programma ntldr all’avvio, che avvia ntdetect.com e valuta il file boot.ini. Per alcuni controllori viene caricato anche il driver ntboodd.sys.
1.1 Allocazione della partizione in boot.ini
Il file boot.ini elenca i sistemi operativi che il boot loader deve o può avviare da quale posizione:
Un Boot.ini “normale” ha il seguente aspetto:
[boot loader]
timeout=2
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[sistemi operativi]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS=”Microsoft Windows XP Professional” /fastdetect
La voce “default” specifica il sistema operativo che verrà avviato automaticamente allo scadere del contatore (=timeout). Se ci sono più voci sotto “sistemi operativi”, la voce “default” ha senso.
La voce “sistemi operativi” contiene tutti i sistemi operativi presenti nel sistema al momento dell’impostazione del boot loader. Tuttavia, le voci possono essere ampliate anche in seguito.
La specificazione delle partizioni avviene secondo le cosiddette specifiche Advanced RISC Computing (ARC).
multi(X)disco(Y)rdisk(Z)partizione(W)WINDOWS=”NOME”
Per la maggior parte dei sistemi, i valori multi(X) e disk(Y) “0” sono standard.
Solo per i dispositivi che non consentono l’accesso al disco di avvio tramite l’INT13 del BIOS, la voce in Boot.ini deve essere adattata appositamente.
La voce rdisk(Z) specifica l’unità. Il conteggio inizia da “0”.
La voce partition(W) specifica la partizione. Tuttavia, il metodo di conteggio non è facile da capire. Windows numera le partizioni di un disco rigido per tipo e non in modo consecutivo. A partire da “1”, vengono contate prima le unità primarie e poi quelle logiche.
Esempio:
Windows è installato sulla prima unità logica di un disco rigido con una partizione primaria e una estesa in cui si trovano 2 unità logiche. -> W=2; multi(0)disk(0)rdisk(0)partition(2)WINNT=”Windows”/fastdetect
Se successivamente l’ordine delle partizioni viene modificato, ad esempio viene creata una seconda partizione primaria prima dell’unità estesa, anche lo spazio della suddetta installazione viene spostato in W=3. Se il Boot.ini non viene modificato, il boot loader non può più avviare il sistema.
Ripristinare il boot loader
2.1 Windows 2000 corrompe XP
Se si installa Windows 2000 o NT dopo un Windows XP esistente, il boot loader viene danneggiato in alcuni punti. In particolare, Windows 2000, ad esempio, sovrascrive il file ntldr con una versione con cui Windows XP non può più avviarsi.
Il problema può essere facilmente risolto copiando i file danneggiati da qualsiasi console di Windows o di ripristino all’unità di avvio:
COPIA x:I386NTLDR C:
2.1 Ricostruzione del boot loader
Se il bootloader NT è ulteriormente danneggiato, è necessario un ulteriore lavoro manuale.
A tale scopo, avviare il computer dal CD di Windows XP (se necessario, modificare la sequenza di avvio nel BIOS), quindi passare alla modalità di riparazione tramite la console di ripristino premendo il tasto “R”. Se si dispone solo di un CD di ripristino, è possibile utilizzare anche i dischi di installazione di Windows 2000 o XP, scaricabili da Microsoft.
Ora ci si trova nella console di ripristino.
Usare fixboot C: per creare un nuovo settore di avvio.
Se altri file sull’unità di avvio sono stati sovrascritti (formattazione del disco, eliminazione di file), è necessario creare altri file.
Prima copia
COPIA x:I386NTLDR C:
COPIA x:I386NTDETECT.COM C:
sul disco rigido (notare i percorsi X e C).
Immettere quindi il comando bootcfg /rebuild. Il programma cerca le installazioni di Windows e chiede il nome del display dei “reperti”. Il risultato è un nuovo boot.ini. Ulteriori parametri di bootcfg sono spiegati nell’articolo KB 291980.
Per riavviare il computer e uscire dalla console di ripristino, è sufficiente digitare exit.
2.2 Codice di avvio sovrascritto da Win9x/ME – Salvataggio per l’inclusione nel bootloader NT
Una successiva installazione di Windows 9x/ME corrompe il codice del settore di avvio e lo sovrascrive con il proprio codice. La conseguenza è che il file ntdlr non viene più caricato.
Il trucco consiste nell’estrarre il codice Win9x dal settore di avvio e ricollegarlo al boot loader di Windows 2000/XP.
Per farlo, estrarre prima il settore di avvio della partizione di avvio in un file con lo strumento DOS gratuito BootPart. Nel nostro caso il comando bootpart 0sarebbe C:WIN.98
Bootpart, notare i parametri |
Quindi ripristinare il boot loader come descritto al punto 2.1 e continuare con il punto 3.2.
3. successivamente aggiungere un nuovo sistema operativo al file boot.ini.
3.1 Aggiunta di Windows NT, 2000 o XP
È possibile aggiungere altri sistemi NT/2000/XP al Boot.ini semplicemente specificando la partizione di destinazione. Il file Boot.ini è un file nascosto e di sola lettura nella root della prima partizione visibile.
Per modificarlo, è necessario prima rimuovere la protezione da scrittura e “nasconderlo” per un breve periodo. Questo si può fare facilmente tramite il Pannello di controllo -> Sistema -> scheda “Avanzate” e lì sotto Avvio e ripristino -> Impostazioni e nella finestra seguente “Modifica”.
Semplicemente nel Boot.ini |
Semplicemente nel Boot.ini |
Nella sezione “sistemi operativi”, inserire il target del nuovo Windows NT/2000/XP secondo le spiegazioni fornite in precedenza al punto 1.1:
multi(X)disco(Y)rdisk(Z)partizione(W)WINDOWS=”NOME”
Esempio:
multi(0)disco(0)rdisk(0)partizione(2)WINNT=”Windows” /fastdetect.
In questo caso Windows è installato su un disco rigido con una partizione primaria e una estesa, in cui sono presenti 2 unità logiche, sulla prima unità logica.
3.2 Includere Windows 9x o altri sistemi operativi
I sistemi operativi “stranieri” possono essere inclusi nel file boot.ini in due fasi.
In primo luogo, è necessario il settore di avvio del sistema operativo, come scritto nel file WIN.98 al punto 2.2. Non importa se il settore di avvio salvato è Windows 98, Windows 95, Windows ME o DOS (o un altro sistema operativo).
Si crea una nuova voce nel file boot.ini nella sezione “sistemi operativi” per ogni sistema operativo di cui si è salvato il settore di avvio. Per il nostro Windows 98 si tratta di:
C:win.98=”Windows 98″.
4) Meglio prevenire che curare: copiare i file di avvio
Se lavorate spesso con altri sistemi o con partizioni modificate, dovreste fare una copia dei file di avvio. A tale scopo, formattate un dischetto con Windows 2000/XP, ma senza la funzione “Crea disco di avvio MS-DOS”. Il settore di avvio del dischetto può quindi avviare ntldr. I restanti file ntldr, ntdetect.com e boot.ini vengono copiati manualmente sul dischetto. Con questo dischetto è possibile avviare il sistema anche se il boot loader della partizione di avvio è danneggiato.
Con questo piccolo aiuto, il funzionamento simultaneo di 2 sistemi diversi dovrebbe funzionare senza problemi. Tuttavia, vorremmo sottolineare a questo punto che la scelta migliore per le operazioni più complesse è un boot manager separato. La scelta è molto ampia e spazia da spartani freeware a costosi prodotti a prezzo pieno.