% 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}