Was schreibt Grub beim MBR-Boot in den Bootsektor?

Was schreibt Grub beim MBR-Boot in den Bootsektor?

Teil des SyslinuxInstallationsprozessbeinhaltet die Installation mbr.binim Master-Boot-Record 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 wiederherstelle und sie 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, so gut! Es scheint logisch, dass diese beiden Prüfsummen identisch sein sollten.

Grub erscheint mir etwas mysteriöser, wenn ich versuche, damit dasselbe Verhalten wie Syslinux zu erreichen.

Durch ein wenig Recherche dpkg-reconfigure grub-pchabe ich festgestellt, dass meine grubInstallation dies aufruft, wenn sie einen neuen Bootloader installiert ...

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

Wenn ich denselben grub-installBefehl ausführe und hinzufüge --verbose, sehe ich, dass grub-installaufgerufen wird grub-bios-setup.

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

Wenn man sich einige derQuelle, ICHdenkendas grub-bios-setupist für das Schreiben in den MBR verantwortlich, denn wenn ich die ersten 512 Bytes auf Null setze und dann erneut ausführe grub-bios-setup, sehe ich, dass diese Bytes wieder auf den Zustand vor dem Nullsetzen zurückgesetzt werden.

Leider verstehe ich den Code nicht gut genug, um ihn vollständig zu verstehenWaswird geschrieben von grub-bios-setup.

Ich hatte einige Ahnungen. IchdenkenEin Teil dessen, was geschrieben steht, hat mit zu tun boot.img. Wenn ich bestimmte Bytes aus meinem Bootsektor und vergleiche boot.img, sind sie tatsächlich gleich (beachten Sie, dass die Gesamtzahl der hier gelesenen Bytes 440) beträgt.

$ 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, aber sie sind nichtvollständigdas gleiche. Die ersten 104Bytes unterscheiden sich und ich kann nicht verstehen, was diesen Unterschied verursacht.

Gibt es eine vergleichbare mbr.binArt von Datei für Grub? Gibt es sie boot.img? Ändert Grub dann einige dieser Bytes? Generiert Grub diese unterschiedlichen Bytes im laufenden Betrieb? Sind diese von Grub generierten Bytes systemspezifisch und jedes Mal, wenn Grub sie schreibt, eindeutig?

Antwort1

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

Übrigens würde ich nicht viel Zeit mit GRUB verbringen. Dieser Code wird in ein paar Jahren wahrscheinlich nicht mehr auf neuen PCs laufen. Intel plant, den Legacy-BIOS-Modus bis 2020 abzuschaffen.

verwandte Informationen