Ich habe einen Computer, der Ubuntu (derzeit 16.04) und Windows 7 dual bootete, mit Ubuntus GRUB als Bootloader.
Jetzt habe ich Arch Linux als drittes Betriebssystem hinzugefügt und dabei die offiziellen Installationsanweisungen befolgt. Ich habe GRUB nicht von Arch installiert, weil ich das von Ubuntu kontrollierte verwenden wollte. Die Anweisungen enthielten einen Befehl mkinitcpio -p linux
, der wahrscheinlich einige Boot-Dateien generierte, die ich wie beschrieben ausgeführt habe.
Wenn ich jetzt versuche, Ubuntu über den Standardeintrag von GRUB zu booten, wird folgende unangenehme Fehlermeldung angezeigt (Entschuldigung für das Bildschirmfoto):
Wie die Ausgabe von uname -a
zeigt, wird versucht, den Arch-Kernel zu starten, es handelt sich jedoch /dev/sda6
um die Ubuntu-Root-Partition.
Ich muss zu Advanced options for Ubuntu
einem der Ubuntu, with Linux 4.4.0-*
Einträge navigieren und diesen auswählen , um Ubuntu laden zu können. Ich konnte jedoch keinen Eintrag finden, der Arch korrekt laden würde.
Das Ausführen sudo update-grub
unter Ubuntu ( " update-grub
ist ein Stub zum Ausführen grub-mkconfig -o /boot/grub/grub.cfg
zum Generieren einer grub2-Konfigurationsdatei." ) Ändert nichts. Das grub-customizer
Tool war auch bisher unbrauchbar, um dies zu beheben.
Was verursacht diese Verwirrung von GRUB und wie behebe ich sie, damit jede Linux-Version mit dem richtigen Kernel und von der richtigen Partition startet?
Es sieht so aus, als hätte ich Arch dumm mit Ubuntus / boot installiert, also hat es wahrscheinlich seine Boot-Dateien dort abgelegt.
Ich kann alle Arch-bezogenen Dinge löschen, um Ubuntus Bootloader wieder in Ordnung zu bringen und Arch später neu zu installieren.
Updates (danke an @terdon für seine Unterstützung im Ask Ubuntu-Chat):
Hier ist meine /boot/grub/grub.cfg
.
Alle Linux-Einträge scheinen auf meine / dev / sda6-Partition zu verweisen, die Ubuntus Root ist:
$ grep ' linux /' /boot/grub/grub.cfg
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
Ich habe versucht, die GRUB-Konfiguration von Ubuntu zu aktualisieren:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done
Ich habe versucht, GRUB von Ubuntu auf dem MBR neu zu installieren:
$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
Das sind übrigens die installierten Ubuntu-Kernel-Pakete, ich habe dpkg-reconfigure
alle ausprobiert , aber ohne Auswirkungen auf das Problem:
$ dpkg -l linux-image* | grep ^ii
ii linux-image-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii linux-image-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
Ich habe auch versucht, die Ubuntu-Initramfs neu zu generieren:
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic
Mein Partitionslayout:
Vom Ubuntu-System überprüft. Die Etiketten sollten sich erklären.
$ lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs win7-boot 90DCF3A5DCF3842E /win/boot
├─sda2 ntfs windows7 482C7A572C7A3FCC /win/c
├─sda3 ext4 grub-boot 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5 ext4 images 81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6 ext4 ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7 ext4 ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8 ext4 arch-root 8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec
├─sda9 ext4 arch-home 32522902-a53d-44c8-90f2-6bbf14c40f1f
└─sda10 swap linux-swap 8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]
Meine GRUB-Menüstruktur:
Erweiterte Optionen für Ubuntu:
Mein /boot
Verzeichnis:
$ ls -la /boot
total 118480
drwxr-xr-x 4 root root 4096 Apr 24 20:50 .
drwxr-xr-x 28 root root 4096 Apr 24 19:44 ..
-rw-r--r-- 1 root root 1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r-- 1 root root 1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r-- 1 root root 184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r-- 1 root root 189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x 6 root root 4096 Apr 26 19:58 grub
-rw-r--r-- 1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r-- 1 root root 3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r-- 1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r-- 1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------ 2 root root 16384 Okt 28 17:43 lost+found
-rw-r--r-- 1 root root 182704 Jan 28 13:44 memtest86+.bin
-rw-r--r-- 1 root root 184380 Jan 28 13:44 memtest86+.elf
-rw-r--r-- 1 root root 184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw------- 1 root root 3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw------- 1 root root 3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw------- 1 root root 6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw------- 1 root root 7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r-- 1 root root 4435552 Apr 14 19:20 vmlinuz-linux
Die Kernel 4.4.0 und 4.2.0 sollten Ubuntu sein, Arch sollte einen Kernel 4.5.0 haben. Aber wie finde ich heraus, welche Datei ohne Kernel-Version in ihrem Namen zu was gehört?
Mein Ubuntu-Stammverzeichnis (Verzeichnisse ausgeschlossen):
$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx 1 root root 32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx 1 root root 32 Apr 5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx 1 root root 29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx 1 root root 29 Apr 5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic
Mein Arch-Stammverzeichnis enthält keine Dateien oder Links.
os-prober
. dann laufen diesesudo mkinitcpio -p linux
dannsudo grub-mkconfig -o /boot/grub/grub.cfg
zuletztsudo grub-install /dev/sda
Root device mounted successfully, but /sbin/init does not exists
. Hast du das untersucht? Fehltinit
wirklich? Wenn ja, sollten Sie es auf jeden Fall installieren, wenn es stattdessen vorhanden ist, eine Idee, warum es nicht gefunden werden kann?Antworten:
Ich habe es endlich gelöst, indem ich die Arch-Partition und ihre Boot-Dateien im
/boot
Orbit meines Ubuntu aus dem Orbit entfernt habe. Ubuntu ist jetzt wieder in Ordnung, alle verbleibenden GRUB-Einträge funktionieren wieder.Hier ist eine Liste von dem, was ich getan habe:
Löschen Sie die
initramfs
Dateien von Arch :Löschen Sie die
vmlinuz
Datei von Arch :Formatieren Sie die Arch-Partition (
/dev/sda8
) mit GPartedAktualisieren Sie die Konfiguration von GRUB:
Neustart und viel Spaß!
quelle
initramfs-linux
nicht enthalten...ranfs...
Befestigung von grub.cfg von Hand (nicht empfohlen)
Schau dir deine an
grub.cfg
Der Ubuntu-Eintrag ist fehlerhaft (und einige der folgenden auch)
Die letzten beiden Zeilen sind Ihr von grub ausgegebener Befehl zum Laden von Kernel und initrd und suchen derzeit nach dem ARCH-Kernel und initiramfs. Außerdem werden sie unter der angegebenen
/
In-Partition gesucht, durchuuid=eee18451-b607-4875-8a88-c9cb6c6544c8
die die beabsichtigten Ubuntu-Dateien gehostet werden können oder nicht.Sie können dies beheben, indem Sie:
um die UUID Ihrer Ubuntu-Root-Partition zu erhalten.
Ersetzen Sie dann die letzten beiden Zeilen durch den Simlink zu Ihren neuesten Kernel- und Initrd-Images (da Ubuntu dies so erwartet).
Wenn dies nicht sofort behoben wird, ist möglicherweise eine andere Korrektur erforderlich. Sie können sie herausfinden, indem Sie einen der getesteten und funktionierenden Einträge "kopieren", und ich würde empfehlen, dass Sie den Vanille-Eintrag verwenden (z. B. kein Upstart oder andere Kernel-Parameter wie das übergebene Nomodeset).
Dies sollte ein guter Kandidat sein:
Der Arch-Eintrag ist ähnlich fehlerhaft, da er wahrscheinlich nach Arch-Initramfs und -Kern unter der Ubuntu-Root-Partition sucht. Der Standardspeicherort für diese ist unter / boot. Passen Sie die letzten beiden Zeilen des Arch-Eintrags an, indem Sie die Position korrigieren und überprüfen, ob die UUID der Root-Partition diejenige ist, die den Arch-Root enthält.
Ein (mehrere) Wort (e) der Warnung:
Es wird Ubuntu-Benutzern im Allgemeinen NICHT empfohlen, sich
grub.cfg
von Hand damit zu beschäftigen. Machen Sie auf jeden Fall eine Kopie davon und seien Sie vorsichtig bei der Bearbeitung. Seien Sie darauf vorbereitet, dass Ihr System nicht mehr bootfähig ist (Sie können es jedoch mithilfe des in meiner alten Antwort beschriebenen Startvorgangs wiederbeleben).Auch wenn dies Ihr Problem dieses Mal beheben könnte, könnte es zurückkommen, um Sie zu beißen, wenn Sie das nächste Mal Ihr Grub-Menü neu füllen müssen. Aus irgendeinem Grund wird die Betriebssystemprüfung von Grub unter Ubuntu durch das Vorhandensein des Arch-Kernels unter / boot verwirrt. Ich würde vermuten, dass ein Dienstprogramm wie Boot-Repair in der Lage sein sollte, alle Ihre Distributionen korrekt bootfähig zu machen, aber wenn ich mich richtig erinnere, hat es bei Ihnen nicht funktioniert.
Eine dauerhafte Lösung könnte darin bestehen, den Arch-Kernel und die Images in einem anderen Verzeichnis als dem Standardverzeichnis / boot zu installieren. Dies ist fummelig und Sie sollten den Grub-Eintrag von Arch Wiki konsultieren, um zu erfahren, wie Sie es richtig machen.
ALTE ANTWORT (empfohlen, wenn Sie langfristig zu Arch wechseln möchten ) Hier ist, was ich tun würde und irgendwie vor ein paar Monaten getan habe.
Gehen Sie zur Arch Wiki Grub-Seite und lesen Sie den entsprechenden Abschnitt für Ihre Partitionstabelle vor (Sie sind wahrscheinlich UEFI, lesen Sie also mehr über ESP und so weiter).
Manuelles Booten in Arch
Dies ist eine sehr prägende Erfahrung, die ich empfehlen kann. Angenommen, Ihr Arch Linux-Kernel befindet sich irgendwo auf Ihrer Festplatte, drücken Sie
c
an der Eingabeaufforderung grub und geben Sie ls ein, um eine Liste der Geräte und Partitionen anzuzeigen, die aussehen(hd0,msdos1),(hd1,gpt1),...
. Sie können jedem von ihnen den Inhalt anzeigen.Sie müssen drei Dinge herausfinden:
/
Root-Partition?vmlinuz
intiramfs-linux.img
Sobald Sie diese drei besitzen, führen Sie drei Befehle in grub> prompt etwas Ähnliches aus.
Beachten Sie, dass Maden finden können, z
(Der eine Grub kann nicht automatisch finden und gibt dir eine Kernel-Panik;))
All dies habe ich gelernt, hier , eine Quelle , die sehr empfehlen ich. Wenn Sie es schaffen, fahren Sie mit der Reparatur fort! Andernfalls...
Boot Arch von einem Live-Schlüssel! Holen Sie sich eine Live-Arch-Umgebung und folgen Sie dem Installations-Wiki
chroot
auf Arch auf die gleiche Weise wie beim ersten Mal.Befestigungsmaden
Von innen Arch, installieren Sie die entsprechenden Madenpakete, insbesondere
os-prober
zu ermöglichen ,grub-install
Ihr anderes System zu erkennen. Befolgen Sie die dortige Installationsanleitung sorgfältig und Sie sollten (zumindest) in der Lage sein, sowohl arch als auch ubuntu über das grub-Menü zu booten. Das Installieren von Befehlen sieht am Ende so aus.** Warnung ** Führen Sie diesen Befehl nicht aus, er ist beispielhaft. Sie müssen die für Ihr System geeigneten herausfinden
** Wenn alle Stricke reißen **
Leider ist dies angesichts der begrenzten Anzahl an Informationen so spezifisch wie es nur geht und SE ist nicht wirklich ein Forum für solche Probleme, daher meine "generische" Antwort, die sich auf nützliche Ressourcen bezieht.
Wenn Sie es nicht herausfinden können, schauen Sie vielleicht in den Arch-Foren vorbei. Wenn Sie Ihr Bestes gegeben und die Dokumente vorher gelesen haben, finden Sie möglicherweise Hilfe.
All dies durch Arch zu tun, war für mich eine grundlegende Lernerfahrung.
quelle
Meine Lösung ist einfacher. Ich benutze das Terminal und mache folgendes:
Wenn Sie weitere Probleme haben, verwenden Sie einfach
boot-repair
einen kostenlosen Download, der klein genug ist, um auf eine CD zu brennen.quelle
update-grub
. Es ist sehr unwahrscheinlich, dass eine Boot-Reparatur bei diesem speziellen Problem hilft.sudo grub-mkconfig -o /boot/grub/grub.cfg
genau dort ist.update-grub
ist ein sehr einfaches Shell-Skript, das ausgeführt wirdgrub-mkconfig -o /boot/grub/grub.cfg
. Sie können dies mit sehencat /usr/sbin/update-grub
.