Teil des SyslinuxInstallationsprozessbeinhaltet die Installation mbr.bin
im 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-pc
habe ich festgestellt, dass meine grub
Installation dies aufruft, wenn sie einen neuen Bootloader installiert ...
grub-install --target=i386-pc --force --no-floppy /dev/sdX
Wenn ich denselben grub-install
Befehl ausführe und hinzufüge --verbose
, sehe ich, dass grub-install
aufgerufen 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-setup
ist 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 104
Bytes unterscheiden sich und ich kann nicht verstehen, was diesen Unterschied verursacht.
Gibt es eine vergleichbare mbr.bin
Art 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.img
wird in die ersten 440 Bytes des MBR geschrieben. boot.img
enthä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.