Master Boot Record e boot.ini in WindowsNT/2k/XP
Versione 1.0 - INCOMPLETA - (Dicembre 2002)

1. Introduzione
Quello che segue dovrebbe aiutare a capire cos'è e come funziona il processo di avvio di Windows NT, Windows 2000 e XP, in particolare come funziona il Master Boot Record (MBR) e com'è strutturato il file boot.ini. Cercherò anche di fornire alcuni suggerimenti in caso di problemi di avvio di Windows NT o 2000: queste informazioni sono ricavate direttamente dal sito della Microsoft ed essendo molto tecniche richiedono una conoscenza e una padronanza dell'argomento alta: il rischio di combinare qualche guaio c'è sempre e questa volta le conseguenze potrebbero essere particolarmente gravi.
Quando possibile cercherò di far riferimento a un articolo della Knowledge Base della Microsoft riportando il numero dello stesso in modo da aiutare chi volesse approfondire l'argomento: se il codice comincia con Q l'articolo è in inglese, se comincia con I invece è in italiano.


2.Cosa succede all'avvio di un computer

Quando un computer basato su piattaforma Intel (quindi la maggior parte) viene acceso, prima di tutto viene avviato il POST (Power On Set-Test) che controlla la configurazionedel PC dal BIOS. Eseguito il POST il computer legge il Master Boot Record (MBR) dell'hard disk indicato come attivo dal BIOS (Q99743, Q100323, I114841).
L'MBR è una parte dell'hard disk che contiene informazioni molto importanti: un piccolo programma di gestione, informazioni su come è partizionato l'HD, dove è situato il boot record e altre cosette molto delicate. L'MBR corrisponde al primo settore dell'HD (cilindro 0, testina 0, settore 1) e qualsiasi modifica viene fatta alla struttura di un HD (creazione di una partizione, definizione del file system, tipo di partizione, ecc.) viene memorizzata nell'MBR.
Sotto WinNT (e 2000) l'MBR manda in esecuzione il file NTLDR che a sua volta legge il boot.ini che permette di selezionare il sistema operativo da caricare in caso di sistemi multi-boot. In seguito alla lettura del boot.ini, NTLDR esegue NTDTECT.COM che contiene la lista dell'hardware installato. Se il sistema operativo scelto è diverso da WinNT o Win2000 viene caricato il file BOOTSECT.DOS altrimenti il controllo passa al Kernel di NT (NTOSKRNL.EXE), cioè la base del sistema operativo WinNT, dopodiché vengono caricati tutti i driver e la configurazione del sistema.


3.Il file boot.ini
Il file boot.ini è un semplice file di testo che permette, quando viene caricato dal sistema, di poter scegliere quali operazioni eseguire ed eventualmente quale sistema operativo caricare se il computer ne ha installati più di uno (Q102873, Q99743).
Il file è impostato come di sistema, invisibile e di sola lettura quindi per leggerlo o modificarlo bisogna cambiare queste voci dalle opzioni di visualizzazione dei file del Pannello di Controllo e dalle proprietà del file stesso.
Brevemente: il file boot.ini principalmente segnala dove si trova la partizione contenente Windows NT (o 2000) per permetterne l'avvio. Questa informazione viene data principalmente da una stringa di testo ch utilizza delle specifiche chiamate comunemente ARC (Advanced RISC Computing) e che è in grado di gestire facilmente computer basati su tecnologia Intel x86 o RISC e dischi fissi EIDE o SCSI.
La tecnologia RISC necessita di un ARC più complesso che qui non interessa visto che la maggioranza degli utenti ha computer basati su piattaforma Intel x86, mentre vale la pena di affrontare le differenze tra gli HD EIDE e quelli SCSI. Normalmente, durante l'installazione del sistema operativo, è la stessa procedura d'installazione che si occupa di creare un boot.ini conforme all'architettura del PC. Se il computer non ha hard disk SCSI, l'ARC ha una struttura del tipo:

multi(x)disk(y)rdisk(z)partition(w)\winnt
dove x è sempre uguale a 0, y è sempre uguale a 0, z è compreso tra 0 e 3 e si riferisce all'HD dove è installato WinNT e w è il numero della partizione che contiene WinNT e parte da 1 in su.
X è 0 perché identifica il primo controller e il boot può avvenire solo da un Hd montato su questo. Y è 0 perché e strettamente correlato con x e con la struttura di tipo multi(x) sarà sempre uguale a 0. Z può identificare al massimo 4 HD (due per canale) installati su un computer (0 è il primo HD master del primo canale IDE). W identifica la partizione dove è installato WinNT assegnando un determinato numero identificando prima le partizioni attive e poi quelle logiche e contrariamente a x, y e z che cominciano da 0, ha come primo valore valido 1. \winnt identifica la cartella dove è installato il sistema operativo.
Nel caso il sistema operativo sia installato su un hard disk SCSI, a causa delle differenze strutturali rispetto ai dischi IDE, la struttura dell'ARC è leggermente diversa rispetto a quella precedentemente vista:

scsi(x)disk(y)rdisk(z)partition(w)\winnt
dove x è il numero del controller SCSI così come viene identificato dal driver NTBOOTDD.SYS, y è lo SCSI ID del disco principale, z è il numero dell'unità logica (LUN) del disco principale ed è sempre uguale a 0 e w è il numero della partizione (come per i disci IDE).
Sui computer su piattaforma Intel il driver del controller SCSI viene copiato e nominato come NTBOOTDD.SYS che si trova nella directory principale (generalmente in C:) e si occupa della gestione del disco fisso usato per l'avvio. (Per la cronaca: nei computer RISC il file non è necessario perché il driver è contenuto direttamente all'interno del firmware).


4.Problemi di avvio e possibili soluzioni

Alcuni problemi al boot possono impedire il caricamento del sistema operativo, in particolare se la tabella delle partizioni non è aggiornata, se il file boot.ini esattamente configurato, o se l'MBR è rovinato o addirittura se è rimasto infettato da un boot-virus.
In caso di problemi all'avvio i sintomi possono passare da oscuri messaggi d'errore a preoccupanti schermate nere, senza possibilità di andare avanti nel processo di boot. Come si può ovviare a questi problemi?
In generale qualsiasi problema si verifichi all'avvio può essere risolto andando a riscrivere la tabella delle partizioni aggiornata e forzando Windows a riconoscere la nuova tabella.
Se la partizione d'avvio è FAT 16 o FAT32 (ricordate che WinNT non riconosce la FAT32 quindi può essere installato solo su FAT o NTSF, Windows 2000 invece anche su FAT32) bisogna disporre di un floppy contenente il file sys.com (a volte i dischi di ripristino non contengono questo file che va quindi scompattato manualmente dal CD di installazione di Windows). Avviato il computer da dischetto, dopo il caricamento dell'MS-DOS bisogna dare il comando A:\SYS C: che trasferisce i file di sistema DOS nell'unità specificata (in questo caso C:\) e va a sovrascrivere il file di caricamento di Windows NT/2000, per cui al prossimo avvio bisognerà ripristinare il processo di avvio di WinNT/2000.
Per ripristinare il boot di NT bisogna avviare il CD di installazione da BIOS oppure utilizzare i floppy di installazione (più avanti vedremo come ottenerli). Alla domanda se installare una nuova copia del sistema operativo o se ripararne una esistente basterà premere la lettera R e in seguito scegliere l'autoriparazione: in questo modo sarà automaticamente riscritto il processo di boot con la tabella delle partizioni aggiornata e sarà di nuovo possibile caricare Windows.
Nel caso di partizioni di avvio NTFS non è necessario reinstallare i file di sistema MS-DOS e sarà sufficiente procedere direttamente alla procedura di riparazione dei file di sistema da CD. Infatti se una partizione NTFS non si avvia questo può essere dovuto solo a problemi all'MBR o a uno dei seguenti file: NTLDR, NTDETCT, BOOT.INI o NTBOOTDD.SYS (quest'ultimo non è sempre presente, dipende dalla configurazione del sistema), corrotti, danneggiati o infetti da virus.
Con una conoscenza approfondita dell'MS-DOS è quindi possibile semplicemente ripristinare questi file copiandoli direttamente dal CD di installazione e creando il file boot.ini manualmente con un editor di testi. Chiaramente questa procedura è piuttosto delicata e sicuramente il processo di riparazione automatico è più sicuro.


5.Problemi all'avvio di sistemi multi-boot

La procedura di riparazione vista precedentemente permette di recuperare anche sistemi multi-boot, cioè dove sono presenti più sistemi operativi.
La regola generale per l'installazione di più sistemi operativi è che, per permettere il dual-boot, WinNT/2000 deve essere installato per ultimo in modo da riconoscere automaticamente gli altri sistemi già installati.
Tra i vari sistemi operativi il più elastico è sicuramente Win2000 che può essere installato in qualsiasi partizione di qualsiasi disco con un qualsiasi file system senza creare problemi. Gli altri sistemi Microsoft hanno invece delle controindicazioni: per esempio Windows NT, non riconoscendo la FAT32, non può essere installato su un sistema dove c'è Win98 o WinME installati in una partizione con questo file system; Windows 98 deve essere installato solo sul disco di avvio e questo provocherebbe, in un sistema multi-boot con avvio su un altro disco con Win2000, l'impossibilità del suo riconoscimento e caricamento da parte del boot.ini. Per qualsiasi configurazione con più sistemi operativi bisogna attenersi strettamente alle indicazioni fornite dalla Microsoft che sono contenute nei numerosi file di testo (.txt) nei CD di installazione perché non tutto è possibile.


6.Ripristinare l'MBR

Un discorso a parte merita il Master Boot Record. Se l'MBR per una qualsiasi ragione, viene rovinato o infettato, si può rimediare utilizzando l'istruzione fdisk /mbr che non è documentata ufficialmente dalla Microsoft ma che la Knowledge Base illustra abbondantemente (Q69013).
In molti non sanno però che l'istruzione suddetta riscrive solo una parte dell'MBR e non tutto, in particolare solo la parte iniziale del settore di boot, cioè i primi 446 byte che contengono il programma che esegue la routine di bootstrap (è il programma che ha lo scopo di recuperare informazioni per determinare quali partizioni sono eseguibili), quindi non cancella o aggiorna la tabella delle partizioni che invece si trova nell'ultima parte del settore di boot.
L'istruzione fdisk /mbr inoltre agisce solo sul disco di sistema e non può riscrivere l'MBR di un disco secondario. Il fatto che questa istruzione riscriva solo la prima parte del settore vuol dire che, se per caso il PC è stato infettato da un boot-virus (MyBomber, Stealth.B, Monkey.B, ecc.) la sua funzione è inutile perché questi virus attaccano anche la tabella delle partizioni che quindi rimarrebbe infetta (Q166454).

Per ripristinare un MBR corrotto quindi, valgono le stesse regole illustrate nel paragrafo 6.6.3 cioè bisogna usare il CD di installazione per riparare i file di avvio.
Impostato da BIOS l'avvio da CD e inserito il CD di installazione di WinNT/2000, parte automaticamente la procedura di installazione. Dopo il controllo dell'hardware verrà chiesto se installare un nuovo Sietema Operativo o ripararne uno già installato e premendo la R partirà la procedura di riparazione automatica.
Scegliendo, alla richiesta successiva, di riparare tutti i possibili file di avvio danneggiati, si avvierà la procedura che ripristina l'MBR, aggiorna la tabella delle partizioni e i file di avvio (boot.ini compreso). A questo punto il sistema sarà di nuovo avviabile.
Nel caso di Win9x, per ripristinare l'MBR si deve usare un floppy di avvio con MS-DOS completo di tutti i comandi (a volte il command.com non viene copiato completo) e, dal prompt del DOS, dare il comando SYS C:. Questo comando, oltre a copiare i file di sistema per permettere l'avvio dei sistemi operativi basati sul DOS (95/98/98SE) ripara il settore di avvio e aggiorna la tabella delle partizioni (Q102793, Q155053).


7.Floppy di avvio di WinNT, Win2000
Il nuovo WinME non è esente dai problemi di arresto che erano stati un vero e proprio calvario per gli utenti di Win98SE. In realtà, i problemi di WinME sono diversi da quelli del precedente Win98 infatti sotto WinME la machina viene spenta troppo velocemente e il sistema non ha modo di effettuare tutte le operazioni. Questo provoca l'esecuzione dello Scan Disk al successivo avvio della macchina.

La Microsoft ha rilasciato una patch di correzione del problema non molto adatta agli utenti poco pratici del registro di configurazione. La procedura di aggiornamento prevede di scaricare un driver aggiornato e corretto e di modificare delle voci direttamente nel registro Windows, operazione sempre piuttosto delicata.
Chi vuole informazioni più precise mi può scrivere o cercare l'articolo originale nella Knowledge Base della Microsoft (vedi i miei link) con numero Q273017

Glossario