`install-grub` behauptet, dass ich mehrere Partitionsbezeichnungen habe und dass das Einbetten unmöglich ist

19

Ich versuche, GRUB auf meinem nicht bootenden Desktop-Computer zu installieren, aber es treten mehrere Fehler auf. Andere Quellen, die diese Fehler diskutieren, haben sie entweder auf einen Mangel an freiem Speicherplatz vor der ersten Partition (ich habe den erforderlichen freien Speicherplatz) oder auf ein Problem mit /boot/grub/grub.cfg(Problem besteht auch nach korrekter Neuerstellung dieser Datei) zurückgeführt.

Ich habe mit einem Live-USB-Gerät gebootet und versucht, GRUB mit den folgenden Befehlen neu zu installieren, aber es ist ein Fehler aufgetreten, der das Funktionieren verhindert:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install - Stammverzeichnis = / mnt / dev / sda
Installation für die i386-pc-Plattform.
grub-install: warning: Es wird versucht, GRUB auf einer Festplatte mit mehreren Partitionsbezeichnungen zu installieren. Dies wird noch nicht unterstützt.
grub-install: warning: Einbetten ist nicht möglich. GRUB kann in diesem Setup nur mithilfe von Blocklisten installiert werden. Blocklisten sind jedoch UNRELIABLE und von ihrer Verwendung wird abgeraten.
grub-install: error: Fährt nicht mit Blocklisten fort.

Allerdings /dev/sdascheint korrekt zu sein für die Installation von grub formatiert:

$ sudo fdisk -l / dev / sda

Disk / dev / sda: 111,8 GiB, 120034123776 Bytes, 234441648 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch / physikalisch): 512 Bytes / 512 Bytes
E / A-Größe (Minimum / Optimum): 512 Bytes / 512 Bytes
Disklabel Typ: dos
Festplattenkennung: 0x8d91017b

Gerätestart Start Ende Sektoren Größe ID Typ
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1: UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7" TYPE = "ext4" PARTUUID = "8d91017b-01"

Es verfügt zu Beginn über den standardmäßigen freien Speicherplatz von 1 MB und /dev/sda1ist korrekt formatiert. Ich habe versucht grub-mkconfig, die Konfigurationsdatei mithilfe von neu zu erstellen:

$ für f in proc sys dev dev / pts; mounten Sie sudo --bind / $ f / mnt / $ f; getan
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Grub-Konfigurationsdatei wird erstellt ...
Gefundenes Linux-Image: /boot/vmlinuz-3.19.0-26-generic
Gefunden initrd image: /boot/initrd.img-3.19.0-26-generic
Gefundenes Linux-Image: /boot/vmlinuz-3.19.0-23-generic
Gefunden initrd image: /boot/initrd.img-3.19.0-23-generic
Hinzufügen eines Startmenüeintrags für die EFI-Firmware-Konfiguration
getan

Ich erhalte jedoch immer noch die gleiche Fehlermeldung beim Ausführen grub-install, egal ob in der chrootUmgebung oder außerhalb .

Beim Booten des Live-USB im Legacy-Modus wird derselbe Fehler angezeigt. Der einzige Unterschied ist die Ausgabe des Laufens grub-mkconfigin der chrootUmgebung:

# grub-mkconfig -o /boot/grub/grub.cfg
Grub-Konfigurationsdatei wird erstellt ...
Gefundenes Linux-Image: /boot/vmlinuz-3.19.0-26-generic
Gefunden initrd image: /boot/initrd.img-3.19.0-26-generic
Gefundenes Linux-Image: /boot/vmlinuz-3.19.0-23-generic
Gefunden initrd image: /boot/initrd.img-3.19.0-23-generic
Gefunden memtest86 + Bild: /boot/memtest86+.elf
Gefunden memtest86 + Bild: /boot/memtest86+.bin
Windows 7 (Loader) auf / dev / sdc1 gefunden
getan

Wie kann ich grub richtig installieren lassen?

AJMansfield
quelle

Antworten:

25

Nuke die Lücke zwischen dem Bootsektor und der ersten Partition.

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

Dies gilt für den Fall, dass die erste Partition im Sektor 2048 beginnt. Einige werden früher gestartet, insbesondere auf Laufwerken, die von Windows partitioniert wurden. Um sicher zu sein, laufen

# fdisk -l /dev/sdX

vor dem Start und überprüfen Sie, wo die erste Partition beginnt. Verwenden Sie count=S-1, wobei S der Anfang der ersten Partition ist.

rätselhafter Physiker
quelle
Das hat bei mir funktioniert. Ich versuche, BTRFS auf einer separaten ext4 / boot-Partition zu verwenden. Vielen Dank.
Thales Ceolin
Beachten Sie, dass dadurch ein GPT-Layout in den Papierkorb verschoben wird. Es ist jedoch möglich, von seiner Sicherung wiederherzustellen.
CR.
Wenn Sie GPT verwenden, müssen Sie die BIOS-BOOT-PARTITION löschen. Wo das ist, hängt davon ab, wie Sie Ihre Festplatte ausgelegt haben. Ich habe meine nach der GPT zwischen Block 34 und 2047 eingefügt, vorausgesetzt, die erste "echte" Partition beginnt bei Block 2048. Das Ändern der angegebenen Befehlszeile zur Verwendung seek=34 count=2014funktioniert für mich.
am
funktioniert perfekt!!!! Grub sollte es aber automatisch tun
Brauliobo
1
Ja, du denkst schon, @brauliobo, aber GRUB ist totaler Müll. Ich benutze es nicht einmal mehr. In diesen Tagen verwende ich Syslinux für mbr und systemd-boot für gpt.
enigmaticPhysicist
3

Sie können eine neue Partition erstellen, in der sich der GPT-Datensatz befindet, und diese anschließend mit löschen dd. Auf diese Weise bleibt nur der MBR-Datensatz erhalten.

Angenommen, das Problemgerät ist /dev/sda:

Erstellen Sie eine neue Partition in den ersten 1 MB

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

Setzen Sie dann die neu erstellte Partition auf Null

$ dd if=/dev/zero of=/dev/sda2

Löschen Sie dann die Partition

$ parted /dev/sda
$ rm 2
$ quit

grub-install sollte jetzt wie erwartet funktionieren.

swaroop
quelle
Bitte bearbeiten Sie Ihre Antwort, um zu begründen, was dieser Code bewirkt und warum er Ihrer Meinung nach eine Lösung darstellt.
Martin Thornton
Hat für mich gearbeitet. Bearbeitet aus Gründen der Klarheit
Nitz
3

Hatte ein ähnliches Problem mit den mehreren Partitionsbezeichnungen, obwohl ich mir ziemlich sicher bin, dass dies nicht der Fall ist.

sudo grub-install target=i386-pc /dev/sda --force

ist das, was ich verwendet habe, um dies zu umgehen. Das Anheften einer --forceist keine "empfohlene" Lösung, aber ich hatte bisher keine Probleme = P

krum85
quelle
1

Folgendes habe ich getan, damit es wieder funktioniert:

Gebraucht gdisk zum Konvertieren der MBR-Partition in GPT verwendet. Fügen Sie eine Partition in den leeren Bereich ein (Typ EF02 "BIOS-Boot-Partition"), transponieren Sie ihren Eintrag mit meiner ursprünglichen Partition und kennzeichnen Sie sie als bootfähiges Legacy-BIOS.

Dann rannte

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install - Stammverzeichnis = / mnt / dev / sda

Es wurde dann erfolgreich installiert und ich kann von meinem Hauptlaufwerk booten.

AJMansfield
quelle