This page has been robot translated, sorry for typos if any. Original content here.

Home Boot Record - Master Boot Record (MBR)

Lassen Sie uns zuerst die Terminologie definieren. Unter den Wörtern im Titel des Artikels werden oft zwei verschiedene Dinge verstanden, die in einigen Fällen gleichwertig sein können und in einigen Fällen nicht. Das erste Konzept ist tatsächlich Master Boot Record. Dieser Eintrag (Programmcode und Daten), der von der Festplatte in den Speicher geladen wird und logische Partitionen identifiziert, erkennt die aktive Partition und lädt einen Boot-Record (Boot Record - BR) herunter, der den Start des Betriebssystems (OS) fortsetzt. Und das zweite Konzept ist der Boot-Sektor, der Master-Boot-Sektor (MBS) ist der Sektor auf dem 0-Zylinder, der Ebene (Kopf) 0 und der Nummer 1. In den meisten Fällen enthält der MBS den gesamten notwendigen Code und alle Daten, so dass sein Inhalt der MBR ist , aber es gibt Fälle (die wir am Ende des Artikels betrachten werden), wenn der Code und die Daten nicht in einen Sektor passen (einfach nicht genug Platz oder aus Sicherheitsgründen) und dann der Code dieses Sektors sicherstellt, dass andere Sektoren in den Speicher geladen werden. In diesem Fall ist der MBR eine Sammlung aller Sektoren, die geladen werden müssen, und MBS ist nur der erste Sektor.
Wir werden jedoch mit dem Fall beginnen, in dem MBR und MBS gleich sind, und wir werden sie als vertrauter und weit verbreiteter Begriff MBR bezeichnen. Etwas abweichend vom Thema, stelle ich fest, dass ein solcher MBR (der das Booten eines beliebigen Betriebssystems ermöglicht und nur MBS belegt) üblicherweise als MBR bezeichnet wird.
Im Allgemeinen erschien MBR auf Festplatten beginnend mit MS DOS Version 3.0, in früheren Versionen war die Festplatte als Diskette formatiert und im ersten Sektor befand sich BR. Dementsprechend war die Platte eine einzelne Partition und konnte nicht in logische Teile zerlegt werden - es ist wahr, bei diesen Größen von Platten, die dann veröffentlicht wurden, war es irrelevant.
Die Sektorgröße auf der Festplatte beträgt 512 Byte. Dieser Platz reicht aus, um alles, was Sie benötigen, zu speichern - sowohl Code als auch Daten. Allerdings sollte dort nur eine Struktur vorhanden sein - es ist eine Signatur. Dieses Wort ist eine spezielle, streng festgelegte Sequenz von 2 Bytes mit hexadezimalen Werten von 55h AAh, die in die letzten 2 Bytes des Sektors geschrieben werden und dementsprechend einen Offset vom Beginn des Sektors 1FEh haben. Wenn sich mindestens eines der beiden letzten Bytes im Wert unterscheidet, wird davon ausgegangen, dass der erste Sektor kein MBR ist und keine aussagekräftigen Informationen enthält. Wenn der Computer zu Beginn nach dem Lesen des ersten Sektors die richtige Signatur nicht findet, überträgt er die Steuerung des dort befindlichen Codes nicht, selbst wenn er korrekt ist, sondern meldet, dass der Master-Boot-Datensatz nicht gefunden wurde. Oder versuchen, es auf anderen Geräten zu finden - zum Beispiel auf einer Diskette. Etwas abweichend vom Thema stelle ich fest, dass der BR in den letzten zwei Bytes auch eine Signatur 55h AAh enthält.
Nun, wenn wir mit dem Schwanz angefangen haben, dann gehen wir davon zum Anfang des Sektors. Vor der Signatur befinden sich 4 Datenblöcke von jeweils 16 Bytes (jeweils mit einer Verschiebung vom Beginn des Sektors 1BEh, 1CEh, 1DEh, 1EEh). Die Gesamtheit dieser Blöcke wird als Partitionstabelle (PT) bezeichnet, und jeder einzelne Eintrag wird als Partitionstabelleneintrag (Partitionstabelleneintrag) oder einfach als Partition bezeichnet. Diese 16 Bytes reichen aus, um alle notwendigen Eigenschaften der Partition anzuzeigen, nämlich: Partitionstyp, Partitionsaktivitätsflag, Anfangs- und Endpartitionssektoren im Format Zylinder (Pfad) - Zylinder (Head - Sector, CHS) , die relative Nummer des ersten Sektors (relativ zum MBR) und die Anzahl der Sektoren in dem Abschnitt.
Der Rest des Sektorbereichs ist mit dem Programmcode belegt, der PT-Parsing bereitstellt, nach der aktiven Partition sucht, BR in diesem Abschnitt lädt und es an das Steuerelement überträgt. Wie es leicht zu berechnen ist, bleibt der Code 512 - 4 * 16 - 2 = 446 Bytes. Dieser Raum ist reichlich vorhanden, um diese Aktionen auszuführen.
So kann die allgemeine Struktur des MBR durch die folgende Tabelle dargestellt werden:
  Offset Länge Beschreibung
 000h 446 Ladecode
 1BEh 64 Partitionstabelle
  16 Abschnitt 1
 1CEh 16 Abschnitt 2
 1DEh 16 Abschnitt 3
 1EEh 16 Abschnitt 4
 1 FEh 2 Unterschrift (55h AAh)
Jeder 16-Byte-Block, der eine Partition beschreibt, hat die folgende Struktur:
  Offset Länge Beschreibung
 00h 1 Symptom der Partitionsaktivität
 01h 1 Start der Sektion - Kopf
 02h 1 Der Anfang des Abschnitts ist Sektor (Bits 0-5), die Spur (Bits 6,7)
 03h 1 Anfang des Abschnitts ist die Spur (die höchsten Bits von 8.9 werden im Byte der Sektornummer gespeichert)
 04h 1 Partitionstypcode
 05h 1 Ende des Abschnitts - Kopf
 06h 1 Ende des Abschnitts - Sektor (Bits 0-5), Spur (Bits 6,7)
 07h 1 Ende des Abschnitts - die Spur (die höherwertigen Bits 8.9 werden im Byte der Sektornummer gespeichert)
 08h 4 Verschiebung des ersten Sektors
 0Ch 4 Anzahl der Sektoren der Partition
Der Partitionstypcode ist eine Einzelbyte-Kennung. Wenn der Wert 00h ist, wird davon ausgegangen, dass dieses PT-Element keine Partitionsinformationen enthält und sein Inhalt ignoriert wird. Jeder Wert ungleich Null bedeutet, dass ein Abschnitt eines bestimmten Typs im angegebenen Bereich vorhanden ist. Einige Werte geben den Typ der Partition eindeutig an, einige entsprechen mehreren möglichen Typen und die Definition eines bestimmten Typs wird dem Betriebssystem zugewiesen, die anderen sind für die zukünftige Verwendung reserviert. Eine relativ vollständige und aktuelle Anleitung zu Partitionstyp-Codes finden Sie in der Interrupt-Liste von Ralf Brown in der Datei INTERRUPT.D, Tabelle 00652, die im Archiv enthalten ist (zum Zeitpunkt der Erstellung) inter61a.zip unter http://www.pobox.com/ ~ ralf / files.html . Hier werde ich eine Tabelle der Partitionstypen angeben, die von den Betriebssystemen Windows 9x und Windows NT / 2000 / XP erstellt werden:
  Code Partitionstyp
 01h 12-Bit-FAT
 04h 16-Bit-FAT bis zu 32 MB
 05h Fortgeschrittener Abschnitt
 06h 16-bit FAT über 32 MB
 07h Windows NT NTFS (und einige andere - der Typ wird vom BR-Inhalt bestimmt)
 0Bh 32-Bit-FAT
 0Ch 32-Bit-FAT mit fortgeschrittener INT13-Verwaltung
 0Eh LBA VFAT (wie 06h, unter Verwendung der fortgeschrittenen INT13 Steuerung)
 0Fh LBA VFAT (wie 05h, mit fortgeschrittenen INT13 Kontrolle)
 17h Versteckte NTFS-Partition
 1Bh Ein versteckter Abschnitt des 32-Bit-FAT (der gleiche wie 0Bh)
 1Ch Ein versteckter Abschnitt des 32-Bit-FAT mit dem erweiterten Steuerelement INT13 (das gleiche wie 0Ch)
 1Eh Versteckte Partition LBA VFAT (wie 06h, unter Verwendung der fortgeschrittenen INT13 Steuerung)
 86h Abschnitt FAT-16 Stripe-Array Windows NT
 87h NTFS-Partitions-Stripe-Array Windows NT
 B6h Gespiegelte Hauptpartition FAT-16 Windows NT
 B7h Gespiegelte Hauptpartition NTFS Windows NT
 C6h Gespiegelte Slave-Partition FAT-16 Windows NT
 C7h Gespiegelte Slave-Partition NTFS Windows NT
Ein Zeichen für die Aktivität des Abschnitts - d.h. ein Zeichen, dass das Betriebssystem von diesem Abschnitt heruntergeladen werden soll - es kann die Werte 80h (Partition aktiv) und 00h (Partition ist nicht aktiv) haben. Im Allgemeinen sollte die Anzahl der aktiven Partitionen nicht mehr als 1 sein (sonst wie kann eine Auswahl getroffen werden?). Wenn keine aktiven Partitionen vorhanden sind, kann das Betriebssystem nicht von dieser Festplatte geladen werden. Andere Werte gelten als fehlerhaft und werden ignoriert. Die Entscheidung, das Steuerelement zu übertragen, erfordert jedoch den Ladeprogrammcode, so dass der Wert des Bytes des Boot-Attributs nur ein Axiom für Standardlader ist.
Der Drei-Byte-Adressblock der Startadresse und die Endabschnittadresse haben das gleiche Format. Hier werden tatsächlich Packungswerte verwendet, so dass sie ein minimales Volumen haben. Das Format des Pakets entspricht vollständig der Übertragung dieser Daten zu den Prozeduren für das Arbeiten mit der Festplatte (Int 13h), die sich im BIOS des Computers befindet, und daher sind die Overhead-Berechnungskosten minimal. In diesem Fall werden die Zylinder und Spuren von Null beginnend nummeriert und Sektoren - aus irgendeinem Grund von der ersten. Ich weiß nicht warum - das ist historisch passiert.
Der Sektor, auf den die Adresse des Abschnittsanfangs zeigt, enthält einen speziellen Datensatz, den sogenannten Boot Record (BR). Sein Zweck und seine Zusammensetzung werden in einem gesonderten Artikel behandelt.
Der Offset des ersten Sektors der Partition ist tatsächlich die Nummer dieses Sektors, wenn alle Sektoren der Festplatte ausgehend von 0 (gemäß der von Int 25h / 26h verwendeten Nummerierung) in aufsteigender Reihenfolge zuerst in Sektoren einer Spur nummeriert werden, dann in der Reihenfolge der Erhöhung der Anzahl der Köpfe und Zylinder. Und wie groß ist die Anzahl der Sektoren in der Sektion - es ist ohne Erklärung verständlich.
Alle diese Werte sind natürlich durch einfache Abhängigkeiten verbunden, weil die darin enthaltenen Informationen redundant sind. Daher werde ich die Formeln für die Beziehung zwischen ihnen geben.
Also, wenn wir bezeichnen:
C M ist der Zylinder, auf dem sich der MBR befindet;
H M ist die Spur, auf der sich der MBR befindet;
S M ist der Sektor, in dem sich der MBR befindet;
C S , H S , S S , C E , H E , S E sind die gleichen für die Sektoren des Anfangs (S) und des Endes (E) des Abschnitts;
H H - Anzahl der Tracks auf der Festplatte;
S H - die Anzahl der Sektoren auf einer Spur auf der Festplatte,
dann:
Die absolute Nummer des Sektors, in dem sich PT befindet:
Num PT = CM * H * SH + HM * SH + SM- 1
Absolute Sektornummer des Abschnittsanfangs:
Num S = C S · H H · S H + H S · S H + S S -1
Absolute Sektornummer des Endes des Abschnitts:
Num E = C E * H H * E H + H E * E H + E E -1
Verschiebung des ersten Sektors des Abschnitts:
Offset S = Nummer S - Nummer PT
Anzahl der Sektoren:
Betrag = Num E - Num S +1
Aus den obigen Formeln ist außerdem klar, dass die wichtige Sache ist, wie viele Spuren einen Zylinder einer Festplatte haben und wie viele auf jeder Spur von Sektoren. Diese Werte hängen sowohl von der Geometrie der Festplatte als auch vom gewählten Übersetzungsmodus in den BIOS-Einstellungen ab. Daher kann eine in einem einzelnen Übersetzungsmodus partitionierte Platte nicht lesbar sein, wenn sich der Übersetzungsmodus ändert.
Für IDE-Laufwerke gibt es mehrere Arten der Übersetzung:
CHS (Cylinder-Head-Sector) - während die Geometrie der Festplatte die gleiche ist, wie sie dem Computer mitgeteilt wird. Schmeichele dich nicht selbst - die meisten Laufwerke haben nicht die richtige Geometrie. Der Controller, der Teil der Festplatte ist, erzeugt jedoch selbst die notwendigen Transformationen, und die Art und Weise, wie dies geschieht, ist für uns nicht wichtig. Die maximale Anzahl an Zylindern beträgt 1024 (von 0 bis 1023), die Spuren sind 16 (von 0 bis 15), die Sektoren sind 63 (von 1 bis 63) und die maximale Festplattenkapazität in dieser Übertragung ohne spezielle Programme beträgt 504 MB . Bei Plattenoperationen wird die Sektoradresse vom Festplattencontroller an das BIOS des Computers übertragen, ohne sie zu ändern.
LBA (Logical Block Addressing) - Dieser Übersetzungsmodus verwendet nicht die Geometrie der Festplatte, die dem BIOS des Computers mitgeteilt wird. Die Reduzierung wird auf das Format vorgenommen, wenn die Anzahl der Zylinder 1024 nicht überschreitet und die Anzahl der Sektoren pro Spur 63 beträgt. Die Anzahl der Spuren hängt vom BIOS des Computers und dem Volumen der Festplatte ab und kann 16, 64, 128 oder 255, in der Regel die neuesten BIOS-Versionen sein Verwenden Sie die Reduzierung auf 255 (0-254) Spuren unabhängig von der Lautstärke des Laufwerks. Wenn auf die Platte zugegriffen wird, werden die Anzahl der Zylinder, Köpfe und Sektoren, die in der LBA-Übersetzung übertragen wurden, auf die absolute Sektornummer neu berechnet, und sie wird durch die Festplattensteuerung zum BIOS des Computers übertragen, um die Operation durchzuführen. Bei einer Laufwerkskapazität von mehr als 8 GB beträgt die Anzahl der Zylinder mehr als 1024. Daher sind auf Computern, die den erweiterten Modus "Int 13h" nicht unterstützen, ohne die Installation spezieller Software kein Speicherplatz über 8 GB verfügbar (unabhängig vom Übertragungsmodus). Manchmal hilft es jedoch, das BIOS des Computers zu aktualisieren.
LARGE oder ECHS (Extended CHS) - in diesem Übersetzungsmodus wird die Anzahl der Zylinder auf weniger als 1024 verringert, da die Anzahl der Spuren mehrfach erhöht wird. Die angegebene Anzahl von Spuren ist streng genommen ein Vielfaches der tatsächlichen Anzahl von Sektoren pro Spur ändert sich nicht. In den meisten modernen Laufwerken beträgt die Anzahl der Sektoren pro Spur 63 (entsprechend dem Controller des Laufwerks). Das maximal verfügbare Volumen auf Computern, die den erweiterten Modus Int 13h nicht unterstützen, hängt von der tatsächlichen Anzahl der Spuren ab, jedoch nicht mehr als 8 GB (wenn z hat 16 Spuren, dann in der großen Übersetzung können sie 16, 32, 48 ... 240 sein, aber nicht 255, weil 255 kein Vielfaches von 16 ist, und die maximal verfügbare Lautstärke ist 1024 * 240 * 63 * 512 / (1024 3 ) = 7.38 GB).
Bei Verwendung von LBA oder LARGE-Übersetzung durch Aufrunden auf Integer-Werte können mehrere Sektoren am Ende des Laufwerks aus dem beschriebenen Platz "herausfallen" und unzugänglich werden. Die Verluste sind jedoch in der Regel gering.
Wie für SCSI-Laufwerke, arbeiten sie immer im Modus der LBA-Übersetzung. Vielmehr repräsentiert der SCSI-Controller die Geometrie des Laufwerks gemäß den Anforderungen der LBA-Übersetzung und überträgt beim Zugriff auf die Platte die absolute Adresse des Sektors an diesen. Natürlich ist es das BIOS des SCSI-Controllers, das für die Durchführung der notwendigen Konvertierungen verantwortlich ist.
Kommen wir zum MBR zurück. Wie bereits erwähnt, enthält es 4 Datenblöcke über die Elemente der Partitionstabelle. Dies bedeutet, dass die maximale Anzahl von Partitionen, die im MBR beschrieben werden können, vier ist. Dies bedeutet jedoch nicht, dass die maximale Anzahl von Partitionen, auf die das Laufwerk aufgeteilt werden kann, vier ist. Um diese Barriere zu überwinden, wurde eine spezielle Sektion mit Code 05h - eine erweiterte Partition (Extended Partition) - eingeführt.
Die erweiterte Partition unterscheidet sich sehr von allen anderen Partitionstypen. Erstens beschreibt es nicht die Partition, sondern den Speicherplatzbereich, in dem sich die anderen Partitionen befinden. Die Anzahl der Abschnitte ist theoretisch unbegrenzt. Richtig, die Abschnitte, die sich in diesem Bereich befinden, sind etwas "eingeschränkt in Rechten", die wichtigste Einschränkung ist, dass sie nicht aktiv sein können (oder vielmehr aus einem solchen Abschnitt des Betriebssystems geladen werden können, aber die Personalausstattung der meisten vorhandenen OS erlaubt dies nicht, Sie müssen spezielle Werkzeuge verwenden). Zweitens sollte nur ein Datensatz der erweiterten Partition im MBR vorhanden sein. Vielmehr können sie und mehr (obwohl alle vier) getan werden, aber wie wird sich das OS verhalten, nachdem es so getroffen wurde, ist es schwer vorherzusagen. Beispielsweise ignoriert MS-DOS 6.20 einfach alle erweiterten Partitionen mit Ausnahme der ersten in der Liste, als ob sie überhaupt nicht vorhanden wären. Drittens, im Gegensatz zu den anderen Arten von Sektionen in dem Sektor, der in der Struktur als der Sektor des Beginns des Abschnitts registriert ist, gibt es keineswegs einen BR. Es gibt tatsächlich einen anderen MBR, der eine Signatur- und Partitionstabelle hat, aber normalerweise keinen Programmcode enthält (normalerweise wird der Sektor, der die Partitionstabelle enthält, aber den Boot-Code nicht enthält, als abstrakter MBR bezeichnet). Da es jedoch keine aktiven Partitionen gibt, ist der Code nutzlos. In der Partitionstabelle eines solchen Sektors gibt es normalerweise einen oder zwei Einträge. Der erste beschreibt eine reguläre Partition (Partition), und diese Partition sollte vollständig innerhalb des erweiterten Partitionsbereichs liegen. Wenn eine reguläre Partition nicht den gesamten Speicherplatz belegt, erscheint ein zweiter Eintrag in der Partitionstabelle, der den verbleibenden Speicherplatz als erweiterte Partition beschreibt. Im nächsten Sektor wird auch ein Abschnitt genau beschrieben und, wenn der Platz übrig ist, ein weiterer Datensatz der erweiterten Partition. Und das geht weiter, bis der Raum vorbei ist. Tatsächlich sind alle Datensätze für die erweiterten Partitionen eine erweiterte Partitionskette, in der Teile des Plattenplatzes in reguläre Partitionen gepflückt werden, bis der Speicherplatz erschöpft ist. Ein Fehler in einem Element dieser Kette führt zu einem Überlauf, daher werden alle Datensätze nach der Unterbrechung vom Betriebssystem nicht gefunden und der von ihnen belegte OS-Speicherplatz wird als nicht belegt betrachtet.
Beim Füllen einer Kette folgt das Betriebssystem im Allgemeinen mehreren Regeln. Erstens sollte die normale Partition, die in der nächsten "Verbindung" der Schaltung beschrieben wird, nicht in der Mitte liegen, da dann zur Beschreibung der resultierenden zwei Stücke von unbesetztem Raum zwei Einträge in der PT dieses Elements über zwei verschiedene erweiterte Abschnitte von a eingegeben werden müssen. Ignorieren Sie alle diese Datensätze außer dem ersten, und dadurch wird ein Teil des Speicherplatzes aus der Partition fallen. Zweitens wird in der Regel ein Datensatz über eine normale Partition erstellt, so dass er den Anfangsbereich der erweiterten Partition einnimmt, und das nächste Element der Partitionskette ist der Rest.
Welche Probleme können mit den Inhalten des MBR auftreten? Erstens, physische oder logische Zerstörung, d.h. Beschädigung der Oberfläche oder andere mechanische Probleme oder die Zerstörung des Servos, was verhindert, dass der Sektor die Platte liest. Solche Fälle gehen jedoch über unsere Überlegungen hinaus. Und das zweithäufigste Problem ist die Zerstörung aller oder eines Teils der in dem Sektor enthaltenen Information, wodurch die Partitionen entweder vom Betriebssystem nicht gefunden werden oder ihre Parameter falsch bestimmt werden.
Der einfachste Fall ist die Zerstörung der Signatur. In diesem Fall glaubt das Betriebssystem, dass der Sektor einige zufällige Informationen enthält, "Müll", und das Laufwerk selbst ist nicht in Abschnitte unterteilt, und es gibt keine Informationen darüber. Für die Wiederherstellung reicht es nur aus, direkten Zugriff auf Plattensektoren zu haben (DISKEDIT aus dem NORTON UTILITIES-Paket ist am beliebtesten), um die Signatur wiederherzustellen. Der größte Teil des Betriebssystems muss jedoch neu gestartet werden, da das Betriebssystem beim Hochfahren in der Regel Informationen über das Partitionieren des Datenträgers in Partitionen liest und dann seine Änderungen im Arbeitsprozess nicht berücksichtigt.
Ein komplizierterer Fall ist die Zerstörung des Codes. Gleichzeitig geht die Fähigkeit, das Betriebssystem von dem Laufwerk zu starten, verloren, und der Startversuch endet normalerweise mit dem "Aufhängen" des Computers. Wenn Sie gleichzeitig von einem anderen Laufwerk booten (eine andere Festplatte, eine Diskette, eine Boot-CD-ROM usw.), können alle Informationen auf dem Laufwerk verwendet werden. In diesem Fall wird empfohlen, die systemeigenen Tools zur Bootstrap-Code-Wiederherstellung zu verwenden, die in jedem Betriebssystem verfügbar sind. In Windows 9x wird zu diesem Zweck beispielsweise das Programm FDISK.EXE verwendet, das mit dem Schlüssel / MBR gestartet wird.
Die Zerstörung von Code ist nicht so selten, wie es scheinen mag. In der Regel tritt eine solche Störung auf, wenn ein Laufwerk konsistent verschiedene Betriebssysteme in einer oder mehreren Partitionen installiert. Jedes Betriebssystem bei der Installation wünscht, den eigenen Code im MBR zu haben, aber bei weitem nicht alle Sorge um die Erhaltung dieses Codes, der im Sektor früher war. Zum Beispiel schreibt Windows 9x den Bootloader-Code neu, ohne den Benutzer zu informieren und den alten Inhalt unwiderruflich zu zerstören. Dieser Fall ist jedoch nicht sehr beängstigend, da alle OS Loader sehr ähnlich sind. Das Problem tritt auf, wenn Softwaretools von Drittanbietern wie EZ-Laufwerk, ODM oder SpeedStore zum Partitionieren eines Laufwerks verwendet werden, für die MBR- und MBS-Konzepte nicht äquivalent sind. Aufgrund einer anderen Lade-Ideologie (die wir später betrachten werden), führt der Code in MBS eine andere Funktion aus, nämlich das Suchen und Laden eines Teils von MBR-Code, der sich in anderen Sektoren der Platte befindet. Das Ersetzen des Codes führt dazu, dass diese Funktion verloren geht und dementsprechend gibt es Probleme anderer Art. Der Benutzer sollte sehr vorsichtig sein, wenn er solche Softwaretools verwendet - die Wiederherstellung des Codes in solchen Fällen kann sehr schwierig sein.
Und der schwierigste und unangenehmste Fall ist die Zerstörung der Partitionstabelle selbst. Wie Sie jedoch wissen, kommt das Problem nie allein, und meistens werden alle drei Komponenten des MBR zerstört, aber die Zerstörung von PT führt zu den schlimmsten Konsequenzen, da es keinen Zugriff auf die auf dem Laufwerk gespeicherte Information erlaubt. PT kann vollständig und teilweise zerstört werden - d.h. einige der Elemente sind zerstört, und der Rest ist intakt. Es gibt Zeiten, in denen das PT im MBR intakt ist und der Partitionsdatensatz in einem der Links in der erweiterten Partitionskette zerstört wird. Da jedoch die Struktur des MBR und die Struktur absolut identisch sind (mit der Ausnahme, dass in den Elementen der erweiterten Partition kein Code vorhanden ist), ist die Wiederherstellungstechnik in beiden Fällen dieselbe.
Es gibt genügend Programme, die zerstörte PTs reparieren können. Die Qualität ihrer Arbeit ist unterschiedlich und hängt hauptsächlich davon ab, wie schwierig es war, die Platte zu partitionieren, ob die Arten von Partitionen, die auf der Platte waren, dem Programm bekannt sind und ob es andere Datenkorruption in anderen Sektoren gibt, besonders in den BR-Partitionen. Wir suchen jedoch keine einfachen Wege, und wenn Ihnen kein Chef über den Kopf hängt, "drucken Sie meine Form schneller aus, springen Sie, ich komme spät in den Urlaub!", Sie werden viel mehr Freude haben, wenn Sie selbst, ohne automatische Programme, Nur mit ihrem Wissen können alle Informationen wiederhergestellt werden. Sie können sogar alle notwendigen Nachforschungen anstellen, alle Zahlen erhalten, die Sie in PT schreiben müssen, und dann das Wiederherstellungsprogramm ausführen und nach dessen Arbeit sicherstellen, dass alles korrekt berechnet wird. Oder vielleicht sogar die Ergebnisse ihrer Arbeit korrigieren, wenn sie nicht 100% gearbeitet hat.
Also, für die Arbeit brauchen wir: Boot-Diskette mit jedem DOS, die die Datei DISKEDIT.EXE, Bleistift, Papier, Taschenrechner (aber der Rechner ist in DISKEDIT) und ein paar Gehirne kopiert. Es ist natürlich wünschenswert, dass sowohl DOS als auch DISKEDIT frischer sind. Ich verwende DOS 7.10 von Windows 98 SE und DISKEDIT aus dem Paket NORTON UTILITIES 2002. In diesem Stadium sind keine Treiber erforderlich, außer wenn das Laufwerk an einen alten SCSI-Controller angeschlossen ist und ohne das Laden des Treibers einfach nicht sichtbar ist. Sie können den Maustreiber herunterladen - es wird ein wenig bequemer sein. Jetzt die Hauptkleinigkeit - außer den angegebenen Dateien auf der Diskette sollte es nichts geben! Dies ist wichtig - wenn keine Konfigurationsdatei auf der Diskette vorhanden ist, wird DISKEDIT.EXE im schreibgeschützten Modus gestartet und keine Daten auf dem Datenträger werden geändert, bis wir explizit danach gefragt werden. Eine Diskette im Allgemeinen würde von der Aufzeichnung geschlossen werden.
Starten Sie von der Diskette. Führen Sie DISKEDIT.EXE aus. Drücken Sie nach dem Laden die Tasten Alt-D (oder über das Menü Objekt-Laufwerk). Ein Fenster mit den verfügbaren Festplattengeräten wird angezeigt. Zuerst weisen wir darauf hin, dass wir physische Festplatten brauchen, und wählen dann die richtige Festplatte (sagen wir Festplatte 1) und klicken auf OK. In diesem Fall werden alle Sektoren der Festplatte vom ersten bis zum letzten als Betrachtungsbereich ausgewählt. Das brauchen wir.
Zuerst werden wir das Programm auffordern, einen Festplatten-Scan durchzuführen und alle Sektoren zu finden, die Elemente der erweiterten Partition oder BR-Kette sein können. Und obwohl DISKEDIT einfach nach Sektoren sucht, die eine Signatur haben, und nicht den Inhalt analysieren (das nehmen wir uns zu), können die Ergebnisse die Arbeit viel einfacher machen. Die Wahrheit wird geduldig sein müssen - der Prozess ist nicht schnell, und außerdem muss jeder Sektor, den Sie finden, für einen Bleistift genommen werden, aber das Kerzenlicht kostet.
Also, Werkzeuge - Finde Objekt - Partition / Boot. Lass uns gehen. Jedes Mal, wenn ein Sektor mit einer Signatur erscheint, stoppt die Suche, der Sektor-Dump wird angezeigt und die Sektornummer in der unteren rechten Ecke. Dies sind die Adressen, die Sie für einen Bleistift benötigen. Wenn wir jedoch beim Partitionieren einer Platte keine besonders ausgeklügelten Methoden verwenden, werden alle Sektoren, die für uns von Interesse sind, auf der Null- oder ersten Seite im ersten Sektor liegen, d.h. Seite 0 oder 1, Sektor 1. Andere Sektoren, z. B. einige Zyl 12, Seite 4, Sektor 52, können gefahrlos ignoriert werden - dies ist Zufall. Es stimmt, wir bekommen die absolute Sektornummer, aber es ist nicht schrecklich, für die "richtigen" Sektoren wird die Nummer durch die Anzahl der Sektoren pro Track geteilt, normalerweise 63 (andere Werte sind jetzt viel seltener - 17, 26, 40, 56, also weiter im Text) wo immer ich über die Anzahl der Sektoren 63 sprechen werde, bedenke, dass auf deiner speziellen Festplatte möglicherweise eine andere Nummer verwendet werden muss). Und diese Figur können wir über das Menü (Info - Drive Info) einsehen. Leider kann die Anzahl der Seiten und Zylinder falsch sein (nicht passend für die verwendete Sendung), aber es ist auch nicht schrecklich. Nachdem Sie die Nummer des nächsten Sektors notiert haben, setzen wir die Suche fort (Sie können das Menü "Extras - Erneut suchen" verwenden, Sie können nur Strg-G drücken). Und bis wir eine Nachricht bekommen, dass das Objekt nicht gefunden wurde. In diesem Moment haben wir alle Sektornummern, in denen die Signatur vorhanden ist, auf unseren Händen (oder vielmehr auf dem Papier).
Теперь обрабатываем список, отсеивая явно случайные номера (это которые не делятся на 63), и особо выделяя пары номеров, которые различаются на 63. Эти пары - не что иное как пара из элемента Extended Partition и BR описанного в нём раздела.
Теперь отложим на минутку листок с цифрами и попытаемся вспомнить, какого размера разделы были на диске. Так, крупными мазками, 600 мегабайт, 12 гигабайт… запишем всё что помним. Если сумма не равна объёму накопителя - либо что-то забылось, либо неверно вспомнилось, либо было пространство, не принадлежавшее ни одному разделу (а что, бывает… знаю не один случай, когда десятигигабайтный жёсткий диск разбивался на компьютере, материнская плата которого не понимала более восьми гигабайт, а при апгрейде это как-то не вспомнилось… вот так 2 гигабайта и зависли). На этом этапе желательно вспомнить ещё и типы файловых систем в каждом из разделов.
Теперь возьмём оба листка и попытаемся совместить полученные данные. Мегабайт - две тысячи секторов, гигабайт - два миллиона… приблизительно. Но обычно удаётся совершенно однозначно наложить одно на другое. Полезно бывает нарисовать длинный прямоугольник, расставить на нём границы, соответствующие найденным секторам, и поделить на кусочки, соответствующие размерам разделов. Даже если однозначности нет - не беда. Разберёмся. При совмещении данных рекомендую помнить, что некоторые BR и элементы цепи Extended Partition могут быть разрушены (и соответственно не будут найдены), причём наиболее часто разрушаются BR первого (по положению на накопителе) раздела и BR активного раздела.
Впрочем, на данном этапе, пожалуй, всё… и не потому, что дальше некуда, а по другой причине - для дальнейшей работы по восстановлению требуется анализ других структур, которые располагаются уже в "найденных" разделах - это BR, FAT/MFT, каталоги и пр… мы их пока не рассматривали. Впрочем, иногда и найденной и вспомненной информации достаточно. В конце статьи приведен пример такого восстановления (пока не написан).
Иногда знание структуры разделов применяют совершенно для других целей - например, для создания своего собственного разбиения диска на разделы. Пример такого применения также есть в конце статьи.
При создании нестандартного разбиения диска на разделы, кроме требований, описанных ранее (один расширенный раздел и пр.), рекомендую также учитывать то, в каком порядке ОС MS-DOS и Windows назначают разделам буквы логических дисков ( Q51978 - Order in Which MS-DOS and Windows Assign Drive Letters ). Буквы присваиваются, начиная с C: (A: и B: зарезервированы для дисководов гибких дисков, возможно виртуальных). Порядок подключения таков:
  1. Раздел, с которого загружается ОС (при загрузке с жёсткого диска).
  2. Первые первичные разделы остальных жёстких дисков в порядке их нумерования (инициализации) BIOS компьютера.
  3. Разделы в Extended Partition жёстких дисков в порядке их нумерования (инициализации) BIOS компьютера, в порядке их записи в Partition Table дисков.
  4. Остальные первичные разделы дисков, в порядке их записи в Partition Table по порядку их нумерования (инициализации) BIOS компьютера.
  5. Устройства, формируемые драйверами, запускаемыми в файлах config.sys и autoexec.bat, в порядке их формирования и инициализации, если формируемому устройству не назначается в явной форме определённая буква или диапазон букв.
  6. Для ОС, которые могут опознавать и подключать накопители, не инициализируемые BIOS компьютера (не описанные в установках CMOS накопители) - разделы этих накопителей в соответствии с правилами 3 и 4 в порядке инициализации накопителей операционной системой.
Разделы не известных ОС типов не инициализируются и буквы им не присваиваются.
Следует помнить, что ОС семейства Windows NT имеют штатные средства переопределения букв логических дисков.

Пример 1. Ручное разбиение на разделы.

  • Параметры накопителя в LBA-трансляции (взяты из BIOS - Autodetect Hard Disk) - Cylinders 1216, Heads 255, Sectors 63, Capacity 10 Gb.
  • Желаемое разбиение: система 2 Гбайт, данные - 2 Гбайт, игры и дистрибутивы - остальное. Желательно разместить системный раздел в конце диска (по тестам там самая быстрая область), игры - в начале диска (по заверениям специалистов, наиболее часто данные повреждаются именно там).
  • Операционная система - Windows 98 SE rus, все разделы - FAT-32.
Исходя из желаемого разбиения, видится следующая схема: сначала расширенный раздел с двумя логическими дисками в нём - 6 и 2 Гбайт, потом первичный активный раздел 2 Гбайт, либо 3 первичных раздела в указанном порядке и с указанными размерами. Последний вариант нам не подходит (неважно по каким соображениям). Особенности работы программы FDISK выбранной ОС не позволяют выполнить разбиение штатно: если сначала мы создадим первичный раздел, он будет находиться в начале накопителя, если же мы сначала создадим расширенный раздел, то программа отказывается создавать первичный.
Принимаем решение провести разбиение с помощью FDISK насколько возможно, а затем доделать вручную. Первый этап: создать расширенный раздел с двумя дисками; второй: вручную добавить запись о первичном разделе.
Первый этап проблем не вызывает: загружаемся с дискеты, создаём extended partition размером 8 Гбайт, и в ней два логических диска - 6 Гбайт и 2 Гбайт. Перезагружаемся с дискеты, убеждаемся, что на диске появились (но недоступны - ведь мы не форматировали разделы!) диски C: и D:. Форматируем их при помощи стандартного FORMAT и в процессе форматирования убеждаемся, что диск C: имеет размер 6 Гбайт, диск D: - 2 Гбайт. Запускаем DISKEDIT и смотрим содержимое MBR. В нём имеется следующая запись:
 Starting location Ending location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sector Sectors Sectors
EXTEND No 1 0 1 254 972 63 63 15631182
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
Нам нужно добавить запись о первичном разделе. Тип (System) будет 0Ch (FAT32x), признак загрузки установлен, начало раздела по адресу 973/0/1, конец раздела по адресу 1215/254/63, относительный сектор начала раздела 15631245 (973*255*63+0*63+1-1), относительный сектор конца раздела 19535039 (1215*255*63+254*63+63-1), количество секторов 3903795 (19535039-15631245+1). Весьма существенная тонкость - если номер цилиндра более 1023, в соответствующее поле вносится значение 1023 - увы, это максимальное значение, которое можно туда записать - а правильное значение ОС рассчитает исходя из заданного количества секторов.
Переводим DISKEDIT в режим Read-Write (Tools-Configuration) и во второй строке вписываем рассчитанные данные. После ввода и проверки всех значений выходим из DISKEDIT клавишей Esc, а на вопрос, что делать с изменениями, отвечаем - записать (write). Wir starten den Computer neu. Убеждаемся, что на диске теперь три раздела - C: - недоступен, D: - 6 Гбайт, E: - 2 Гбайт. Форматируем диск C: с переносом на него системных файлов, в процессе форматирования убеждаемся, что диск C: имеет размер 2 Гбайт. Обновляем код MBR командой FDISK /MBR, вынимаем дискету, перезагружаем компьютер, убеждаемся, что ОС загрузилась, диски C:, D: и E: доступны и имеют размеры 2, 6 и 2 Гбайт. Запускаем NDD и убеждаемся, что ошибок ни в таблице разделов, ни на дисках нет. Разбиение закончено.
Теперь таблица разделов при просмотре через DISKEDIT выглядит так:
 Starting location Ending location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sector Sectors Sectors
EXTEND No 1 0 1 254 972 63 63 15631182 ; Расширенный раздел
FAT32x Yes 0 973 1 254 1023 63 15631245 3903795 ; Первичный раздел (C :)
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
Если поставить курсор на строку с записью о расширенном разделе и нажать Enter, то DISKEDIT автоматически перенесёт просмотр в сектор, на который указывает адрес начала раздела (для первичного раздела это будет BR, для расширенного - элемент цепи разделов). В нашем случае мы увидим такое содержимое элемента цепи разделов:
 Starting location Ending location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sector Sectors Sectors
FAT32x No 2 0 1 254 728 63 63 11711259 ; Логический раздел (D :)
EXTEND No 0 729 1 254 972 63 11711322 3919923 ; Расширенный раздел
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
Продолжим движение по цепи разделов в следующий элемент:
 Starting location Ending location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sector Sectors Sectors
FAT32x No 1 729 1 254 972 63 63 3919860 ; Логический раздел (E :)
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
Очередной элемент цепи не содержит записи о расширенном разделе. Цепь закончилась.