OK. Wurde ein bisschen lang für einen Kommentar. Dies steht nicht in direktem Zusammenhang, sondern nur zur Erläuterung des aa55
Kommentars.
Wenn das Basic Input / Output System (BIOS) startet funktioniert es ein Power-On Self Test (POST), prüft die Hardware usw. Dann sieht es für Geräte , die sowohl bootfähig und aktiv im Auftrag von CMOS (Ihre Konfiguration im BIOS gegeben sind - das wiederum ist gegeben durch einen komplementären Metalloxidhalbleiter ). Wenn eine Festplatte 0xaa55
mit dem Offset 510 gefunden wird, lädt sie diesen Abschnitt der Festplatte (Sektor 1) in den Speicher und überlässt ihm die Steuerung unter der Adresse 0x00000 dieses Codes. Diese 512 Bytes sind der Master Boot Record (MBR).
Dieser Code, in diesem Fall " GRUB - boot" , überprüft verschiedene Bytes dieser 512 und fragt das BIOS nach verschiedenen Informationen. In diesem Prozess wird ermittelt, auf welcher Festplatte der Rest von GRUB vorhanden ist, und dieser Abschnitt der Festplatte wird in den Speicher geladen. Anschließend erhält dieser Teil des Codes die Kontrolle. Dieser montiert Kernel usw. und überlässt die Kontrolle dem.
Bei Verwendung von GPT befindet sich das Image, das GRUB aus dem MBR lädt, in der bios_grub
Partition, die Sie haben und die groß genug ist usw. Sie können also nicht erkennen, wie das falsch sein könnte.
Ein "Kein bootfähiges Gerät gefunden." Nachricht vom BIOS - es kann vorkommen, dass der MBR der Bootdiskette beschädigt ist, wenn der MBR endet 0xaa55
und der MBR beschädigt ist, wird normalerweise ein anderer Fehler angezeigt - oder das System hängt einfach.
Jedenfalls. Das ist komisch. Ich stelle fest, dass Sie keine Partition als "boot" markiert haben . Verwenden Sie GPT, das korrekt ist - aber obwohl es verboten ist, können Sie versuchen, eine zu markieren, z sda5
. B. als Boot. In gparted: (erfuhr, dass (g) auch GPT geändert hat, die nicht wollen) fdisk:
# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w
Es kann sein, dass Ihr BIOS mehr tut als es sollte und die Partitionstabelle in MBR überprüft.
BEARBEITEN - Update zum Kommentar:
AFAIK spielt keine Rolle, welches Sie einstellen, da es nicht tatsächlich verwendet wird. Punkt ist, für wen jemals gesagt wird, dass kein "bootfähiges Gerät gefunden" wurde , werden sie zufrieden sein. Dies sda1
ist keine Boot-Partition im herkömmlichen Sinne, sondern Speicherplatz für GRUB-Boot-Dateien.
In einem herkömmlichen Partitionslayout (nicht GPT) haben Sie normalerweise Folgendes:
0x000 [Master Boot Record] <- Partition table say Partition 2 is active
|
0x200 [ GRUB module 1 ] <- core.img from GRUB |
|
0x400 [ Partition 1 Swap ] |
| | |
| | |
|__________________| |
|
0x... [ Partition 2 ext4 ] |
| * Active | <- AKA boot ----------------+
| |
|__________________|
0x... [ Partition 3 ext4 ]
| |
| |
|__________________|
Das würde 3 Partitionen bedeuten. Alles , bevor ich 0x400 auf dem HDD - Offset rohes Bytes - wie in nicht Teil einer Partition usw.
Hier ist die Boot- Partition Partition 2 , eine Systempartition mit Linux.
Die Dateien des GRUB-Moduls 1 befinden sich direkt nach dem MBR und vor der ersten Partition. Es kann sich überall befinden, normalerweise jedoch auf derselben Festplatte und mit einem Versatz von 512 MBR-Festplatten.
Auch auf einem GPT-System - GPT verwendet diesen Abschnitt der Festplatte für sich selbst, daher müssen diese GRUB-Dateien an einen anderen Speicherort verschoben werden. Dafür ist das
gedacht bios_grub
- core.img
für GRUB 2 zu speichern .
Das "Set Boot Flag" ist nur ein Schuss in die Dunkelheit - und wäre überrascht, wenn es funktioniert. Aber irgendwo hat man angefangen.
EDIT2:
Was ist, wenn Sie dies tun:
Aktuellen MBR sichern:
dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
Erstellen Sie ein Bild von Code TEST
unten, das in der Datei gespeichert ist test.s
von:
as -o test.o test.s
objcopy -O binary test.o test.img
Kopieren Sie die test.img
Datei in MBR:
dd if=test.img of=/dev/sda bs=512 count=1
Stiefel
Code TEST:
.file "test.s"
.text
.code16
.globl start, _start
start:
_start:
jmp go
nop
go:
movb $0x48, %al
call prnt_chr
movb $0x65, %al
call prnt_chr
movb $0x6c, %al
call prnt_chr
movb $0x6c, %al
call prnt_chr
movb $0x6f, %al
call prnt_chr
movb $0x21, %al
call prnt_chr
ret
prnt_chr:
movb $0x0e, %ah
int $0x10
ret
. = _start + 0x1fe
.word 0xaa55
So stellen Sie MBR wieder her:
dd if=/path/mbr-backup of=/dev/sda bs=512 count=1
Dies sollte einfach "Hallo!" auf den Bildschirm, wenn der MBR geladen wurde, dann stoppen. Getestet unter qemu-system-x86_64, qemu-system-i386, VirtualBox, stationärem Intel PC 32 und 64-Bit.
dd if=/dev/sda bs=1 skip=510 count=2 2>&- | hexdump
(oder xxd anstelle von hexdump) gleich 55aa? Wenn nicht, ist der MBR schlecht.