Warum und wann schreibt ein schnelles Format für FAT32 unterschiedliche Strukturen in Sektor 0 auf einem USB-Flash-Laufwerk?

982
Michiel Pater

Einleitung: Für ein Forschungsprojekt versuche ich, einen Bootloader auf ein USB-Flash-Laufwerk zu schreiben. Nach einigen Versuchen gelang es mir, dies zu tun. Ich würde gerne wissen, wie ich das reproduzieren kann.

Was ich getan habe: Kürzlich habe ich ein neues USB-Flashlaufwerk gekauft und die physische Festplatte in HxD (einem hexadezimalen Editor für Windows) geöffnet. Es wurde bereits als FAT32 formatiert, Sektor 0 hatte jedoch eine völlig andere Struktur als auf dieser Webseite beschrieben

Auf dieser Webseite ist klar, dass zwei Zeichenketten vorhanden sind: MSDOS5.0und FAT32. Beide waren nicht in Sektor 0 vertreten.

Nach dem Experimentieren und dem schnellen Formatieren des Laufwerks in Windows auf FAT32 auf die Standardmethode blieb der Sektor 0 anders strukturiert als die oben beschriebene. Als ich versuchte, es nach dem Verwenden von mkisofs für Windows und dem Schreiben des ISO-Speichers auf das USB-Flash-Laufwerk mit PowerISO erneut zu formatieren, wurde die Struktur von Sektor 0 schließlich zu der oben beschriebenen geändert.

Meine Frage: Warum hat sich das geändert? Und wie kann ich das für neue USB-Sticks reproduzieren?

Bearbeiten: Ich brauche den Sektor in der gleichen Struktur wie auf der Webseite für mein Projekt beschrieben.

1
Sektor 0 * der Platte * enthält die Partitionstabelle. Es ist immer noch meistens MBR, besonders auf tragbaren Geräten. Vielleicht möchten Sie einen Blick auf den Linux-FAT32-Treiber werfen. Diese Frage ist wahrscheinlich für [so] übrigens besser geeignet Daniel B vor 9 Jahren 0
* "USB-Gerät" * ist mehrdeutig. Mit * "USB-Laufwerk" * meinen Sie vermutlich ein USB-Flash-Laufwerk und nicht eine USB-Festplatte (die im ersten Sektor immer einen MBR hat und nicht einen Dateisystem-Bootsektor). Ein Flash-Laufwerk sollte nicht als "Festplatte" bezeichnet werden. Linux behandelt ein USB-Flashlaufwerk immer wie eine Festplatte. Windows kann ein USB-Flashlaufwerk wie eine Festplatte behandeln. Normalerweise wird es jedoch so formatiert, als wäre es nur eine Partition, dh kein MBR in Sektor 0, und das Dateisystem wird ab Sektor 0 installiert. Auch das ISO-Dateisystem ist für eine Festplatte oder das Festplattenlaufwerk nicht korrekt Flash Drive. sawdust vor 9 Jahren 0
Das stimmt nicht, @sawdust. Windows benötigt auch eine Partitionstabelle für USB-Wechseldatenträger. Daher beginnt das eigentliche Dateisystem * niemals * bei Sektor 0. Unter Linux können Sie dies jedoch * tun. Daniel B vor 9 Jahren 1
@DanielB - * "Das stimmt nicht" * - Du bist so unklar wie das OP. Was ist nicht richtig, alles, was ich geschrieben habe? Ist eine Festplatte, die über einen USB-SATA-Adapter angeschlossen ist, ein "USB-Wechseldatenträger" *? sawdust vor 9 Jahren 0
@sawdust Nichts mehrdeutig. Weißt du, es gibt etwas, das Kontext heißt. // Überraschenderweise unterstützt Windows zwar nicht partitionierte Geräte, dies ist jedoch in keiner Weise der Standardfall. Natürlich kaufe ich kein neues Laufwerk, nur um zu sehen, was drauf ist, aber ich wette, es wird eine Partition geben. Ein Wechseldatenträger ist ein Laufwerk mit dem Wechseldatensatz. Aber das wussten Sie schon. Daniel B vor 9 Jahren 0
@DanielB * "Überraschenderweise unterstützt Windows in der Tat nicht partitionierte Geräte" * Ja, das hat es immer, seit dem Beginn von MS-DOS mit Disketten. Vielleicht bist du zu jung, um sich daran zu erinnern. sawdust vor 9 Jahren 0

1 Antwort auf die Frage

1
sawdust

Ich versuche, einen Bootloader auf ein USB-Gerät zu schreiben.

"USB-Gerät" ist mehrdeutig. Es gibt USB-Video- und Audiogeräte sowie verschiedene Speichergeräte. Mit "USB-Laufwerk" meinen Sie vermutlich ein USB-Flashlaufwerk und nicht eine USB-Festplatte (die im ersten Sektor immer einen MBR hat und nicht einen Dateisystem-Bootsektor).

Es wurde bereits als FAT32 formatiert, Sektor 0 hatte jedoch eine völlig andere Struktur als auf dieser Webseite beschrieben

Das Flash-Laufwerk scheint einen MBR (Master Boot Record) mit einer Partitionstabelle (in Sektor 0) zu haben, und das FAT-Dateisystem befand sich in einer primären Partition.
Wie auf dieser Webseite erwähnt, handelt es sich dabei um Sektorabbilder von Bootsektoren, die im ersten Sektor eines Dateisystems installiert sind, das sich normalerweise in einer Partition (oder im ersten Sektor einer Diskette) befinden würde.

Und wie kann ich das für neue USB-Laufwerke reproduzieren?

Ich kann den Dateisystem-Bootsektor in Sektor 0 eines USB-Flashlaufwerks installieren

  1. Nullstellen eines beliebigen MBR in Sektor Null. Bei einem Linux-System
    sudo dd if=/dev/zero of=/dev/sdX count=64
    Dies ist möglicherweise der entscheidende Schritt, insbesondere wenn bereits ein MBR vorhanden ist. Ich weiß nicht, wie ich diesen Schritt unter Windows ausführen kann.

  2. Formatieren Sie das USB-Flashlaufwerk mit Windows (Windows besteht darauf, es zu formatieren, bevor Sie es trotzdem verwenden können). Ich habe Win7 verwendet, um das Laufwerk schnell zu formatieren, um die Ergebnisse unten zu erhalten.

Der resultierende Sektor 0 auf dem USB-Flash-Laufwerk ähnelt dem, was Sie möchten (dh es ist kein MBR und es gibt keine Partitionstabelle). enter image description here

Nachtrag

Ich bin nicht sicher, ob ich den Unterschied zwischen einem MBR- und einem Dateisystem-Bootsektor richtig verstehe

Der Master Boot Record, MBR, wird im ersten Sektor eines Massenspeichergerätes mit PC-Partition installiert. Am Ende des Sektors befindet sich eine Partitionstabelle, die das Gerät in kleinere logische Geräte unterteilt. Eine Partition wird als "aktiv" markiert, und der Startcode im MBR lädt und führt den ersten Sektor dieser "aktiven" Partition aus.

Der erste Sektor einer bootfähigen Partition (oder der erste Sektor einer Diskette) enthält einen Bootloader. Das in dieser Partition installierte Dateisystem verfügt über den entsprechenden Code in diesem ersten Sektor, um den Startvorgang fortzusetzen, wenn ein Betriebssystem installiert wird.
Wenn kein Betriebssystem oder das nächste zu ladende Boot-Programm (z. B. BOOTMGR) vorhanden ist, gibt der Bootloader Text aus, der besagt, dass es sich nicht um ein startfähiges Gerät / eine startfähige Partition handelt (z. B. "Entfernen von Datenträgern oder anderen Datenträgern. Datenträgerfehler. Drücken Sie eine beliebige Taste, um einen Neustart durchzuführen. ")

IOW Sie möchten, dass das USB-Flash-Laufwerk einer Superparty-Diskette und nicht einer (partitionierten) Festplatte ähnelt.
Beachten Sie die Grenzen des Dateisystems, z. B. ist das tragbarste Dateisystem, FAT32, auf 32 GB beschränkt.

Zu Ihrer Information Ich bin mir dieser Besonderheit bei USB-Flash-Laufwerken und SD-Karten bewusst, da durch das Weglassen der MBR- und Partitionstabelle solche Speichermedien auf einigen Linux-Embedded-Geräten (die Partitionen erwarten) nicht lesbar sind. In Tutorials zum Initialisieren von bootfähigen VFAT-Medien für Embedded Linux werden häufig Partitionierung und Formmatting unter Linux angegeben, um diese Windows- Fehler zu vermeiden .

Ich danke Ihnen sehr für Ihre Antwort. 1) Ja, ich meine ein USB-Flashlaufwerk. 2) In HxD (einem Hexadezimal-Editor für Windows) habe ich mein Flash-Laufwerk zum Lesen und Schreiben über "Extras"> "Diskette öffnen ..." geöffnet. Es ist unter "Physische Festplatten" sichtbar und wird als "Wechseldatenträger 1" bezeichnet. Haben Sie Quick Format oder das normale Format in Windows verwendet? Vielen Dank. Michiel Pater vor 9 Jahren 0
* "Haben Sie Quick Format oder das normale Format unter Windows verwendet?" * - Quick, aber ich bezweifle, dass es einen Unterschied macht. Das Ausgleichen der Sektoren kann wichtiger sein. sawdust vor 9 Jahren 1
Ich habe meine Frage aktualisiert, um klarer zu sein, dass ich über ein Flash-Laufwerk spreche. Glauben Sie, ich könnte das gleiche Ergebnis in Windows erzielen, indem Sie Sektor 0 auf Null setzen? Oder muss ich alle Sektoren auf Null setzen? Ich bin mir nicht sicher, aber wenn ich mich recht erinnere, habe ich auch einmal versucht, Sektor 0 auf Null zu setzen. Ich bin nicht sicher, ob ich den Unterschied zwischen einem MBR- und einem Dateisystem-Bootsektor richtig verstehe. Vielen Dank. Michiel Pater vor 9 Jahren 0
* "Oder muss ich alle Sektoren auf Null setzen?" * Nicht alle Sektoren, aber zumindest die erste "Spur". Wenn Sie den Befehl `dd` mit dem` count = `- Bezeichner verwenden, können Sie die ersten 64 Sektoren genauso einfach angeben wie nur einen Sektor. Auf einem Windows-PC verwendete ich eine Western Digital- oder Seagate-Dienstprogramm-CD, um Sektoren auf Null zu setzen. Wenn nötig, starte ich jetzt mit einer auf einem USB-Flashlaufwerk installierten Linux LiveCD neu. Siehe auch die bearbeitete Antwort. sawdust vor 9 Jahren 0