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

\begin{document}
\renewcommand{\figurename}{Tabelle}

\title{Bootmanager und FAT-Reparatur: Ein zweiter Fort(h)schritt}
\author{Fred Behringer}
\maketitle

\begin{multicols}{2}

Wenn Sie (zumindest) unter DOS 6.2 den Ko\-mman\-do\-zei\-len-Befehl DIR
eingeben,
bekommen Sie am Anfang drei Zeilen auf den Bildschirm. Die zweite davon
lautet
\texttt{Datenträgernummer: 3E5A-1F06}, wobei diese Zahl auf meiner
Experimentier-Anlage
dem eingeschalteten Laufwerk \texttt{E:}, dem zweiten logischen Laufwerk der
erweiterten
Partition, zugeordnet ist. Haben Sie sich schon einmal gefragt, wo diese
Zahl
herkommt, oder zumindest, wie man sie sich in einem (Forth--)Programm
beschaffen
und dann nutzbar machen könnte? Geben Sie (aus Forth heraus) in meinem
unten
stehenden Listing \texttt{2~showboot16} ein. Im Teil 2 der Bildschirmanzeige
(nach
Drücken einer Taste) steht dann, dass ab dem Bootsektor--Offset 027h über
4 Bytes
hinweg die \texttt{Dateisystems-ID (Seriennnummer)} verzeichnet ist, und zwar
in meinem
hier berichteten Fall in der Form \texttt{06 1F 5A 3E} (little endian!). Alles,
was Sie
zu diesem kleinen Vorab--Experiment brauchen, ist das Wissen darum, dass
es sich
bei meinem \texttt{E:} um ein FAT16--formatiertes logisches Laufwerk handelt ---
\texttt{2~showboot32} würde falsche Anzeigen liefern.

Bei keinem der im vorliegenden Artikel eingeführten Forth--Worte wird an
der
Festplatte etwas verändert. Es werden Informationen von der Festplatte
lediglich
hereingeholt und dann für die diversen Anzeigen weiterverarbeitet. Mit
anderen
Worten: Mit den hier neu eingeführten Forth--Worten kann bedenkenlos
experimentiert werden, ohne befürchten zu müssen, dass wesentliche Daten
an der
Festplatte verstellt werden. (Das gilt natürlich nicht für alle
Forth--Worte aus
meinem Artikel im VD--Heft 3/2008.)

Es bleibt noch viel für mich zu untersuchen: Unter \texttt{n~showboot16}
liefert der
zweite Anzeigeteil (nach Drücken einer Taste) die Erkenntnis, dass die
eben
erwähnte Seriennummer zur Unterscheidung von auswechselbaren
Datenträgern
verwendet werden kann. In der Tat liefern ZIP--Disketten oder übliche
Disketten
verschiedene Seriennummern, wenn sie auf verschiedenen Anlagen oder
unter
verschiedenen Betriebssystemen (ich habe es mit reinem DOS 6.2, mit
FreeDOS, mit
OS/2 und in der DOS--Vollbox von Windows 95 ausprobiert) formatiert
wurden. Die 
Seriennummer scheint also dem Datenträger anzuhaften, und nicht dem
Laufwerk.
Werden allerdings verschiedene solcher Datenträger in ein und demselben
Laufwerk
formatiert, dann scheinen sie alle dieselbe Seriennummer zu haben. Es
wäre 
vielleicht gar nicht so schlecht, wenn ich mein bisheriges Augenmerk
nicht nur 
auf Festplatten, sondern auch auf Disketten und ZIP--Disketten (und CDs?)
richten 
würde?

Im VD--Heft 3/2008 habe ich dargelegt, was mich dazu bewogen hat, mich
mit dem
FAT16--Dateisystem zu beschäftigen: Ein zerschossenes Windows 98 und der
Wunsch,
meine verschwundenen E--Mail--Dateien wiederzubeleben. Dass ich dabei in
die
Fußstapfen von Bootmanager--Entwicklern trat, ist meinem Interesse für
Forth
und meiner ständigen Neugierde zuzuschreiben. Wäre es nur um einen
neuen, noch
besser zu meinen Vorhaben passenden Bootmanager gegangen (der von mir
bevorzugte
\texttt{XFDISK} ist ja an sich schon recht prima), dann hätte ich das Rad
bestimmt nicht
neu erfinden wollen. Dann hätte ich vielleicht auf den allerneuesten
Stand der
Technischen Evolution (wie langsam die doch geht, gemessen am kurzen
Leben des
Menschen) gewartet und mir das PC--Praxis--Sonderheft 03/08 mit der
menügeführten
Super--GRUB--CD als ISO-Datei auf der Heft--DVD gekauft. (Auf der Ultimate
Boot--CD
3.4 aus PC--Professionell 9/06 war die Super--GRUB--Disk in der Version
0.925 ja
auch schon enthalten und arbeitet (in der Live--Version) auch auf meiner
schon
etwas ältlichen K6/2--Anlage bestens.)

Im vorliegenden Artikel geht es mir um die Bootsektoren. Sie sind für
FAT16
etwas anders aufgebaut als für FAT32, ähneln sich aber doch sehr. Ich
darf daher
hier schonmal damit beginnen, mich neben FAT16 auch für FAT32 zu
interessieren.
Nicht nur die primären Partitionen, auch die logischen Laufwerke der
erweiterten
Partition (bei mir momentan 16 an der Zahl) haben, jedes für sich, einen
Bootsektor --- der nicht mit der jeweiligen Partitionstabelle der
Laufwerke (in
ihrer kettenartigen Verschachtelung) zu verwechseln ist. Neben dem
generellen
Master-Boot-Record (CHS = 001) enthalten auch die einzelnen Bootsektoren
(z.~B.\ CHS = 011) wesentliche Informationen über die Organisation der
bootenden
Festplatte. Im vorliegenden Artikel stelle ich die zur Anzeige
benötigten
Werkzeuge im Rahmen von Forth dar. Bei meinen Reparaturarbeiten am
zerschossenen
Windows--98--System haben sie mir sehr geholfen. Es ist immer wieder
faszinierend
zu sehen, wie leicht man ein einmal erstelltes Forth--Wort (sogar im
laufenden
Betrieb) den sich ändernden Ansprüchen anpassen kann.

Ich setze das gesamte Listing aus dem Artikel \emph{Bootmanager und
FAT-Reparatur:
Erste Fort(h)schritte} aus dem VD--Heft 3/2008 und die zugehörigen
Erklärungen
voraus: Einfach das diesmalige Listing an das vorausgegangene anheften ---
oder
mit einem geschachtelten include (bei Turbo--Forth) oder fload (bei ZF)
arbeiten.

Der (programmiertechnischen) Einfachheit halber unterscheide ich bei den
anzuzeigenden Bootsektoren zwischen FAT16, mit \texttt{showboot16 ( n -- )}, und
FAT32,
mit \texttt{showboot32 ( n -- )}. Man muss also vorher wissen, ob 16 oder 32,
wenn man
die Bildschirmanzeige richtig interpretieren will. Ein Irrtum wäre aber
nur halb
so wild, da die ersten Anzeigehälften von \texttt{showboot16} und \texttt{showboot32}
gleich sind.
Außerdem unterscheide ich zwischen der jeweils aktivierten
Primärpartition und
den logischen Laufwerken der erweiterten Partition: \texttt{showboot16} und
\texttt{showboot32}
beziehen sich auf die logischen Laufwerke der erweiterten Partition (und
benötigen die Laufwerksnummer $n$), \texttt{showbootactive16} und \texttt{showbootactive32}
kommen
ohne einen solchen Parameter $n$ aus und beziehen sich auf die jeweils
aktivierte
(als \emph{bootbar} geschaltete) Primärpartition. Sollte es jemand für
sinnvoll
halten, mehr als eine Partition aktivzuschalten, dann wird aus der
generellen
Partitionstabelle (im MBR) die Zeile mit der ersten der aktivierten
Partitionen
herausgepickt.

Der Schwerpunkt des vorliegenden Artikels liegt auf der
Bildschirm--Anzeige des
gewünschten Bootsektors, nicht auf dessen Berichtigung und Reparatur.
Worte wie
\texttt{putbootactive} und $n$ \texttt{putboot} (die bei Falscheingabe sowieso Schaden an
den Daten
anrichten könnten) habe ich mir für später vorgemerkt. Ich will sie hier
noch
nicht behandeln.
\end{multicols}

\section*{Listing}

\begin{quote}
\listinginput[1]{1}{2008-04/BOOTMA-2.FTH}
\end{quote}
\begin{comment}
\vfill
\begin{center}
\includegraphics[width=0.4\textwidth]{2008-04/Bootsector}\\
nach einer Idee von Jessica Ledbetter (jledbetter@acm.orf)
\end{center}
\vfill
\end{comment}

% \end{document}