Bootloader Grub

Ein Bootloader ist ein Programm, dass nach ladbaren Komponenten zum Start eines Systems sucht. Dies geschieht, bevor das Betriebssystem geladen wird.  Sehr bekannt und beliebt (auch meinerseits) ist der GRUB-Bootloader. Er kann über eine CD gestartet werden oder in den MBR (Master Boot Record) installiert werden. Ich empfehle vor der Installation in den MBR ein Booten von CD zu testen.

GRUB2-Software installieren

Das sys-boot / grub-Paket ist geschlitzt, sodass sowohl grub-0.97 als auch grub-2.xx gleichzeitig installiert werden können. Während beide Versionen von GRUB gleichzeitig installiert werden können, kann jeweils nur eine Version von GRUB als Bootloader des Systems aktiv sein.

Um GRUB2 zu installieren, setzen Sie zunächst die Variable GRUB_PLATFORMS mit einem oder mehreren entsprechenden Werten in der make.conf des Systems. Wenn nicht festgelegt, rät GRUB2, welche Plattform auf dem System verwendet werden soll. Es wird der PC (der MBR-Installationsstil) für x86 / amd64-Architekturen erraten.

/etc/portage/make.conf GRUB_PLATFORMS Beispiele
# Standard PC (BIOS)
GRUB_PLATFORMS="pc"
# UEFI on amd64
GRUB_PLATFORMS="efi-64"
# Both UEFI and PC
GRUB_PLATFORMS="efi-64 pc"

Namenskonvention

Die Gerätesyntax, die in GRUB verwendet wird, unterscheidet sich geringfügig von dem, was Sie zuvor in Ihrem Betriebssystem gesehen haben, und Sie müssen es wissen, damit Sie ein Laufwerk / eine Partition angeben können.

Sehen Sie sich die folgenden Beispiele und Erklärungen an:

(fd0)

GRUB verlangt zunächst, dass der Gerätename mit ( und ) eingeschlossen wird. Der ‚fd‘ Teil bedeutet floppy-disk und somit, dass es eine Diskette ist. Die Zahl ‚0‘ ist die Laufwerksnummer, die von Null aufwärts gezählt wird. Dieser Ausdruck bedeutet, dass GRUB die gesamte Diskette verwendet.

(hd0, msdos2)

Hier bedeutet „hd“ (=harddisk), dass es sich um eine Festplatte handelt. Die neueren Festplatten auf SCSI Basis beginnen mit S also zum Beispiel sda Hier im Bild sind 2 Platten angeschlossen sdb ist die 2. Platte.

Beachten Sie, dass die Partitionsnummern für erweiterte Partitionen unabhängig von der tatsächlichen Anzahl der primären Partitionen auf Ihrer Festplatte von „5“ gezählt werden.

(hd1, msdos1, bsd1)

Dies bedeutet die BSD ‚a‘ Partition auf der ersten PC Slice Nummer der zweiten Festplatte.

Um tatsächlich auf die Festplatten oder Partitionen mit GRUB zuzugreifen, müssen Sie die Gerätespezifikation in einem Befehl wie ’set root = (fd0)‘ oder ‚parttool (hd0, msdos3) hidden-‚ verwenden. Um herauszufinden, welche Zahl eine gewünschte Partition angibt, verfügen die GRUB-Befehlszeilenoptionen über die Argumentvervollständigung. Dies bedeutet, dass Sie beispielsweise nur eingeben müssen

set root = (

gefolgt von einem TAB, und GRUB wird die Liste der Laufwerke, Partitionen oder Dateinamen anzeigen. Daher sollte es ziemlich einfach sein, den Namen Ihrer Zielpartition zu bestimmen, selbst wenn Sie nur wenig über die Syntax wissen.

Beachten Sie, dass GRUB IDE nicht von SCSI unterscheidet – es zählt einfach die Laufwerksnummern unabhängig von ihrem Typ von Null. Normalerweise ist jede IDE-Laufwerksnummer kleiner als eine SCSI-Laufwerksnummer, obwohl dies nicht zutrifft, wenn Sie die Boot-Sequenz durch Austauschen von IDE- und SCSI-Laufwerken in Ihrem BIOS ändern.

Jetzt ist die Frage, wie man eine Datei spezifiziert? Betrachten Sie wieder ein Beispiel:

(hd0, msdos1) / vmlinuz

Dies gibt die Datei mit dem Namen ‚vmlinuz‘ an, die sich auf der ersten Partition des ersten Festplattenlaufwerks befindet. Beachten Sie, dass die Argumentvervollständigung auch mit Dateinamen funktioniert.

 

Automatische Konfiguration

Die Konfiguration von GRUB2 erfolgt traditionell durch das Programm grub-mkconfig um eine Konfigurationsdatei zu erzeugen.

Der Befehl grub-mkconfig erzeugt die Konfigurationsdatei auf  Basis von Vorlagen aus /etc/grub.d. Die Standard-Vorlagen sollten die meisten gewöhnlichen Boot-Setups abdecken.

Das Verhalten dieser Vorlagen kann durch festlegen von Variablen in /etc/default/grub gesteuert werden. Siehe GRUB Manual (englisch) für weitere Informationen.

Kernel Namensschema

Der Befehl grub2-mkconfig kann nur Linuxkernel automatisch erkennen, wenn deren Namen mit vmlinuz- oder kernel- beginnen.

Zum Beispiel:

CODE Kernel Namensbeispiele, die GRUB2 erkennen kann
 /boot/vmlinuz-3.4.3
 /boot/kernel-2.6.39-gentoo
 /boot/kernel-genkernel-x86_64-3.17.1-gentoo-r1

Die Verwendung ist grundsätzlich sehr einfach. Sie müssen nur ein Argument für das Programm angeben, nämlich wo der Bootloader installiert werden soll. Das Argument muss eine Gerätedatei sein (wie ‚/ dev / hda‘). Zum Beispiel wird  GRUB in den MBR des ersten IDE-Laufwerks so installiert:

# grub-install  /dev/sda

Wenn Sie möchten, dass GRUB Images in ein anderes Verzeichnis als / boot kopiert, müssen Sie die Option –boot-directory angeben. Die typische Verwendung besteht darin, dass Sie eine GRUB-Bootdiskette mit einem Dateisystem erstellen. Hier ist ein Beispiel:

# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# mkdir /mnt /boot
# grub-install --boot-directory = /mnt/boot /dev/fd0
# umount /mnt

Beachten Sie, dass grub-install eigentlich nur ein Shell-Skript ist und die eigentliche Aufgabe von anderen Tools wie grub-mkimage erledigt wird. Daher können Sie diese Befehle direkt ausführen, um GRUB zu installieren, ohne grub-install zu verwenden. Tun Sie das jedoch nicht, es sei denn, Sie sind mit den Interna von GRUB sehr vertraut. Die Installation eines Bootloaders auf einem laufenden Betriebssystem kann äußerst gefährlich sein.

 

Starten mit Hilfe der Kommandozeile

GRUB 2 bietet die Kommandozeile dem Benutzer alle für den Systemstart wichtigen Befehle. Die Befehle, die man in der Kommandozeile einzeln, nacheinander eingeben muss sind die selben, wie sie auch in der Konfigurationsdatei verwendet werden. Nach dem Booten der SuperGrub – CD finden Sie in der Auswahl die Option: Boot manually. Damit kann die Kommandozeile von Grub aufgerufen werden.

Da die Eingaben in der Kommandozeile aber nicht dauerhaft gelten, sondern nur einmalig für den entsprechenden Systemstart(versuch), kann man sich auf die nötigsten Angaben beschränken. Anders als bei einer Konfigurationsdatei die einmalig erstellt wird, müssen die Befehle nicht so gestaltet werden, dass sie spätere Veränderungen am System von vornherein berücksichtigen.

Der Systemstart aus der Kommandozeile erfolgt nach foglendem Schema:

  • Zunächst muss GRUB mitgeteilt werden, auf welchen Datenträger sich die Startdateien des zu startenden Betriebssystems befinden. Diese Angabe wird der Variablen root zugewiesen.
  • Danach gibt man den genauen Pfad zu den Startdateien des Betriebssystems an. Sofern GRUB diese nicht direkt laden kann – wie es z.B. für Windows der Fall ist – fordert man GRUB einfach auf, den ersten Sektor des zuvor festgelegten Startdatenträgers zu laden. Dieser Sektor enthält dann das Boot-Programm, des fremden Betriebssystems.
  • Abschließend weißt man GRUB durch den Befehl boot an, das System mit den zuvor festgelegten Angaben zu starten.

Tipp: In Grub funktioniert auch „Tab“ zur Dateinamenexpansion, d.h. man kann sich bis zu der richtigen Datei „durchhangeln“, ohne den exakten Namen zu wissen.

In der Grub Kommandozentrale ist die englische Tastatur aktiv. Hier gibt es eine Übersicht der Unterschiede:

Beispiel: Linux über die GRUB Konsole starten

(bitte beachten: das Beispiel ist für den genkernel)
Es müssen der Reihe nach die folgenden Befehle eingegeben werden Die Variablen sind die Platte (hd) und Partition. Diese müssen dem eigenen System entsprechend ersetzt werden.

  1. Start-Datenträger festlegen:
    set root=(hd0,1)
  2. Falls der Home-Ordner auf eine eigene Partition ausgelagert ist muss dieser eingebunden werden:
    set home=(hd0,1)
  3. Pfad zu den Startdateien angeben:
    linux /boot/kernel/genkernel-xx  root=/dev/sdXY

    sdXY und die genkernel-Datei muss dabei natürlich auch auf das eigene System angepasst werden.

  4. Pfad zur Ramdisk:
    initrd /boot/initramfs
  5. System starten:
    boot

 

Beispiel: Windows starten

Um ein MS-Windows zu booten muss zusätzlich das Packet sys-fs/ntfs3g installiert sein. Die folgenden Kommandos müssen der Reihe nach eingegeben werden:

Startdatenträger festlegen (sdX,Y muss dem eigenen System entsprechend ersetzt werden.):

set root=(sdX,Y)

Den ersten Sektor des Startdatenträgers laden lassen:

chainloader +1

System starten:

boot 
  •  

Das Programm grub-mkconfig  erzeugt  grub.cfg Dateien, die für die meisten Fälle geeignet sind. Es eignet sich für die Verwendung beim Aktualisieren einer Distribution und ermittelt verfügbare Kernel und versucht, Menüeinträge für sie zu generieren.

grub-mkconfig -o /boot/grub/grub.cfg

grub-mkconfig hat einige Einschränkungen. Das Hinzufügen zusätzlicher benutzerdefinierter Menüeinträge am Ende der Liste kann durch Bearbeiten von /etc/grub.d/40_custom oder Erstellen von /boot/grub/custom.cfg erfolgen. Für das Ändern der Reihenfolge der Menüeinträge oder das Ändern ihrer Titel ist möglicherweise ein komplexer Vorgang erforderlich Änderungen an Shell-Skripten, die in /etc/grub.d/ gespeichert sind.

Ein Beispiel:

sdb1 /boot/grub # grub-mkconfig -o /boot/grub/grub,cfg
GRUB-Konfigurationsdatei wird erstellt …
Linux-Abbild gefunden: /boot/kernel-genkernel-x86_64-4.14.61-gentoo
initrd-Abbild gefunden: /boot/initramfs-genkernel-x86_64-4.14.61-gentoo
Linux-Abbild gefunden: /boot/kernel-genkernel-x86_64-4.14.8-gentoo-r1
initrd-Abbild gefunden: /boot/initramfs-genkernel-x86_64-4.14.8-gentoo-r1
Linux-Abbild gefunden: /boot/kernel-genkernel-x86_64-4.12.12-gentoo
initrd-Abbild gefunden: /boot/initramfs-genkernel-x86_64-4.12.12-gentoo
Linux-Abbild gefunden: /boot/kernel-genkernel-x86_64-4.9.95-gentoo
initrd-Abbild gefunden: /boot/initramfs-genkernel-x86_64-4.9.95-gentoo
Linux-Abbild gefunden: /boot/kernel-genkernel-x86_64-4.9.76-gentoo-r1
initrd-Abbild gefunden: /boot/initramfs-genkernel-x86_64-4.9.76-gentoo-r1
Linux-Abbild gefunden: /boot/kernel-genkernel-x86_64-4.9.72-gentoo
initrd-Abbild gefunden: /boot/initramfs-genkernel-x86_64-4.9.72-gentoo
/run/lvm/lvmetad.socket: connect failed: Datei oder Verzeichnis nicht gefunden
WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
Gentoo/Linux auf /dev/sdb2 gefunden
Gentoo/Linux auf /dev/sdb6 gefunden
erledigt

Über den OS-Prober kann geschaut werden, welche Betriebssysteme erkannt werden. Dieses Paket muss nachinstalliert werden. Es ist standardmaäßig nicht installiert

 

 

SuperGrub bietet die Möglichkeit über eine CD verfügbare Systeme / Kernel zu suchen und ggf. zu booten. Mit Hilfe des SuperGrub kann somit eine Fehleranalyse im Boot-Bereich durchgeführt werden.

  1. Werden die Platte(n) angezeigt?
  2. Wird das System angezeigt?
  3. Wird der Kernel angezeigt?
  4. Ist ein Booten erfolgreich?

Zum Download: http://www.supergrubdisk.org

grub2-install –target=x86_64-efi

Anzeige der Betriebssysteme mit SuperGrub
Grub mit verschiedenen installierten Systemen

Super-Grub mit verschiedenen installierten Systemen


 Dies kann in Zukunft verbessert werden. In der Zwischenzeit wird denjenigen, die glauben, dass es einfacher wäre, grub.cfg direkt zu schreiben, dies getan (siehe Booting und Shell-like-Scripting) und die Deaktivierung aller von ihrer Distribution bereitgestellten Systeme für die automatische Ausführung von grub-mkconfig zu deaktivieren.

Die Datei / etc / default / grub steuert den Betrieb von grub-mkconfig. Es wird von einem Shell-Skript bereitgestellt und muss daher eine gültige POSIX-Shell-Eingabe sein. Normalerweise handelt es sich nur um eine Folge von „KEY = value“ -Zeilen. Wenn der Wert Leerzeichen oder andere Sonderzeichen enthält, muss er in Anführungszeichen gesetzt werden. Zum Beispiel:

GRUB_TERMINAL_INPUT = „Konsolenserie“

Gültige Schlüssel in / etc / default / grub lauten wie folgt:

„GRUB_DEFAULT“

    Der Standardmenüeintrag. Hierbei kann es sich um eine Zahl handeln. In diesem Fall wird der N-te Eintrag im generierten Menü (von Null gezählt) oder der Titel eines Menüeintrags oder die spezielle Zeichenfolge „gespeichert“ identifiziert. Die Verwendung der ID kann nützlich sein, wenn Sie einen Menüeintrag als Standard festlegen möchten, obwohl eine variable Anzahl von Einträgen davor vorhanden ist.

    Zum Beispiel, wenn Sie:

    menuentry ‚Example GNU / Linux-Distribution‘ –class gnu-linux –id example-gnu-linux {
    …
    }

    dann können Sie dies als Standard festlegen:

    GRUB_DEFAULT = beispiel-gnu-linux

    Bisher wurde die Verwendung des Titelnamens dokumentiert. Obwohl dies immer noch funktioniert, wird dies nicht empfohlen, da Titel häufig instabile Gerätenamen enthalten und möglicherweise übersetzt werden

    Wenn Sie diese Option auf „gespeichert“ setzen, wird der Standardmenüeintrag durch GRUB_SAVEDEFAULT oder Grub-Set-Standard gespeichert. Dies hängt vom Umgebungsblock ab, der möglicherweise nicht in allen Situationen verfügbar ist (siehe Umgebungsblock).

    Der Standardwert ist „0“.
„GRUB_SAVEDEFAULT“

    Wenn diese Option auf ‚true‘ gesetzt ist, speichern Sie den Eintrag bei Auswahl eines Eintrags als neuen Standardeintrag zur Verwendung durch zukünftige GRUB-Läufe. Dies ist nur nützlich, wenn ‚GRUB_DEFAULT = gespeichert‘; Dies ist eine separate Option, da GRUB_DEFAULT = gespeichert ohne diese Option in Verbindung mit Grub-Set-Default nützlich ist. Standardmäßig nicht gesetzt Diese Option basiert auf dem Umgebungsblock, der möglicherweise nicht in allen Situationen verfügbar ist (siehe Umgebungsblock).
„GRUB_TIMEOUT“

    Starten Sie den Standardeintrag viele Sekunden nach Anzeige des Menüs, sofern keine Taste gedrückt wird. Der Standardwert ist „5“. Stellen Sie „0“ ein, um sofort zu starten, ohne das Menü anzuzeigen, oder auf „-1“, um unbegrenzt zu warten.

    Wenn „GRUB_TIMEOUT_STYLE“ auf „Countdown“ oder „Ausgeblendet“ eingestellt ist, wird stattdessen das Timeout gezählt, bevor das Menü angezeigt wird.
„GRUB_TIMEOUT_STYLE“

    Wenn diese Option nicht festgelegt oder auf „Menü“ eingestellt ist, zeigt GRUB das Menü an und wartet, bis das durch „GRUB_TIMEOUT“ festgelegte Zeitlimit abgelaufen ist, bevor der Standardeintrag gestartet wird. Durch Drücken einer Taste wird der Timeout unterbrochen.

    Wenn diese Option auf „Countdown“ oder „Ausgeblendet“ eingestellt ist, wartet GRUB vor dem Anzeigen des Menüs, bis das mit „GRUB_TIMEOUT“ festgelegte Zeitlimit abgelaufen ist. Wenn Sie während dieser Zeit die ESC-Taste drücken, wird das Menü angezeigt und Sie warten auf die Eingabe. Wenn ein Hotkey gedrückt wird, der mit einem Menüeintrag verknüpft ist, wird der zugehörige Menüeintrag sofort gestartet. Wenn das Zeitlimit abläuft, bevor einer dieser Fälle eintritt, wird der Standardeintrag gestartet. Im „Countdown“ -Fall wird eine einzeilige Anzeige der verbleibenden Zeit angezeigt.
„GRUB_DEFAULT_BUTTON“
„GRUB_TIMEOUT_BUTTON“
„GRUB_TIMEOUT_STYLE_BUTTON“
„GRUB_BUTTON_CMOS_ADDRESS“

    Varianten der entsprechenden Variablen ohne das Suffix ‚_BUTTON‘ zur Unterstützung herstellerspezifischer Ein- / Ausschaltknöpfe. Siehe Hersteller-Einschalttasten.
„GRUB_DISTRIBUTOR“

    Wird von den Händlern von GRUB auf ihren identifizierenden Namen festgelegt. Dies wird verwendet, um informativere Menüeintragstitel zu erzeugen.
„GRUB_TERMINAL_INPUT“

    Wählen Sie das Terminal-Eingabegerät. Sie können hier mehrere durch Leerzeichen getrennte Geräte auswählen.

    Gültige Namen von Terminal-Eingängen hängen von der Plattform ab, können jedoch „Konsole“ (native Plattformkonsole), „seriell“ (serielles Terminal), „serial_ <Port>“ (serielles Terminal mit expliziter Portauswahl), „at_keyboard“ (PC AT keyboard) oder ‚usb_keyboard‘ (USB-Tastatur, die das HID-Bootprotokoll verwendet, für Fälle, in denen die Firmware dies nicht ausführt).

    Standardmäßig wird die native Terminaleingabe der Plattform verwendet.
„GRUB_TERMINAL_OUTPUT“

    Wählen Sie das Terminalausgabegerät. Sie können hier mehrere durch Leerzeichen getrennte Geräte auswählen.

    Gültige Namen für die Terminalausgabe hängen von der Plattform ab, können jedoch „Konsole“ (native Plattformkonsole), „seriell“ (serielles Terminal), „seriell“

Es kommt sicher ein Hinweis darauf dass die Einstellung für Grub geändert werden muss. Grub muss mit der Option mount neu kompiliert werden. Über etc-update wird die Datei aktualisiert. Um die Änderung zu speichern wird erst die Datei mit 1 ausgewählt und dann die Änderung (replace) mit y bestätigt.

* IMPORTANT: config file '/etc/portage/package.use/zz-autounmask' needs updating.
* See the CONFIGURATION FILES and CONFIGURATION FILES UPDATE TOOLS
* sections of the emerge man page to learn how to update config files.
localhost /home/michi # etc-update
Scanning Configuration files...
The following is the list of files which need updating, each
configuration file is followed by a list of possible replacement files.
1) /etc/portage/package.use/zz-autounmask (1)
Please select a file to edit by entering the corresponding number.
(don't use -3, -5, -7 or -9 if you're unsure what to do)
(-1 to exit) (-3 to auto merge all files)
(-5 to auto-merge AND not use 'mv -i')
(-7 to discard all updates)
(-9 to discard all updates AND not use 'rm -i'): 1

File: /etc/portage/package.use/._cfg0000_zz-autounmask
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again
5) Save update as example config
Please select from the menu above (-1 to ignore this update): 1
Replacing /etc/portage/package.use/zz-autounmask with /etc/portage/package.use/._cfg0000_zz-autounmask
mv: overwrite '/etc/portage/package.use/zz-autounmask'? y
Exiting: Nothing left to do; exiting. :)