% Content-encoding: UTF-8
\documentclass[ngerman]{article}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
% \usepackage{babel}
\usepackage{xspace}
\setcounter{secnumdepth}{0}
\setcounter{tocdepth}{0}

%\newcommand{\code}[1]{\texttt{#1}}
%\newcommand{\ret}{\textsf{$<$ret$>$}\xspace}
%\newcommand{\ret}{$\hookleftarrow$\xspace}

\renewcommand{\reftextbefore}{auf der vorherigen Seite}
\renewcommand{\reftextfacebefore}{auf der gegenüberliegenden Seite}
\renewcommand{\reftextafter}{auf der nächsten Seite}
\renewcommand{\reftextfaceafter}{auf der gegenüberliegenden Seite}
\renewcommand{\figurename}{Abbildung}

\begin{document}

\title{Bootmanager und FAT--Reparatur: Siebter Fort(h)schritt (PC--Bootdisk)}
\ifx\shorttitle\undefined\else
\shorttitle{Bootmanager Teil 7}
\fi
\author{Fred Behringer}

\begin{document}
\maketitle

\begin{multicols}{2}

\section*{Ziel}
Es wird ein \emph{minimalistischer} Bootmanager entwickelt, der von Diskette aus die gewünschte Partition der Boot--Festplatte aus deren Partitionstabelle interaktiv auszuwählen gestattet. Die im Listing zu findende \emph{Organisation} umfasst etwa 10 Zeilen Forth. Außerdem wird auf der Diskette (natürlich) ein Forth--System (hier Turbo--Forth) mit dem einbezogenen Wort bootpart aus Teil 1 und dem neuen Forth Wort pc--hd verlangt. Die Anpassung an ZF und andere Systeme bleibe zur Aufgabe gestellt. Auch beim Übergang von Diskette zu Stick oder CD sehe ich keine unüberwindlichen Schwierigkeiten --- soweit der PC das Booten von den genannten Medien überhaupt erlaubt.


\section*{Wie?}
Viele Bootmanager nisten sich auf einem \emph{garantiert} nicht verwendeten Platz
der Boot--Festplatte ein. Bei dem von mir seit Jahren verwendeten XFDISK von
Florian Painke und Ulrich Müller sind es die ersten 17 Sektoren nach dem MBR.
Warum Bootdiskette? Das von den diversen Windows--Versionen her bekannte Prinzip der Bootdiskette (eigentlich nur für Reparaturen vorgesehen) erzwingt sich zunächst einmal das Booten des PCs unter DOS (im BIOS als erstes Bootmedium einzustellen). Auf der Bootdiskette kann ich den gesamten (auf DOS basierten) Forth--Überbau zur Organisation des Bootmanagers in Anspruch nehmen. Das gibt mir viele leicht zugängliche Möglichkeiten für eigene Konstruktionen. Alles, was zur Auswahl der gewünschten Boot--Partition x nötig ist, ist eigentlich nur die Anpassung der Aktiv--Kennzeichnung (80 statt 00) im Offset 1be+((x-1)*10) und der Markierung zum Verstecken (beispielsweise 06 statt 16) im Offset 1c2+((x-1)*10) der Partitionstabelle des MBRs (LBA--Sektor 0), mit entsprechenden Rücksetzungen in der Herkunfts--Partition. Anschließend stellt man den PC im BIOS auf Booten von Festplatte um und schaltet ihn kurz aus und dann wieder ein.


\section*{Schwierigkeiten}
macht der Umstand, dass es heutzutage zwar üblich ist, im BIOS die Sequenz
\emph{Erstes Bootmedium Diskette, zweites Bootmedium Festplatte} einstellen zu
können, dass sich aber der PC beim anschließenden Rebooten mit herausgenommener Diskette aufhängt. Das scheint besonders dann der Fall zu sein, wenn es sich um ein USB--Diskettenlaufwerk handelt. Ansonsten könnte man den PC mit immer derselben BIOS--Einstellung zur Boot--Reihenfolge (erstens Diskette, zweitens Festplatte) laufen lassen und bräuchte nur darauf zu achten, die Bootdiskette nach der Auswahl eines anderen Betriebssystems (einer anderen Partition) und vor dem Rebooten des PCs aus dem Laufwerk zu nehmen.


\section*{Zur Abhilfe}
habe ich vor einiger Zeit irgendwo einen Tipp darüber gelesen, mit welch
einfachem Patch des Bootsektors der betreffenden Diskette man das BIOS zwingen kann, bei nicht eingelegter Diskette einfach klagmeldungslos zum zweiten Bootmedium (der Festplatte) überzugehen, und aber an der im BIOS eingestellten Bootreihenfolge nichts zu ändern. Ich kann mich nicht mehr erinnern, wo ich das gelesen habe, und schlage vor, mit dem Googlen beispielsweise unter dem Suchbegriff Partition--Image Boot--Floppy--Maker 1.0 anzufangen.


\section*{Zur Erläuterung}
des im vorliegenden Artikel Gesagten hier die Partitionstabelle des MBRs
(ab Offset 1be), die bei mir folgende Gestalt hat:

\begin{verbatim}
80 01 01 00 06 FE 3F 3F 3F 00 00 00 01 B0 0F 00
00 00 01 40 05 FE FF FF 40 B0 0F 00 33 BD 04 0B
00 00 C1 FF 17 FE FF FF 73 6D 14 0B 27 B8 1A 06
00 00 C1 FF 1C FE FF FF 9A 25 2F 11 27 B8 1A 06
\end{verbatim}

Die primäre Partition 1 und die auf der Partition 2 (erweiterte Partition)
eingerichteten logischen Laufwerke D: bis S: laufen durchgängig als FAT16 und
sind DOS 6.2, Windows 3.11, Windows 95 und Windows 98 vorbehalten (momentan an dem hier verwendeten Experimentiersystem nur DOS verwirklicht). Auch Linux
(UBUNTU -- 64 Bit) soll auf die erweiterte Partition (als \emph{logisches Laufwerk}
unter extfs2) gelegt werden. Die primäre Partition 3 ist mit XP--Home belegt
(NTFS). Die primäre Partition 4 beherbergt Windows--ME (FAT32).


\section*{Viel zu umständlich?}
Ja schon, wenn man an die komfortablen professionellen Bootmanager (Beispiel
GRUB) denkt. Andererseits hätte ich mich (als Amateur) nie ohne Forth an das
Thema Bootmanager gewagt. Und welche Möglichkeiten ich da habe, an dem hier
gezeigten Minimalmanager nach Belieben und eigenem Gusto herumzuexperimentieren! Und unter welch enormem Durchblick! Ganz anders als bei den \emph{Professionellen}. Und wenn der \emph{normalerweise} eingesetzte Bootmanager vertrauenswürdiger Herkunft (bei mir bisher XFDISK) versagt, ist es beruhigend zu wissen, dass die hier gezeigten einfachen Forth--Mittel vielleicht auch schon weiterhelfen können --- bevor man die diversen \emph{Reparatur--Programme} durchprobiert, die erklärungslos losrattern und das Durcheinander eventuell nur noch vergrößern.


\section*{Die Stabilität der Boot--Reihenfolge}
mag bei dem hier gezeigten Minimalsystem noch ausbaubedürftig sein. Auf jeden
Fall ist aber sichergestellt, dass eine einmal vorgenommene Umstellung der
Festplatten--Partitionstabelle per \texttt{boot pc-hd} alle System--Ausschaltungen übersteht. Es kann also bei einem Mehrbootsystem schon mal nicht mehr passieren, dass man an sein System plötzlich überhaupt nicht mehr herankommt --- ob Windows oder nicht Windows.


\section*{Natürlich auch mit XP}
Was wird in den Computer--Blättern nicht alles über \emph{XP und Linux gleichzetig} oder \emph{XP und ME gleichzeitig} oder \emph{DOS(FAT16) und XP(NTFS) gleichzeitig} gesagt! Es erübrigt sich zu bemerken, dass die Einbindung von Windows--XP in den vorliegenden rudimentären Selbstbau--Bootmanager eine der leichtesten Übungen der Welt ist.

\section*{Vorgehensweise}
Das von mir zum Experimentieren und Ausprobieren zugrundegelegte Szenario geht aus dem Listing mit den \verb|\|--Kommentaren hervor. Das Bootmenü (zur wahlweisen Aktivierung der einen oder anderen Partition in der Partitionstabelle des MBRs) habe ich \texttt{pc-hd} genannt, damit das (interaktive) \emph{Booten} von der Diskette aus mit der sich einprägenden Sequenz \texttt{boot pc-hd} erledigt werden kann. Für das Betriebssystem der Bootdiskette habe ich FreeDOS gewählt, um zusätzlich zum DOS 6.2 auf der Festplatte noch ein weiteres DOS--System zur Auswahl zu haben (Auswahl 0 = Beim Disketten--System bleiben). In \texttt{boot} versteckt sich das Turbo--Forth--System, das um das Programm aus Teil 1 der vorliegenden Artikelserie und das hier besprochene Boot--Menü erweitert und dann per \texttt{save--system} abgespeichert wurde. Sein voller DOS--Programm--Name lautet \texttt{boot.com} und das Forth--Wort \texttt{pc-hd} wird bei Aufruf \texttt{boot pc-hd} als DOS--Parameter--String übergeben. Genau da liegt der wunde Punkt beim Versuch, das Ganze auf ZF zu übertragen. Ich gebe diesen Versuch für den Augenblick auf und habe vor, mich später wieder damit zu beschäftigen. Irgendwie muss bei jedem neuen Bootvorhaben dafür gesorgt werden, dass im BIOS die Bootreihenfolge \emph{Disk,HD} eingestellt ist (oder bleibt). Die in der Partitionstabelle jeweils eingestellte Bootpartition bleibt nach dem Ausschalten des PCs bestehen. Will man danach wieder mit dieser schon eingeschalteten Bootpartition arbeiten, dann sorge man einfach dafür, dass der PC nicht von Diskette, sondern von HD bootet. Andernfalls wieder wie oben.

\section*{Überraschung mit den Laufwerkbuchstaben}
Beim Experimentieren mit meinem System (siehe Listing) wurde bei Auswahl 3 (Windows--XP) während der zwischenzeitlichen Boot--Einstellung das DOS--Laufwerk D: nach C: verschoben. Und alle weiteren logischen Laufwerke entsprechend. Das hat seine Richtigkeit: XP läuft unter NTFS und wird von der DOS--Bootdisk einfach ignoriert. Anders bei Auswahl 4 (Windows--ME). Da wurde C: von ME (zu meiner Überraschung) auch für das DOS--Interim der Bootdisk zum (durchaus nicht ignorierten) C: . Auch das hat seine Richtigkeit: FreeDOS kann mit FAT32 umgehen --- und mein ME läuft unter FAT32.

\end{multicols}

\section{Listing: PC-HD.FTH}
\begin{quote}
\listinginput[1]{1}{2010-0203/PC-HD.FTH}
\end{quote}

%\end{document}
