Aufbau:
1 [boot loader]
2 timeout=-1
3 default=multi(0)disk(0)rdisk(0)partition(2) \Windows
4 [operating systems]
5 multi(0)disk(0)rdisk(0)partition(2)\Windows= “Microsoft Windows XP Professional“ /fastdetect
6 multi(0)disk(0)rdisk(1)partition(1)\Winnt= “Microsoft Windows 2000 Professional“ /fastdetect
7 C:\=“Microsoft Windows 98SE“
8 C:\Boot.deb=“Debian GNU/Linux 3.1“
Das ist eine typische BOOT.INI eines Multiboot-Systems. Die Zeilennummern am Anfang dienen der Übersicht! Analyse Zeile für Zeile:
1 [boot loader]
Fehlt diese Zeile, so wird der erste Eintrag nach [Operating Systems] ohne Auswahlmenü und Wartezeit geladen.
2 timeout=-1
Timeout gibt die Wartezeit in Sekunden an, in der das Bootmenü zur
Auswahl des zu startenden Betriebssystems angezeigt wird. Ist die Zeit
verstrichen, wird das unter default=
angegebene Betriebssystem geladen. Im Beispiel ist ein negativer Wert
angegeben. Dies zwingt NTLDR dazu, ewig und drei Tage auf die Auswahl
des Betriebssystems zu warten. Dummerweise kennt keines der
Standardwerkzeuge von Microsoft einen negativen Wert für Timeout. Das
Betrachten der BOOT.INI in Msconfig Register BOOT.INI
und der beherzte Klick auf Abbrechen führen dazu, dass Timeout
plötzlich auf 3 Sekunden gesetzt ist. Dasselbe gilt für den Weg über Systemeigenschaften / Erweitert / bei Starten und Wiederherstellen einmal auf Einstellungen und dann auf Abbrechen geklickt -> 3 Sekunden.
3 default=multi(0)disk(0)rdisk(0)partition(2) \Windows
In der Default-Zeile wird das nach Ablauf der Wartezeit zu startende Betriebssystem angegeben. Für Win98SE würde der Eintrag: default=c:\ lauten, für Debian default=c:\boot.deb. Bei Windows 2000 default=multi(0)disk(0)rdisk(1)partition(1)\Winnt
Fehlt die Zeile oder Default zeigt auf ein nicht unter [Operating Systems] eingetragenes OS, wird das erste unter [Operating Systems] eingetragene OS kurzerhand zum Standard erklärt.
4 [operating systems]
Eine Auflistung der vorhandenen Betriebssysteme. Dasselbe
Betriebssystem kann hier auch mehrfach mit unterschiedlichen Parametern
aufgeführt werden, z.B. mit der /3GB Option, wenn Datenbanken diese benötigen bzw. man hin und wieder auch spielen will.
Fehlt diese Zeile, kann man nur noch „zwischen“ dem in default angegebenen System wechseln. Im Beispiel würde NTLDR 4-mal Windows XP anbieten.
Fehlt zusätzlich noch [boot loader], ist das gleichzusetzen mit dem vollständigen Fehlen der BOOT.INI, siehe Zeile 9
5 multi(0)disk(0)rdisk(0)partition(2)\Windows= “Microsoft Windows XP Professional“ /fastdetect
Auf der 2-ten Partition der 1-ten Festplatte (dies betrifft rdisk) befindet sich im Verzeichnis \WINDOWS eine XP-Installation – anscheinend ohne SP2.
6 multi(0)disk(0)rdisk(1)partition(1) \Winnt=“Microsoft Windows 2000 Professional“ /fastdetect
Auf der 1-ten Partition der 2-ten Festplatte befindet sich im Verzeichnis \WINNT eine 2000-Installation.
7 C:\=“Microsoft Windows 98SE“
Hier ist nicht ersichtlich, auf welcher Partition sich Windows 98
befindet. Der erste Schnellschluss, dass sich Win98 auf derselben
Partition wie die BOOT.INI befindet, ist ein falscher. Es befindet sich
auf der 4ten Partition, die aktuelle ist mit NTFS formatiert.
Dieses wird dadurch gestartet, dass NTLDR den Win98-Bootsektor, der sich in der Datei c:\bootsect.dos befindet, in den Speicher lädt, der Startcode wird ausgeführt und übernimmt die Steuerung des Rechners.
8 C:\Boot.deb=“Debian GNU/Linux 3.1“
Wo sich die Linux-Installation befindet, ist auch hier nicht
ersichtlich. Der Mechanismus ist derselbe wie bei 7, der in der Datei c:\boot.deb vorhandene Bootsektor wird in den Speicher geladen und gestartet.
9 Die Boot.ini fehlt.
In diesem Fall informiert NTLDR über eine „Fehlende oder Fehlerhafte Boot.ini“
und sucht beginnend mit der aktiven Partition nach einer Windows-NT-
Installation und startet diese. Allerdings klappt das nur, wenn sich
die NT- Installation mit einem multi()-Aufruf starten lässt. Sind scsi() oder gar signature()-Aufrufe notwendig, scheitert der Start ohne BOOT.INI. Im Beispiel würde XP jedoch starten.
Obiges Multiboot-System veranschaulicht – so gut es hier eben möglich ist.
Platte 1:[Linux Swap][NTFS wXP ][NTFS Daten][FAT32 w98]
8GB_____:[128MB_____][3GB______][3GB_Aktiv_][2GB______]
Platte 2:[NTFS w2000][Ext3 linux Root][Ext3 Linux home]
8GB_____:[3GB_______][3GB____________][2GB____________]
(Alle Partitionen sind Primär)
ARC-Pfade
In der BOOT.INI werden die Pfade nach der ARC-Namenskonvention (Advanced RISC Computing) definiert. - Es gibt 3 Formate:
multi(W)disk(X)rdisk(Y)partition(Z)\ %systemroot%=“Beschreibung“ /Parameter
scsi(W)disk(X)rdisk(Y)partition(Z)\ %systemroot%=“Beschreibung“ /Parameter
signature(V)disk(X)rdisk(Y)partition(Z)\ %systemroot%=“Beschreibung“ /Parameter
Zusätzlich ist noch das Starten von in Dateien gespeicherten
Bootsektoren möglich. NTLDR lädt diesen Bootsektor dann in den Speicher
und übergibt die Steuerung des Computers dann an den enthaltenen
Startcode. Damit ist es möglich, auch MSDOS, UNIX, Linux, *BSD etc. zu
starten.
Die Multi()-Syntax
Hiermit wird NTLDR angewiesen, die Systemdateien mittels
SystemBIOS-Aufrufen zu laden. Dazu verwendet NTLDR Interrupt-13-
Firmwareanweisungen, um zum Beispiel die NTOSKRNL.EXE zu finden. Die
multi()-Syntax wird für alle Rechner verwendet, die ATA- und
SCSI-Datenträger über INT-13 unterstützen.
multi(W)disk(X)rdisk(Y)partition(Z)\%systemroot%= “Beschreibung“
W -> Gibt die Nummer des Laufwerkscontrollers an, in der Regel 0. Der erste gültige Wert ist 0.
X -> Ist in der multi()-syntax immer 0
Y -> Gibt eine Festplatte an, die an den Laufwerkscontroller (W)
angeschlossen ist. Bei ATA-Controllern liegt dieser Wert normalerweise
zwischen 0 und 3. Bei SCSI-Adaptern je nach Typ zwischen 0 und 7 bzw. 0
und 15. Der erste gültige Wert ist 0.
Z -> Gibt die Partitionsnummer auf der Festplatte (Y) an, die am
Laufwerkscontroller(W) angeschlossen ist. Alle Partitionen erhalten
eine Nummer. Der erste gültige Wert ist 1.
Die Scsi()-Syntax
Hiermit wird NTLDR darüber informiert, dass der SCSI-Adapter INT-13
Aufrufe nicht unterstützt. NTLDR benutzt daher die NTBOOTDD.SYS, um die
Dateien zu laden. NTBOOTDD.SYS ist eine Kopie des zum Adapter passenden
Treibers.
scsi(W)disk(X)rdisk(Y)partition(Z)\%systemroot%= “Beschreibung“
W -> Gibt die Nummer des Laufwerkscontrollers an, in der Regel 0. Der erste gültige Wert ist 0.
X -> Gibt eine Festplatte an, die an den Laufwerkscontroller (W)
angeschlossen ist. Bei SCSI-Adaptern je nach Typ zwischen 0 und 7 bzw.
0 und 15. Der erste gültige Wert ist 0.
Y -> Gibt die logische SCSI-Gerätenummer (LUN) des Datenträgers an,
der die Startpartition enthält. Dieser Wert ist in der Regel (0). Der
erste gültige Wert ist 0.
Z -> Gibt die Partitionsnummer auf der Festplatte (Y) an, die am
Laufwerkscontroller(W) angeschlossen ist. Alle Partitionen erhalten
eine Nummer. Der erste gültige Wert ist 1.
Die Signature()-Syntax
Kommt nur in wenigen Ausnahmefällen zum Einsatz. Typische Szenarien
sind zusätzliche Laufwerkscontroller, dabei ist es unerheblich, ob es
sich um ATA oder SCSI-Laufwerke handelt. Die Signature()-Syntax
informiert NTLDR über den Standort des Datenträgers anhand der in (V)
angegebenen Datenträgersignatur. Dabei spielt es keine Rolle, an
welchem Controller die Platte angeschlossen ist.
Die Datenträgersignatur ist eine global eindeutige Kennung (Globally
Unique Identifier -> GUID), die während der Textmodusphase von
Windows aus Informationen des MBR generiert und auf den Datenträger
geschrieben wird. Mit dieser 128-Bit-Hexadezimalzahl wird der
Datenräger eindeutig gekennzeichnet. Signatur() nutzt allerdings nur
die ersten 32-Bit dieser GUID, um den Datenträger zu identifizieren.
Wenn Signature() in der BOOT.INI verwendet wird, bedeutet das, dass
NTBOOTDD.SYS für den Zugriff auf die Startpartition benötigt wird und
eine oder beide der Bedingungen vorliegen:
! Die Signature()-Syntax verlangsamt den Windows-Start mit je nach Anzahl vorhandener Controller und Festplatten erheblich. Wenn möglich sollten Festplattencontroller immer so konfiguriert werden, dass erweiterte INT-13-BIOS-Aufrufe verwendet werden. Erste Anlaufstelle ist hier die Dokumentation des Herstellers, eventuell ist auch ein Firmwareupgrade möglich. !