Es war einmal Legacy GRUB, der Grand Unified Linux Bootloader Version 0.97. Legacy GRUB hatte viele Tugenden, aber es wurde alt und seine Entwickler sehnten sich nach mehr Funktionalität, und so kam GRUB 2 auf die Welt.
GRUB 2 ist ein großes Rewrite mit einigen signifikanten Unterschieden. Es startet Wechselmedien und kann mit einer Option zum Aufrufen Ihres System-BIOS konfiguriert werden. Es ist komplizierter, mit allen Arten von Skripten zu konfigurieren, und anstatt eine schöne, ziemlich einfache /boot/grub/menu.lst
Datei mit allen Konfigurationen an einem Ort zu haben, ist die Standardeinstellung /boot/grub/grub.cfg
. Was Sie nicht direkt bearbeiten, oh nein, denn dies ist nicht für bloße Menschen zum Anfassen, sondern nur für andere Skripte. Wir einfachen Menschen können /etc/default/grub
bearbeiten, was hauptsächlich das Erscheinungsbild des GRUB-Menüs steuert. Wir können die Skripte auch in /etc/grub.d/
bearbeiten. Dies sind die Skripte, die Ihre Betriebssysteme starten, externe Anwendungen wie memtest
und os_prober
steuern und thematisieren./boot/grub/grub.cfg
wird aus /etc/default/grub
und /etc/grub.d/*
erstellt, wenn Sie den Befehl update-grub
ausführen, den Sie jedes Mal ausführen müssen, wenn Sie Änderungen vornehmen.
Die gute Nachricht ist, dass das update-grub
Skript zuverlässig ist, um Kernel und Bootdateien zu finden und alle Betriebssysteme zu Ihrem GRUB-Bootmenü hinzuzufügen, sodass Sie es nicht manuell tun müssen.
Wir werden lernen, wie man zwei der häufigsten Fehler behebt. Wenn Sie Ihr System starten und es an der Eingabeaufforderung grub>
stoppt, ist dies die vollständige GRUB 2-Befehlsshell. Das bedeutet, dass GRUB 2 normal gestartet und das normal.mod
-Modul (und andere Module, die sich in /boot/grub//
) geladen hat, aber es hat Ihre grub.cfg
-Datei nicht gefunden. Wenn Sie grub rescue>
sehen, bedeutet dies, dass normal.mod
nicht gefunden werden konnte, sodass wahrscheinlich keine Ihrer Startdateien gefunden werden konnte.
Wie passiert das? Der Kernel hat möglicherweise die Laufwerkszuweisungen geändert oder Sie haben Ihre Festplatten verschoben, einige Partitionen geändert oder ein neues Betriebssystem installiert und Dinge verschoben. In diesen Szenarien sind Ihre Bootdateien noch vorhanden, aber GRUB kann sie nicht finden. Sie können also an der GRUB-Eingabeaufforderung nach Ihren Startdateien suchen, deren Speicherorte festlegen und dann Ihr System starten und Ihre GRUB-Konfiguration korrigieren.
GRUB 2-Befehlsshell
Die GRUB 2-Befehlsshell ist genauso leistungsfähig wie die Shell in Legacy GRUB. Sie können damit Boot-Images, Kernel und Root-Dateisysteme ermitteln. Tatsächlich erhalten Sie vollständigen Zugriff auf alle Dateisysteme auf dem lokalen Computer, unabhängig von Berechtigungen oder anderen Schutzmaßnahmen. Was manche für eine Sicherheitslücke halten, aber Sie kennen das alte Unix-Diktum: Wer physischen Zugriff auf die Maschine hat, besitzt sie.
Wenn Sie sich an der Eingabeaufforderung grub>
befinden, haben Sie viele Funktionen, die jeder Befehlsshell ähneln, wie z. B. Verlauf und Tabulatorvervollständigung. Der grub rescue>
-Modus ist eingeschränkter, ohne Verlauf und ohne Tabulatorvervollständigung.
Wenn Sie auf einem funktionierenden System üben, drücken Sie C, wenn Ihr GRUB-Startmenü angezeigt wird, um die GRUB-Befehlsshell zu öffnen. Sie können den Start-Countdown stoppen, indem Sie Ihre Menüeinträge mit den Pfeiltasten nach oben und unten scrollen. Es ist sicher, an der GRUB-Befehlszeile zu experimentieren, da nichts, was Sie dort tun, dauerhaft ist. Wenn Sie bereits auf die Eingabeaufforderung grub>
oder grub rescue>
starren, können Sie rocken.
Die nächsten Befehle funktionieren sowohl mit grub>
als auch mit grub rescue>
. Der erste Befehl, den Sie ausführen sollten, ruft den Pager auf, um lange Befehlsausgaben zu paging:
grub> set pager=1
Auf beiden Seiten des Gleichheitszeichens dürfen keine Leerzeichen stehen. Lassen Sie uns nun ein wenig erkunden. Geben Sie ls
ein, um alle Partitionen aufzulisten, die GRUB sieht:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
Was ist das alles msdos stuff
? Das bedeutet, dass dieses System die alte MS-DOS-Partitionstabelle anstelle der glänzenden neuen Globally Unique Identifiers Partition Table (GPT) hat. (Siehe Verwenden der neuen GUID-Partitionstabelle in Linux (Auf Wiedersehen alter MBR). Wenn Sie GPT ausführen, wird (hd0,gpt1)
. Jetzt schnüffeln wir. Verwenden Sie den Befehl ls
, um zu sehen, welche Dateien sich auf Ihrem System befinden:
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
Hurra, wir haben das Root-Dateisystem gefunden. Sie können die Beschriftungen msdos
und gpt
weglassen. Wenn Sie den Schrägstrich weglassen, werden Informationen zur Partition gedruckt. Sie können jede Datei auf dem System mit dem Befehl cat
lesen:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
Lesen /etc/issue
könnte auf einem Multi-Boot-System nützlich sein, um Ihre verschiedenen Linuxe zu identifizieren.
Booten von grub>
So legen Sie die Bootdateien fest und booten das System von der grub>
Eingabeaufforderung. Wir wissen aus dem ls
Befehl, dass es ein Linux-Root-Dateisystem auf (hd0,1)
, und Sie können weiter suchen, bis Sie überprüfen, wo /boot/grub
ist. Führen Sie dann diese Befehle mit Ihrer eigenen Root-Partition, Ihrem Kernel und Ihrem initrd-Image aus:
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
Die erste Zeile legt die Partition fest, auf der sich das Root-Dateisystem befindet. Die zweite Zeile teilt GRUB den Speicherort des Kernels mit, den Sie verwenden möchten. Beginnen Sie mit der Eingabe von /boot/vmli
und verwenden Sie dann die Tabulatorvervollständigung, um den Rest auszufüllen. Geben Sie root=/dev/sdX
ein, um den Speicherort des Root-Dateisystems festzulegen. Ja, das scheint überflüssig zu sein, aber wenn Sie dies weglassen, erhalten Sie eine Kernel-Panik. Woher wissen Sie die richtige Partition? hd0,1 = /dev/sda1. hd1,1 = /dev/sdb1. hd3,2 = /dev/sdd2. Ich denke, Sie können den Rest extrapolieren.
Die dritte Zeile legt die initrd
-Datei fest, die dieselbe Versionsnummer wie der Kernel haben muss.
Die vierte Zeile startet Ihr System.
Auf einigen Linux-Systemen sind die aktuellen Kernel und Initrds in der obersten Ebene des Root-Dateisystems symlinkt:
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
Sie können also von grub>
wie folgt booten:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
Booten Von grub-rescue>
Wenn Sie sich in der GRUB rescue Shell befinden, sind die Befehle unterschiedlich und Sie müssen die normal.mod
undlinux.mod
Module :
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
Die Tab-Vervollständigung sollte funktionieren, nachdem Sie beide Module geladen haben.
Dauerhafte Reparaturen durchführen
Wenn Sie Ihr System erfolgreich gebootet haben, führen Sie diese Befehle aus, um GRUB dauerhaft zu reparieren:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
Wenn Sie grub-install
ausführen, denken Sie daran, dass Sie es im Bootsektor Ihrer Festplatte und nicht auf einer Partition installieren. Verwenden Sie daher keine Partitionsnummer wie /dev/sda1
.
Aber es funktioniert immer noch nicht
Wenn Ihr System so durcheinander ist, dass nichts davon funktioniert, versuchen Sie es mit der Super GRUB2 Live Rescue Disk. Das offizielle GNU GRUB Manual 2.00 sollte ebenfalls hilfreich sein.