Was schreibt Grub in den Boot-Sektor für MBR-Boot?

818
Will Haley

Ein Teil des syslinux- Installationsprozesses umfasst die Installation mbr.bindes Master-Boot-Datensatzes eines Geräts.

dd \ conv=notrunc \ bs=440 \ count=1 \ if=/usr/lib/syslinux/mbr/mbr.bin \ of=/dev/sdX 

Wenn ich diese Bytes von der Festplatte wiederherstellen und mit der Originaldatei vergleiche mbr.bin, sind sie identisch.

$ sha512sum /usr/lib/syslinux/mbr/mbr.bin 3ba2bd96c7e5d81e... $ dd bs=440 count=1 if=/dev/sdX | sha512sum 3ba2bd96c7e5d81e... 

So weit, ist es gut! Es scheint logisch, dass diese beiden Prüfsummen identisch sein sollten.

Grub erscheint mir ein bisschen geheimnisvoller, wenn ich versuche, dasselbe Verhalten wie bei Syslinux zu erreichen.

Wenn ich ein wenig nachlade, dpkg-reconfigure grub-pckann ich sehen, dass meine grubInstallation dies beim Aufruf eines neuen Bootloaders aufruft ...

grub-install --target=i386-pc --force --no-floppy /dev/sdX 

Wenn Sie denselben grub-installBefehl ausführen und hinzufügen --verbose, sehe ich diese grub-installAufrufe grub-bios-setup.

grub-bios-setup \ --verbose \ --force \ --directory='/boot/grub/i386-pc' \ --device-map='/boot/grub/device.map' \ '/dev/sdX' 

Wenn ich mir einige Quellen ansehe, denke ich, grub-bios-setupist es das, was für das Schreiben in den MBR verantwortlich ist, denn wenn ich die ersten 512 Bytes auf Null setze und dann erneut laufe grub-bios-setup, sehe ich, dass diese Bytes wieder zu dem zurückkehren, was sie waren, bevor ich sie auf Null gesetzt habe.

Leider verstehe ich den Code nicht gut genug, um zu verstehen, was geschrieben wird grub-bios-setup.

Ich hatte einige Probleme. Ich denke, ein Teil des Geschriebenen hat damit zu tun boot.img. Wenn ich bestimmte Bytes meines Bootsektors vergleiche und boot.imgsie gleich sind (beachten Sie, die Gesamtzahl der hier gelesenen Bytes ist 440).

$ skip=104 count=336; \ sudo dd if=/boot/grub/i386-pc/boot.img \ skip=$skip bs=1 count=$count 2>/dev/null | sha512sum ; \ sudo dd if=/dev/sdX \ skip=$skip bs=1 count=$count 2>/dev/null | sha512sum  e531a81fd3eedb324a9... e531a81fd3eedb324a9... 

Sie haben Ähnlichkeiten, sind aber nicht ganz dasselbe. Die ersten 104Bytes unterscheiden sich, und ich kann nicht verstehen, was diesen Unterschied verursacht.

Gibt es eine vergleichbare mbr.binDatei für Grub? Ist es boot.img? Ändert Grub dann einige dieser Bytes? Erzeugt Grub diese unterschiedlichen Bytes im laufenden Betrieb? Sind die von Grub generierten Bytes für jedes System spezifisch und jedes Mal eindeutig, wenn Grub sie schreibt?

1
Ich habe versucht, auf meinem System nachzuschauen, was es verwendet, aber ... Ich bin vor einiger Zeit zu EFI gewechselt. Ignacio Vazquez-Abrams vor 6 Jahren 0

1 Antwort auf die Frage

1
Johan Myréen

Ja, boot.imgwird in die ersten 440 Bytes des MBR geschrieben. boot.imgenthält einen "BIOS-Parameterblock", der Daten enthält, die von dem System abhängen, auf dem er installiert ist. Diese Daten werden bei der Installation von Grub in das BPM geschrieben. Hier ist der Quellcode.

Übrigens, ich würde nicht viel Zeit mit GRUB verbringen. Dieser Code wird wahrscheinlich in ein paar Jahren nicht auf neuen PCs ausgeführt. Intel plant, den alten BIOS-Modus bis 2020 zu beseitigen.

Danke für diese Info! Wenn Sie sagen "Diese Daten werden bei der Installation von Grub in das BPM geschrieben", meinen Sie, dass die BPB-Daten zu dem Zeitpunkt abgeleitet / geschrieben werden, wenn Grub im MBR installiert wird? Wenn Sie so etwas wie "grub-install" ausführen, führt dies dazu, dass der systemspezifische BPB und der generische "boot.img" in diesen 440 Bytes im MBR zusammengefasst werden. Oder meinen Sie, dass die BPB geschrieben wird, wenn die Binärdateien / Pakete von Grub auf dem Hostsystem installiert sind? Will Haley vor 6 Jahren 0
Und ich weiß, EFI ist die moderne / richtige Art, Dinge jetzt zu tun, aber ich wusste nicht, dass das alte BIOS eine gewisse Frist hatte. Gut zu wissen, dass es bis 2020 geht. Vielen Dank! Will Haley vor 6 Jahren 0
Wenn Grub installiert ist, liest das Setup-Programm `boot.img` in den Speicher und pacthes es, bevor es als neuer MBR auf die Festplatte geschrieben wird. Die Daten stammen aus zwei verschiedenen Quellen: Der BPM und die Partitionstabelle werden von der Festplatte gelesen und einige werden schnell generiert, z. B. das Startlaufwerk (Offset 0x64) und der Kernel_sector (Offset 0x5c). Bei Bedarf werden sogar zwei Befehlsbytes in NOPs geändert. Der BPM ist nicht im MBR vorhanden, die entsprechenden Bytes werden jedoch trotzdem kopiert. Johan Myréen vor 6 Jahren 0
Die Frist bis 2020 wurde von Intel Ende 2017 angekündigt, aber ich würde nicht den Atem anhalten. Auf der anderen Seite sehe ich das Dumping des BIOS langfristig als eine gute Sache, da die Koexistenz von BIOS und UEFI viel Verwirrung stiftet. Johan Myréen vor 6 Jahren 0