grub2 lädt grub.cfg beim Booten vom falschen Laufwerk, nachdem das Betriebssystem auf ein anderes Laufwerk verschoben wurde

grub2 lädt grub.cfg beim Booten vom falschen Laufwerk, nachdem das Betriebssystem auf ein anderes Laufwerk verschoben wurde

Mein Laptop hatte ursprünglich eine 128 GB M.2 SSD und eine 1 TB Festplatte. Das System ist als Dual-Boot mit Windows konfiguriert. Die /boot/efi-Partition befindet sich auf /dev/nvme0m1p1 und die ursprüngliche Root-Partition auf /dev/sda3.

Ich habe das Image der ursprünglichen nvme0n1 gezippt, nvme0n1 gegen eine 1TB M.2 SSD ausgetauscht und das Originalimage auf die neue SSD geklont. Das Ergebnis war, dass ich nach Abschluss des Klonens entweder Windows oder die /dev/sd3-Version von Ubuntu booten konnte.

Ich habe dann eine neue ext4-Partition, nvme0n1p6, erstellt und die Partition /dev/sda3 darauf geklont. Ich habe vergessen, die Partitions-UIDD nach dem Klonen und dem ersten Ausführen von update-grub2 zu ändern. Anschließend habe ich die Partitions-UIDD mit gparted geändert, update-grub2 erneut ausgeführt und überprüft, ob das Image auf der neuen UIDD für /dev/nvme0n1p6 gefunden wurde.

Nachdem ich 6 Stunden damit verbracht hatte, herauszufinden, dass ich in einer UIDD=-Anweisung in /etc/fstab des neuen Images ein Leerzeichen eingefügt hatte, konnte ich dieses neue Image booten (meine Korrekturlesefähigkeiten sind verbesserungswürdig). Nachdem das Image geladen war, führte ich update-grub2 erneut aus, um die Auswahl für das neue Ubuntu nach oben und als Standard in der neuen grub.cfg zu verschieben.

Abschließend zum Problem: Nach dem Neustart wird als Grub-Menü immer noch die grub.cfg des ursprünglichen Ordners /dev/sda3/boot/grub angezeigt.

Durch das Kopieren der für /nvme0n1p6 generierten Datei grub.cfg nach /sda3 kann die neue Datei grub.cfg bei nachfolgenden Starts angezeigt werden.

Das Umbenennen der Datei grub.cfg auf /sda3 führt dazu, dass Grub beim Neustart an der Befehlszeile anhält. Das Verlassen der Befehlszeile führt dazu, dass das Windows-Betriebssystem geladen wird. Ich kann das Problem mit einem Live-USB-Image beheben, mit dem ich eine gültige grub.cfg auf /sda3 wiederherstellen kann.

Ich vermute, dass der Befehl update-grub nicht der einzige Befehl ist, den ich ausführen muss. Ich vermute, dass die auf /nvme0n1p1 gespeicherten Bilder aktualisiert werden müssen. Wird dies durch Ausführen einer Grub-Installation irgendeiner Art erreicht?

Antwort1

Haftungsausschluss: Ich kann mich völlig irren.

Ihren Informationen zufolge haben Sie auf Ihrer Festplatte ( ) eine Windows- und eine Ubuntu-Installation /dev/sda3. Nennen wir diese Festplatteninstallation H. Nun mussten Sie Ihre Installation auf die SSD verschieben und haben daher eine neue SSD-Partition erstellt und Ihre Festplatteninstallation auf diese SSD-Partition geklont (ich würde lieber eine Neuinstallation durchführen, aber das hat nichts mit Ihrer Frage zu tun). Nennen wir diese SSD-Installation S.

Das Problem ist meines Wissens, dass Sie Grub nach Abschluss der Installation von S überhaupt nicht installiert haben. Das in Ihrem System installierte Grub gehört also immer noch zur Installation H [1]. Es würde also immer noch das grub.cfgin Installation H vorhandene verwenden.

Damit Grub das grub.cfgS Ihrer Installation verwendet, müssen Sie Grub von S in der EFI-Partition installieren.

Booten Sie bis zur Installation S und führen Sie aus:

$ sudo grub-install dummy
$ sudo update-grub

Lassen Sie mich wissen, ob ich Ihr Szenario missverstanden habe oder ob bei den Befehlen Fehler auftreten.


Verweise:
Wie findet der Grub EFI Loader die richtige boot.cfg?

Antwort2

Nachdem ich Ubuntu nun von der neuen M.2-SSD aus laufen habe, werde ich die Methode überprüfen, die ich verwendet habe, um eine 128 GB SSD mit einem per Grub installierten Dual-Bootloader auf nvme0n1p1 durch eine 1 TB SSD in einem Laptop mit einem M.2-Anschluss zu ersetzen. Der Übersichtlichkeit halber sei erwähnt, dass der Großteil von Windows 10 auf verschiedenen Partitionen von nvme0 liegt und Ubuntu ursprünglich auf der Festplattenpartition auf sda3 lag. Beim Booten wird nvme0n1p1 unter /boot/efi gemountet.

  1. Erstellen Sie ein Image von nvme0n1 a. Ich persönlich habe keine Schritte unternommen, um Partitionen zu verkleinern und so die Imagegröße zu reduzieren. Falls dies als notwendig erachtet wird, haben andere Personen Anleitungen dazu bereitgestellt.

    b. Schreiben Sie das Image auf ein anderes Laufwerk, entweder intern oder extern. Ich habe Folgendes verwendet:

    dd if=/dev/nmve0n1 | gzip -c > pathToOtherDeviceFolder/nvme0n1.img

    Die -cOption bewirkt, dass gzip in die Standardausgabe schreibt, die dann in die Datei umgeleitet wird.

  2. Testen Sie das Booten von einem USB-Laufwerk mit einem Live-Image, Ubuntu Live oder Gparted Live. Ich hatte später Probleme, weil ich das Live-Image nicht mit den externen Monitoren getestet habe, die ich normalerweise verwende, wenn der Laptop vom Laptop getrennt ist. Ich habe ein paar Tage lang versucht, die nächsten Schritte ohne angeschlossenes externes Display durchzuführen, aber es war das Fehlen des externen Displays (oder Ethernet), das das Booten des Live-USB-Laufwerks verhinderte, und nicht das Ergebnis der nächsten Schritte. Ich kann mich nicht erinnern, Ethernet angeschlossen zu haben, um das Booten erfolgreich zu machen, aber es könnte zusammen mit den externen Displays so gewesen sein. In beiden Fällen besteht eine Abhängigkeit von den Live-Images, die ich nicht verstehe, aber umgehen könnte. Stellen Sie nach dem Booten sicher, dass Sie das Laufwerk mit dem Image, das Sie verschieben möchten, mounten können.

  3. Schalten Sie das Gerät aus und ersetzen Sie die ursprüngliche M.2-SSD durch die neue.

  4. Bild auf neues nvme0n1 verschieben

    a. Booten Sie von einer USB-Live-Disk. (Das haben Sie bereits getestet)

    b. Mounten Sie das Laufwerk, das das Image enthält, das Sie verschieben möchten. (Wieder getestet)

    c. Verschieben Sie das Image auf das neue nvme0n1. Ich habe Folgendes verwendet:

    gunzip -c pathToOtherDeviceFolder/nvme0n1.img | dd of=/dev/nvme0n1

    Auch hier schreibt gunzip in die Standardausgabe, die dann an dd weitergeleitet wird, um auf das neue Gerät zu schreiben.

  5. Verschieben Sie Ubuntu auf eine neue Partition auf dem neuen nvme0n1. Hier habe ich mich für einen Neustart mit dem ursprünglichen Ubuntu-Image auf sda3 entschieden. Das ist kein Problem, da das neue nvme0n1 ein Klon des Originals ist. Ich kenne keinen Grund, warum diese Schritte nicht durchgeführt werden könnten, während noch in der USB-Live-Umgebung gearbeitet wird, obwohl ich damit keine Erfahrung habe.

    a. Erstellen Sie mit gparted oder einem anderen Tool eine neue ext4-Partition auf nvme0n1. Ich werde diese Partition im Folgenden als nvme0n1p6 bezeichnen.

    b. Klonen Sie das Ubuntu-Image von /dev/sda3 (in meinem Fall) auf /dev/nvme0n1p6. Ich habe Folgendes verwendet: dd if=/dev/sda3 of=/dev/nvme0n1p6

    c. Verwenden Sie nach dem Klonen gparted oder ein anderes Tool, um die Partitions-UIDD von nvme0n1p6 in eine eindeutige UIDD zu ändern.

  6. Bereiten Sie nvme0n1p6 neu für den Betrieb vor.

    a. mounten Sie /dev/nvme0n1p6. Ich habe /mnt als Einhängepunkt verwendet.

    b. Ändern Sie /etc/fstab, um die UIDD für nvme0n1p6 als / zu mounten. Beachten Sie, dass nvme0n1p1 immer noch als /boot/efi gemountet werden muss. Stellen Sie sicher, dass der geänderte Eintrag richtig formatiert ist. Ein zusätzliches Leerzeichen danach UIDD=kostete mich mehrere Stunden, in denen ich mich fragte, was ich falsch gemacht hatte.

    c. nvme0n1p6 kann jetzt ausgehängt werden, aber ich glaube, ich habe diesen Schritt ausgelassen.

  7. Wenn die Ausführung noch immer von einer USB-Live-Disk erfolgt, führen Sie einen Neustart mit dem ursprünglichen Ubuntu-Image durch (meins befindet sich auf /dev/sda3).

  8. Aktualisieren Sie die Grub-Menüoptionen:

sudo update-grub2

Achten Sie darauf, dass das Originalimage, das Windows-Image und das neue Ubuntu-Image auf nvme0n1p6 gefunden und hinzugefügt werden.

  1. starten Sie neu und wählen Sie im Grub-Boot-Menü das neue Ubuntu-Image aus.

  2. Führen Sie im neuen Image Folgendes aus:

    a. sudo grub-install Dadurch werden die Grub-Dateien auf /boot/efi (/dev/nvme0n101) so geändert, dass das Grub-Menü grub.cfg auf /dev/nvme0n1p6/boot/grub und nicht auf diesem Speicherort auf sda3 angezeigt wird.

    b. „sudo update-grub“ Ersetzt die geklonte Datei /boot/grub/grub.cfg durch eine neue Datei, die das neue Image oben und als Standard platziert, und mit dem Originalimage auf sda3 als alternative Auswahl.

Sie sollten jetzt in der Lage sein, in eines der drei Images zu booten. Beachten Sie, dass grub-installdas Originalimage nicht vom Computer entfernt werden kann, bis es auf dem neuen Image ausgeführt wird, da Grub seine Menükonfigurationsdatei nicht finden kann.

Ich hoffe, ich habe keine Schritte ausgelassen oder falsch in Erinnerung behalten und dass es für Sie funktioniert.

verwandte Informationen