Linux Professional Institute Learning Logo.
Weiter zum Inhalt
  • Home
    • Alle Ressourcen
    • LPI Lernmaterialien
    • Mitmachen
    • Publishing Partner
    • Publishing Partner werden
    • Über uns
    • FAQ
    • Mitwirkende
    • Roadmap
    • Kontakt
  • LPI.org
102.2 Lektion 1
Thema 101: Systemarchitektur
101.1 Hardwareeinstellungen ermitteln und konfigurieren
  • 101.1 Lektion 1
101.2 Das System starten
  • 101.2 Lektion 1
101.3 Runlevel wechseln und das System anhalten oder neu starten
  • 101.3 Lektion 1
Thema 102: Linux-Installation und -Paketverwaltung
102.1 Festplattenaufteilung planen
  • 102.1 Lektion 1
102.2 Einen Bootmanager installieren
  • 102.2 Lektion 1
102.3 Shared Libraries verwalten
  • 102.3 Lektion 1
102.4 Debian-Paketverwaltung verwenden
  • 102.4 Lektion 1
102.5 RPM und YUM-Paketverwaltung verwenden
  • 102.5 Lektion 1
102.6 Linux als Virtualisierungs-Gast
  • 102.6 Lektion 1
Thema 103: GNU- und Unix-Befehle
103.1 Auf der Befehlszeile arbeiten
  • 103.1 Lektion 1
  • 103.1 Lektion 2
103.2 Textströme mit Filtern verarbeiten
  • 103.2 Lektion 1
103.3 Grundlegende Dateiverwaltung
  • 103.3 Lektion 1
  • 103.3 Lektion 2
103.4 Ströme, Pipes und Umleitungen verwenden
  • 103.4 Lektion 1
  • 103.4 Lektion 2
103.5 Prozesse erzeugen, überwachen und beenden
  • 103.5 Lektion 1
  • 103.5 Lektion 2
103.6 Prozess-Ausführungsprioritäten ändern
  • 103.6 Lektion 1
103.7 Textdateien mit regulären Ausdrücken durchsuchen
  • 103.7 Lektion 1
  • 103.7 Lektion 2
103.8 Grundlegendes Editieren von Dateien
  • 103.8 Lektion 1
Thema 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
104.1 Partitionen und Dateisysteme anlegen
  • 104.1 Lektion 1
104.2 Die Integrität von Dateisystemen sichern
  • 104.2 Lektion 1
104.3 Das Mounten und Unmounten von Dateisystemen steuern
  • 104.3 Lektion 1
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
  • 104.5 Lektion 1
104.6 Symbolische und Hardlinks anlegen und ändern
  • 104.6 Lektion 1
104.7 Systemdateien finden und Dateien am richtigen Ort plazieren
  • 104.7 Lektion 1
How to get certified
  1. Thema 102: Linux-Installation und -Paketverwaltung
  2. 102.2 Einen Bootmanager installieren
  3. 102.2 Lektion 1

102.2 Lektion 1

Zertifikat:

LPIC-1

Version:

5.0

Thema:

102 Linux-Installation und -Paketverwaltung

Lernziel:

102.2 Einen Bootmanager installieren

Lektion:

1 von 1

Einführung

Der Bootloader wird als erste Software ausgeführt, wenn ein Computer eingeschaltet wird. Dies ist ein Stück Code, dessen einziger Zweck darin besteht, den Betriebssystemkernel zu laden und ihm die Kontrolle zu übergeben. Der Kernel lädt die notwendigen Treiber, initialisiert die Hardware und lädt dann den Rest des Betriebssystems.

GRUB ist der Bootloader, der auf den meisten Linux-Distributionen verwendet wird. Er kann den Linux-Kernel oder andere Betriebssysteme, wie z.B. Windows, laden und kann mehrere Kernelimages und Parameter als separate Menüeinträge behandeln. Die Auswahl des Kernels beim Booten erfolgt über eine tastaturgesteuerte Schnittstelle. Mithilfe dieser Kommandozeilenschnittstelle können Bootoptionen und Parametern bearbeitung werden.

Die meisten Linux-Distributionen installieren und konfigurieren GRUB (eigentlich GRUB 2) automatisch, so dass ein normaler Benutzer darüber nicht nachdenken muss. Als Systemadministrator ist es jedoch wichtig zu wissen, wie man den Bootprozess kontrolliert, so dass Sie das System zum Beispiel nach einem Bootfehler wegen eines fehlgeschlagenen Kernelupgrades wiederherstellen können.

In dieser Lektion erfahren Sie, wie Sie GRUB installieren, konfigurieren und mit GRUB interagieren.

GRUB Legacy vs. GRUB 2

Die ursprüngliche Version von GRUB (Grand Unified Bootloader), jetzt als GRUB Legacy bekannt, wurde 1995 im Rahmen des GNU Hurd-Projekts entwickelt und später als Standard-Bootloader vieler Linux-Distributionen übernommen und ersetzte frühere Alternativen wie LILO.

GRUB 2 ist eine komplette Neufassung von GRUB mit dem Ziel, sauberer, sicherer, robuster und leistungsfähiger zu werden. Zu den vielen Vorteilen gegenüber GRUB Legacy gehören eine viel flexiblere Konfigurationsdatei (mit viel mehr Befehlen und bedingten Anweisungen, ähnlich einer Skriptsprache), ein modularerer Aufbau und eine bessere Lokalisierung/Internationalisierung.

Es gibt auch Unterstützung für Themes und grafische Bootmenüs mit Splashscreens, die Möglichkeit, LiveCD ISOs direkt von der Festplatte zu booten, bessere Unterstützung für nicht-x86-Architekturen, universelle Unterstützung für UUIDs (zur leichteren Identifizierung von Festplatten und Partitionen) und vieles mehr.

GRUB Legacy befindet sich nicht mehr in aktiver Entwicklung (die letzte Version war 0.97 im Jahr 2005). Heute installieren die meisten großen Linux-Distributionen GRUB 2 als Standard-Bootloader. Sie können jedoch immer noch Systeme finden, die GRUB Legacy verwenden, daher ist es wichtig zu wissen, wie dieser zu verwenden ist und wo die Unterschiede zwischen GRUB Legacy und GRUB 2 liegen.

Wo ist der Bootloader?

In der Vergangenheit wurden Festplatten auf IBM PC-kompatiblen Systemen nach dem MBR-Partitionierungsschema partitioniert, das 1982 für IBM PC-DOS (MS-DOS) 2.0 erstellt wurde.

In diesem Schema wird der erste 512-Byte-Sektor der Festplatte als Master Boot Record bezeichnet. Dieser enthält eine Tabelle, welche die Partitionen auf der Festplatte beschreibt (die Partitionstabelle) sowie den Bootstrapcode, der als Bootloader bezeichnet wird.

Beim Einschalten des Computers wird der Bootloader geladen und ausgeführt. Der Bootloader umfasst aufgrund von Größenbeschränkungen nur eine geringe Speichergröße. Sobald der Bootloader ausgeführt wird, übergibt dieser die Kontrolle an einen sekundären Bootloader auf der Festplatte, der sich normalerweise in einem 32 KB großen Speicherbereich zwischen dem MBR und der ersten Partition befindet. Dieser sekundäre Bootloader lädt dann wiederum das oder die Betriebssysteme.

Auf einer MBR-partitionierten Festplatte wird der Bootcode für GRUB in den MBR installiert. Dies lädt und übergibt die Kontrolle an ein “Kern”-Image, das zwischen dem MBR und der ersten Partition installiert ist. Ab diesem Zeitpunkt ist GRUB in der Lage, den Rest der benötigten Ressourcen (Menüdefinitionen, Konfigurationsdateien und Zusatzmodule) von der Festplatte zu laden.

Der MBR hat jedoch Beschränkungen hinsichtlich der Anzahl der Partitionen (ursprünglich maximal 4 primäre Partitionen, später maximal 3 primäre Partitionen mit 1 erweiterten Partition, die in eine Anzahl der logischen Partitionen) und maximale Plattengrößen von 2 TB. Um diese Einschränkungen zu überwinden, wurde ein neues Partitionierungsschema namens GPT (GUID Partition Table)geschaffen, welches Teil des UEFI-Standards (Unified Extensible Firmware Interface) ist.

GPT-partitionierte Festplatten können entweder mit Computern mit dem traditionellen PC-BIOS oder mit UEFI-Firmware verwendet werden. Auf Maschinen mit einem BIOS wird der zweite Teil von GRUB in einer speziellen BIOS-Bootpartition gespeichert.

Auf Systemen mit UEFI-Firmware wird GRUB von der Firmware aus den Dateien grubia32.efi (für 32-Bit-Systeme) oder grubx64.efi (für 64-Bit-Systeme) von einer Partition mit dem Namen ESP (EFI System Partition) geladen.

Die /boot Partition

Unter Linux werden die für den Bootprozess notwendigen Dateien normalerweise auf einer Bootpartition gespeichert, die unter dem Root-Dateisystem eingehängt und umgangssprachlich als /boot bezeichnet wird.

Eine Bootpartition wird auf aktuellen Systemen nicht benötigt, da Bootloader wie GRUB normalerweise das Root-Dateisystem mounten und die benötigten Dateien in einem /boot-Verzeichnis suchen können. Es ist aber jedoch praktikabel, da sich so die für den Bootprozess benötigten Dateien vom Rest des Dateisystems trennen lassen.

Diese Partition ist normalerweise die Erste auf der Festplatte. Das liegt daran, dass das ursprüngliche IBM PC-BIOS die Platten über Zylinder, Köpfe und Sektoren (CHS) adressierte. Die maximale Plattengröße von 528 MB (504 unter MS-DOS) ergibt sich durch die maximale Anzahl von 1024 Zylindern, 256 Köpfen und 63 Sektoren. Alles jenseits dieses Wertes ist somit nicht zugänglich, es sei denn es wird ein anderes Plattenadressierungsschema (wie z.B. LBA, Logical Block Addressing) verwendet.

Aus Kompatibilitätsgründen befindet sich die /boot-Partition normalerweise am Anfang der Platte und endet vor Zylinder 1024 (528 MB), wodurch sichergestellt wird, dass die Maschine immer in der Lage ist, den Kernel zu laden. Die empfohlene Größe für diese Partition auf einem gängigen Computer beträgt 300 MB.

Andere Gründe für eine separate /boot-Partition sind Verschlüsselung und Komprimierung, da einige Methoden möglicherweise noch nicht von GRUB 2 unterstützt werden, oder wenn die System Root-Partition (/) mit einem nicht unterstützten Dateisystem formatiert ist.

Inhalt der Bootpartition

Der Inhalt der /boot-Partition kann je nach Systemarchitektur oder verwendetem Bootloader variieren, aber auf einem x86-basierten System finden Sie normalerweise die unten aufgeführten Dateien. Die meisten davon sind mit dem Suffix -VERSION benannt, wobei -VERSION die Version des entsprechenden Linux-Kernels enthält. So würde z.B. eine Konfigurationsdatei für die Linux-Kernel Version 4.15.0-65-generic als config-4.15.0-65-generic bezeichnet werden.

Konfigurationsdatei

Diese Datei, die gewöhnlich config-VERSION genannt wird (siehe Beispiel oben), speichert Konfigurationsparameter für den Linux-Kernel. Diese Datei wird automatisch erzeugt, wenn ein neuer Kernel kompiliert oder installiert wird, und sollte nicht direkt vom Benutzer geändert werden.

Systemzuordnung

Diese Datei ist eine Nachschlagetabelle, die Symbolnamen (wie Variablen oder Funktionen) mit der entsprechenden Position im Speicher abgleicht. Dies ist nützlich beim Debuggen einer Art von Systemfehler, der als Kernel panic bekannt ist, da der Benutzer dadurch feststellen kann, welche Variable oder Funktion aufgerufen wurde, als der Fehler auftrat. Wie die Konfigurationsdatei lautet der Name normalerweise System.map-VERSION (z.B. System.map-4.15.0-65-generic).

Linux-Kernel

Dies ist der eigentliche Betriebssystemkernel. Der Name ist normalerweise vmlinux-VERSION (z.B. vmlinux-4.15.0-65-generic). Sie können auch den Namen vmlinuz anstelle von vmlinux finden, wobei das z am Ende bedeutet, dass die Datei komprimiert wurde.

Initiales RAM-Dateisystem

Dieses Dateisystem wird üblicherweise als initrd.img-VERSION bezeichnet und enthält ein minimales Root-Dateisystem, das in den RAM-Speicher geladen wird. Es enthält Dienstprogramme und Kernelmodule, die benötigt werden, damit der Kernel das Root-Dateisystem mounten kann.

Bootloaderbezogene Dateien

Bei Systemen, auf denen GRUB installiert ist, befinden sich Bootloader bezogenen Dateien normalerweise auf /boot/grub und enthalten die GRUB-Konfigurationsdatei (/boot/grub/grub.cfg für GRUB 2 oder /boot/grub/menu.lst im Falle von GRUB Legacy), Module (in /boot/grub/i386-pc), Übersetzungsdateien (in /boot/grub/locale) und Schriftarten (in /boot/grub/fonts).

GRUB 2

Installation von GRUB 2

GRUB 2 kann mit dem Dienstprogramm grub-install installiert werden. Bei einem beschädigtem System, welches nicht mehr bootet, müssen von einer Live-CD oder Rettungsdiskette gestartet werden, um die Systembootpartition zu detektieren. Welche anschließend gemountet werden muss, um das Dienstprogramm auszuführen.

Note

Die folgenden Befehle setzen voraus, dass Sie als root angemeldet sind. Falls nicht, führen Sie zuerst sudo su - aus, um “root” zu werden. Wenn Sie fertig sind, geben Sie exit ein, um sich abzumelden und zu einer normalen Benutzersitzung zurückzukehren.

Die erste Platte in einem System ist normalerweise das Bootgerät und Sie müssen herausfinden, ob sich auf der Festplatte eine Bootpartition befindet. Dies kann mit dem fdisk Dienstprogramm durchgeführt werden. Um alle Partitionen auf der ersten Platte Ihres Rechners aufzulisten, verwenden Sie:

# fdisk -l /dev/sda
Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x97f8fef5

Device     Boot    Start       End   Sectors   Size Id Type
/dev/sda1  *        2048   2000895   1998848   976M 83 Linux
/dev/sda2        2002942 234440703 232437762 110,9G  5 Extended
/dev/sda5        2002944  18008063  16005120   7,6G 82 Linux swap / Solaris
/dev/sda6       18010112 234440703 216430592 103,2G 83 Linux

Die Bootpartition ist mit dem * unter der Spalte Boot gekennzeichnet. Im obigen Beispiel ist dies /dev/sda1.

Erstellen Sie nun ein temporäres Verzeichnis unter /mnt und mounten Sie die Partition darunter:

# mkdir /mnt/tmp
# mount /dev/sda1 /mnt/tmp

Führen Sie anschließend grub-install aus und verwenden Sie dabei das Gerät (nicht die Partition) sowie das Verzeichnis, in dem die Bootpartition eingebunden ist. Wenn Ihr System über eine dedizierte Bootpartition verfügt, lautet der Befehl:

# grub-install --boot-directory=/mnt/tmp /dev/sda

Wenn die Installation auf einem System stattfindet, das keine Bootpartition, sondern nur ein /boot-Verzeichnis auf dem Root-Dateisystem hat, führen Sie grub-install mittels folgenden Optionen aus:

# grub-install --boot-directory=/boot /dev/sda

GRUB 2 konfigurieren

Die Standardkonfigurationsdatei für GRUB 2 ist /boot/grub/grub.cfg. Diese Datei wird automatisch erzeugt und eine manuelle Bearbeitung wird nicht empfohlen. Um Änderungen an der GRUB Konfiguration vorzunehmen, müssen Sie die Datei /etc/default/grub editieren und dann das Dienstprogramm update-grub ausführen, um eine valide Konfigurationsdatei zu erzeugen.

Note

update-grub ist gewöhnlich eine Vereinfachung von grub-mkconfig -o /boot/grub/grub.cfg, so dass sich beide Befehle gleich verhalten.

Es gibt einige Optionen in der Datei /etc/default/grub, die das Verhalten von GRUB 2 steuern, wie den standardmäßig zu startenden Kernel, Timeout, zusätzliche Kommandozeilenparameter, usw. Die wichtigsten sind:

GRUB_DEFAULT=

Der Standardmenüeintrag zum Booten. Dies kann ein numerischer Wert sein (wie 0, 1, etc.), der Name eines Menüeintrags (wie debian) oder saved, der in Verbindung mit GRUB_SAVEDEFAULT= verwendet wird, wie weiter unten erklärt wird. Denken Sie daran, dass Menüeinträge bei Null beginnen, so dass der erste Menüeintrag 0 ist, der zweite 1, usw.

GRUB_SAVEDEFAULT=

Wenn diese Option auf true und GRUB_DEFAULT= auf saved gesetzt ist, dann wird die Standard-Bootoption immer die zuletzt im Bootmenü gewählte sein.

GRUB_TIMEOUT=

Die Zeitüberschreitung in Sekunden, bevor der Standardmenüeintrag ausgewählt wird. Wenn auf 0 gesetzt, bootet das System den Standardeintrag, ohne ein Menü anzuzeigen. Wenn sie auf -1 gesetzt ist, wartet das System, bis der Benutzer eine Option auswählt, egal wie lange es dauert.

GRUB_CMDLINE_LINUX=

Hier werden Befehlszeilenoptionen aufgelistet, die den Einträgen für den Linux-Kernel hinzugefügt werden.

GRUB_CMDLINE_LINUX_DEFAULT=

Standardmäßig werden für jeden Linux-Kernel zwei Menüeinträge generiert, einer mit den Standardoptionen plus ein Eintrag für die Wiederherstellung. Mit dieser Option können Sie zusätzliche Parameter hinzufügen, die nur dem Standardeintrag hinzugefügt werden.

GRUB_ENABLE_CRYPTODISK=

Wenn sie auf y gesetzt sind, suchen Befehle wie grub-mkconfig, updategrub und grub-install nach verschlüsselten Festplatten und fügen die Befehle hinzu, die für den Zugriff darauf während des Bootens benötigt werden. Dies deaktiviert das automatische Booten (GRUB_TIMEOUT= mit einem anderen Wert als -1), da eine Passphrase benötigt wird, um die Platten zu entschlüsseln, bevor auf sie zugegriffen werden kann.

Verwaltung von Menüeinträgen

Wenn update grub ausgeführt wird, sucht GRUB 2 auf dem Rechner nach Kernels und Betriebssystemen und erzeugt die entsprechenden Menüeinträge in der Datei /boot/grub/grub.cfg. Neue Einträge können manuell zu den Skriptdateien im Verzeichnis /etc/grub.d hinzugefügt werden.

Diese Dateien sollten ausführbar sein und werden in numerischer Reihenfolge von update grub verarbeitet. Daher wird 05_debian_theme vor 10_linux verarbeitet und so weiter. Benutzerdefinierte Menüeinträge werden normalerweise zur Datei 40_custom hinzugefügt.

Die grundlegende Syntax für einen Menüeintrag ist folgend dargestellt:

menuentry "Default OS" {
    set root=(hd0,1)
    linux /vmlinuz root=/dev/sda1 ro quiet splash
    initrd /initrd.img
}

Die erste Zeile beginnt immer mit menuentry und endet mit {. Der Text zwischen den Anführungszeichen wird als Beschriftung des Eintrags im Bootmenü von GRUB 2 angezeigt.

Der Parameter set root definiert die Festplatte samt Partition, auf der sich das Root-Dateisystem für das Betriebssystem befindet. Bitte beachten Sie, dass bei GRUB 2 die Festplatten von Null an durchnummeriert werden, so dass hd0 die erste Festplatte ist (sda unter Linux), hd1 die zweite und so weiter. Partitionen werden jedoch von eins beginnend durchnummeriert. Im obigen Beispiel befindet sich das Root-Dateisystem auf der ersten Festplatte (hd0), der ersten Partition (,1) oder sda1.

Anstatt das Gerät und die Partition direkt anzugeben, können Sie GRUB 2 auch nach einem Dateisystem mit einer bestimmten Bezeichnung oder UUID (Universally Unique Identifier) suchen lassen. Verwenden Sie dazu den Parameter search --set=root gefolgt vom Parameter --label und dem Dateisystemlabel, nach dem gesucht werden soll, oder --fs-uuid gefolgt von der UUID des Dateisystems.

Sie können die UUID eines Dateisystems mit dem folgenden Befehl herausfinden:

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 nov  4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5
lrwxrwxrwx 1 root root 10 nov  4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6
lrwxrwxrwx 1 root root 10 nov  5 19:10 56C11DCC5D2E1334 -> ../../sdb1
lrwxrwxrwx 1 root root 10 nov  4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1

Im obigen Beispiel lautet die UUID für /dev/sda1 ae71b214-0aec-48e8-80b2-090b6986b625. Sollten Sie dieses als Rootgerät für GRUB 2 setzen wollen, lautet der Befehl dazu search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625.

Bei Verwendung des Befehls search ist es üblich, den Parameter --no-floppy hinzuzufügen, damit GRUB keine Zeit mit der Suche nach Disketten verschwendet.

Die Zeile linux gibt an, wo sich der Kernel für das Betriebssystem befindet (in diesem Fall die Datei vmlinuz im Wurzelverzeichnis des Dateisystems). Danach können Kommandozeilenparameter an den Kernel übergeben werden.

Im obigen Beispiel haben wir die Rootpartition angegeben (root=/dev/sda1) und drei Kernelparameter übergeben: Die Rootpartition soll schreibgeschützt eingehängt werden (ro), die meisten Log-Meldungen sollen deaktiviert werden (quiet) und ein Splashscreen soll angezeigt werden (splash).

Die Zeile initrd gibt an, wo sich das initiale RAM Image befindet. Im obigen Beispiel lautet die Datei initrd.img, die sich an der Wurzel des Dateisystems befindet.

Note

Die meisten Linux-Distributionen legen den Kernel und initrd nicht wirklich im Wurzelverzeichnis des Root-Dateisystems ab. Stattdessen sind diese Links zu den eigentlichen Dateien innerhalb des /boot-Verzeichnisses oder der Bootpartition.

Die letzte Zeile eines Menüeintrags sollte nur das Zeichen } enthalten.

Interagieren mit GRUB 2

Wenn Sie ein System mit GRUB 2 booten, sehen Sie ein Menü mit Optionen. Verwenden Sie die Pfeiltasten, um eine Option auszuwählen, und Enter, um den ausgewählten Eintrag zu bestätigen und zu booten.

Tip

Wenn Sie nur einen Countdown, aber kein Menü sehen, drücken Sie Shift, um das Menü aufzurufen.

Um eine Option zu bearbeiten, wählen Sie diese mit den Pfeiltasten aus und drücken Sie E. Daraufhin wird ein Editorfenster mit dem Inhalt des mit dieser Option verknüpften Menüeintrags geöffnet, wie in /boot/grub/grub.cfg definiert.

Nachdem Sie eine Option bearbeitet haben, betätigen Sie Strg+X oder F10, um zu booten, oder Esc, um zum Menü zurückzukehren.

Um in die GRUB 2 Shell zu gelangen, drücken Sie C auf dem Menübildschirm (oder Strg+C) im Bearbeitungsfenster). Sie werden eine Befehlsaufforderung wie diese sehen: grub >

Geben Sie help ein, um eine Liste aller verfügbaren Befehle anzuzeigen, oder drücken Sie Esc, um die Shell zu verlassen und zum Menübildschirm zurückzukehren.

Note

Denken Sie daran, dass dieses Menü nicht erscheint, wenn GRUB_TIMEOUT unter /etc/default/grub auf 0 gesetzt ist.

Booten von der GRUB 2 Kommandozeile

Sie können die GRUB 2 Shell verwenden, um das System zu booten, falls eine Fehlkonfiguration in einem Menüeintrag zu einem Fehlstart des Systems führt.

Als erstes sollten Sie herausfinden, wo sich die Bootpartition befindet. Das können Sie mit dem Befehl ls tun, der eine Liste der Partitionen und Festplatten anzeigt, die GRUB 2 gefunden hat.

grub> ls
(proc) (hd0) (hd0,msdos1)

Das obige Beispiel ist sehr einfach gehalten. Es gibt nur eine Platte (hd0), welche nur eine Partition besitzt: (hd0,msdos1).

Die aufgelisteten Festplatten und Partitionen werden vom System unterscheiden. In unserem Beispiel heißt die erste Partition von hd0 msdos1, weil die Platte nach dem MBR-Partitionierungsschema partitioniert wurde. Wäre die Platte mittels GPT partitioniert, würde der Name gpt1 lauten.

Um Linux zu booten, benötigen wir einen Kernel und das initiale RAM Image (initrd). Lassen Sie uns den Inhalt von (hd0,msdos1) überprüfen:

grub> ls (hd0,msdos1)/
lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/

Sie können den Parameter -l zu ls hinzufügen, um eine detailierte Auflistung zu erhalten, ähnlich der, die Sie auf einem Linux Terminal erhalten würden. Verwenden Sie Tab, um Festplatten-, Partitions- und Dateinamen automatisch zu vervollständigen.

Beachten Sie, dass sich ein Kernelimage (vmlinuz) und ein initrd-Image (initrd.img) direkt im Hauptverzeichnis befindet. Falls nicht, könnten wir den Inhalt von /boot mit list (hd0,msdos1)/boot/ überprüfen.

Legen Sie nun die Bootpartition fest:

grub> set root=(hd0,msdos1)

Laden Sie den Linux-Kernel mit dem Befehl linux, gefolgt vom Pfad zum Kernel und der Option root=, um dem Kernel mitzuteilen, wo sich das Root-Dateisystem für das Betriebssystem befindet.

grub> linux /vmlinuz root=/dev/sda1

Laden Sie das initiale RAM-Dateisystem mit initrd, gefolgt von dem vollständigen Pfad zur Datei initrd.img:

grub> initrd /initrd.img

Starten Sie nun das System mit boot.

Booten von der Rettungskommandozeile

Im Falle eines Bootfehlers kann GRUB 2 eine Rescue-Shell laden, eine vereinfachte Version der zuvor erwähnten Shell. Sie erkennen diese Shell am Prompt der Eingabeaufforderung, welcher als grub rescue> angezeigt wird.

Der Prozess zum Booten eines Systems von dieser Shell ist fast derselbe wie zuvor gezeigt. Sie müssen jedoch ein paar GRUB 2 Module laden, damit alles funktioniert.

Nachdem Sie herausgefunden haben, welche Partition die Bootpartition ist (mit ls, wie zuvor gezeigt), verwenden Sie den Befehl set prefix=, gefolgt vom vollständigen Pfad zum Verzeichnis, welcher die GRUB 2 Dateien enthält. Normalerweise lautet dieser /boot/grub. In unserem Beispiel:

grub rescue> set prefix=(hd0,msdos1)/boot/grub

Laden Sie nun die Module normal und linux mit dem Befehl insmod:

grub rescue> insmod normal
grub rescue> insmod linux

Als nächstes setzen Sie die Bootpartition mit set root= wie zuvor beschrieben, laden den Linux-Kernel (mit linux), das initiale RAM Image (initrd) und starten mittels boot das System.

GRUB Legacy

Installation von GRUB Legacy von einem laufenden System

Um GRUB Legacy von einem laufenden System aus auf eine Festplatte zu installieren, wird das Dienstprogramm grub-install verwendet. Der Grundbefehl dazu lautet grub-install DEVICE, wobei DEVICE die Festplatte ist, auf der GRUB Legacy installieren werden soll. Ein Beispiel wäre /dev/sda.

# grub-install /dev/sda

Beachten Sie, dass Sie das Gerät angeben müssen, auf dem GRUB Legacy installiert werden soll, wie z.B. /dev/sda/, nicht die Partition wie in /dev/sda1.

Standardmäßig kopiert GRUB die benötigten Dateien in das Verzeichnis /boot auf dem angegebenen Gerät. Wenn Sie diese in ein anderes Verzeichnis kopieren möchten, verwenden Sie den Parameter --boot-directory=, gefolgt von dem vollständigen Pfad, wohin die Dateien kopiert werden sollen.

Installation von GRUB Legacy aus einer GRUB Kommandozeile

Wenn Sie das System aus irgendeinem Grund nicht booten können und GRUB Legacy neu installieren müssen, können Sie dies von der GRUB Shell auf einem GRUB Legacy Startmedium bewerkstelligen.

Von der GRUB Shell aus (drücken Sie c im Bootmenü, um zum Prompt grub> zu gelangen), besteht der erste Schritt darin, das Bootgerät einzustellen, welches das Verzeichnis /boot enthält. Wenn sich dieses Verzeichnis beispielsweise in der ersten Partition der ersten Platte befindet, lautet der Befehl:

grub> root (hd0,0)

Wenn Sie nicht wissen, welches Gerät das Verzeichnis /boot enthält, können Sie mit dem Befehl find wie folgt danach zu suchen:

grub> find /boot/grub/stage1
 (hd0,0)

Stellen Sie dann die Bootpartition wie oben beschrieben ein und verwenden Sie den Befehl setup, um GRUB Legacy in den MBR zu installieren und die benötigten Dateien auf die Festplatte zu kopieren:

grub> setup (hd0)

Wenn Sie fertig sind, starten Sie das System neu und es sollte normal starten.

Konfigurieren von GRUB Legacy Menüeinträgen und Einstellungen

GRUB Legacy Menüeinträge und Einstellungen werden in der Datei /boot/grub/menu.lst gespeichert. Dies ist eine einfache Textdatei mit einer Liste von Befehlen und Parametern, die direkt mit Ihrem bevorzugten Texteditor bearbeitet werden kann.

Zeilen, die mit # beginnen, werden als Kommentare betrachtet und Leerzeilen werden ignoriert.

Ein Menüeintrag hat mindestens drei Befehle. Der Erste, titel, zeigt den Titel des Betriebssystems auf dem Menübildschirm an. Der Zweite, root, teilt GRUB Legacy mit, von welchem Gerät oder welcher Partition gebootet werden soll.

Der dritte Eintrag, kernel, gibt den vollständigen Pfad zum Kernelimage an, das geladen werden soll, wenn der entsprechende Eintrag ausgewählt wird. Beachten Sie, dass dieser Pfad relativ zu dem Gerät steht, welcher mittels dem Parameter root definiert wurde.

Folgend ein einfaches Beispiel:

# This line is a comment
title My Linux Distribution
root (hd0,0)
kernel /vmlinuz root=/dev/hda1

Im Gegensatz zu GRUB 2 werden in GRUB Legacy beide Festplatten und Partitionen von Null an nummeriert. Der Befehl root (hd0,0) setzt also die Bootpartition als die erste Partition (0) der ersten Festplatte (hd0).

Sie können die root Anweisung weglassen, wenn Sie das Bootgerät vor dem Pfad beim kernel Befehl angeben. Die Syntax ist äquivalent:

kernel (hd0,0)/vmlinuz root=dev/hda1

ist gleichwertig mit:

root (hd0,0)
kernel /vmlinuz root=/dev/hda1

Beide Varianten laden die Datei vmlinuz aus dem Wurzelverzeichnis (/) der ersten Partition der ersten Festplatte (hd0,0).

Der Parameter root=/dev/hda1 nach dem kernel Befehl teilt dem Linux-Kernel mit, welche Partition als Root-Dateisystem verwendet werden soll. Dies ist ein Linux-Kernelparameter, kein GRUB Legacy Befehl.

Note

Um mehr über Kernelparameter zu erfahren, siehe https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html.

Möglicherweise müssen Sie den Speicherort des initialen RAM-Images für das Betriebssystem mit dem Parameter initrd angeben. Der vollständige Pfad zu der Datei kann wie im Parameter kernel angegeben werden. Es ist ebenso möglich ein Gerät oder eine Partition vor dem Pfad anzugeben, wie z.B.:

# This line is a comment
title My Linux Distribution
root (hd0,0)
kernel /vmlinuz root=/dev/hda1
initrd /initrd.img

GRUB Legacy ist modular aufgebaut, wobei Module (normalerweise als .mod Dateien in /boot/grub/i386-pc abgelegt) geladen werden können, um zusätzliche Funktionen hinzuzufügen, wie z.B. Unterstützung für ungewöhnliche Hardware, Dateisysteme oder neue Kompressionsalgorithmen.

Module werden mit dem Befehl module geladen, gefolgt von dem vollständigen Pfad zu der entsprechenden .mod Datei. Beachten Sie, dass dieser Pfad, wie bei Kernels und initrd-Images, relativ zu dem im root Befehl angegebenen Gerät anzugeben ist.

Im folgenden Beispiel wird das Modul 915resolution geladen, das zur korrekten Einstellung der Framebufferauflösung auf Systemen mit Videochipsätzen der Intel 800- oder 900-Serie benötigt wird.

module /boot/grub/i386-pc/915resolution.mod

Kettenladen anderer Betriebssysteme

GRUB Legacy kann verwendet werden, um nicht unterstützte Betriebssysteme wie Windows mit einem Prozess namens chainloading (kettenladen) zu laden. GRUB Legacy wird zuerst geladen, und durch Auswählen der entsprechenden Option, wird der Bootloader für das gewünschte System geladen.

Ein typischer Eintrag für das Kettenladen von Windows würde wie untenstehend erfolgen:

# Load Windows
title Windows XP
root (hd0,1)
makeactive
chainload +1
boot

Lassen Sie uns jeden Parameter durchgehen. Wie zuvor gibt root (hd0,1) das Gerät und die Partition an, auf der sich der Bootloader für das Betriebssystem befindet, das wir laden möchten. In diesem Beispiel die zweite Partition der ersten Festplatte.

makeactive

setzt ein Flag, welches anzeigt, dass dies eine aktive Partition ist. Dies funktioniert nur auf primären DOS Partitionen.

chainload +1

weist GRUB an, den ersten Sektor der Bootpartition zu laden. Dies ist der Ort, an dem sich normalerweise der Bootloader befindet.

boot

führt den Bootloader aus und lädt das entsprechende Betriebssystem.

Geführte Übungen

  1. Was ist der Standardspeicherort für die GRUB 2 Konfigurationsdatei?

  2. Welche Schritte sind erforderlich, um die Einstellungen für GRUB 2 zu ändern?

  3. In welche Datei sollen benutzerdefinierte GRUB 2 Menüeinträge eingefügt werden?

  4. Wo sind die Menüeinträge für GRUB Legacy gespeichert?

  5. Wie können Sie von einem GRUB 2 oder GRUB Legacy Menü aus in die GRUB Shell gelangen?

Offene Übungen

  1. Stellen Sie sich einen Benutzer vor, der GRUB Legacy so konfiguriert, dass das System von der zweiten Partition der ersten Platte bootet. Er legt dazu den folgenden benutzerdefinierten Menüeintrag an:

    title My Linux Distro
    root (hd0,2)
    kernel /vmlinuz root=/dev/hda1
    initrd /initrd.img

    Das System bootet jedoch nicht. Wo könnte der Fehler liegen?

  2. Stellen Sie sich vor, Sie haben eine als /dev/sda identifizierte Festplatte mit mehreren Partitionen. Welcher Befehl kann verwendet werden, um herauszufinden, welche die Bootpartition des Systems darstellt?

  3. Welcher Befehl kann verwendet werden, um die UUID einer Partition anzuzeigen?

  4. Betrachten Sie den folgenden Eintrag für GRUB 2

    menuentry "Default OS" {
        set root=(hd0,1)
        linux /vmlinuz root=/dev/sda1 ro quiet splash
        initrd /initrd.img
    }

    Ändern Sie den Eintrag so, dass das System von einer Festplatte mit der UUID 5dda0af3-c995-481a-a6f3-46dcd3b6998d bootet.

  5. Wie können Sie GRUB 2 so einstellen, dass 10 Sekunden gewartet wird, bevor der Standardmenüeintrag gestartet wird?

  6. Wie lauten die Befehle, um GRUB von einer GRUB Legacy Shell aus auf die erste Partition der zweiten Festplatte zu installieren?

Zusammenfassung

In dieser Lektion haben wir gelernt

  • Was ein Bootloader ist.

  • Die Unterschiede zwischen GRUB Legacy und GRUB 2.

  • Was ist eine Bootpartition, und was deren Inhalt ist.

  • Wie man GRUB Legacy und GRUB 2 installiert.

  • Wie man GRUB Legacy und GRUB 2 konfiguriert.

  • Wie man benutzerdefinierte Menüeinträge zu GRUB Legacy und GRUB 2 hinzufügt.

  • Wie man mit dem Menübildschirm und der Konsole von GRUB Legacy und GRUB 2 interagiert.

  • Wie man ein System von einer GRUB Legacy oder GRUB 2 Shell oder einer Rescue-Shell startet.

Die folgenden Befehle wurden in dieser Lektion besprochen:

  • grub-install

  • update-grub

  • grub-mkconfig

Lösungen zu den geführten Übungen

  1. Was ist der Standardspeicherort für die GRUB 2 Konfigurationsdatei?

    /boot/grub/grub.cfg

  2. Welche Schritte sind erforderlich, um die Einstellungen für GRUB 2 zu ändern?

    Nehmen Sie Ihre Änderungen in der Datei /etc/default/grub vor, dann aktualisieren Sie die Konfiguration mit update-grub.

  3. In welche Datei sollen benutzerdefinierte GRUB 2 Menüeinträge eingefügt werden?

    /etc/grub.d/40_custom

  4. Wo sind die Menüeinträge für GRUB Legacy gespeichert?

    /boot/grub/menu.lst

  5. Wie können Sie von einem GRUB 2 oder GRUB Legacy Menü aus in die GRUB Shell gelangen?

    Durch drücken von c im Menübildschirm.

Lösungen zu den offenen Übungen

  1. Stellen Sie sich einen Benutzer vor, der GRUB Legacy so konfiguriert, dass das System von der zweiten Partition der ersten Platte bootet. Er legt dazu den folgenden benutzerdefinierten Menüeintrag an:

    title My Linux Distro
    root (hd0,2)
    kernel /vmlinuz root=/dev/hda1
    initrd /initrd.img

    Das System bootet jedoch nicht. Wo könnte der Fehler liegen?

    Die Bootpartition ist falsch. Denken Sie daran, dass GRUB Legacy im Gegensatz zu GRUB 2 die Partitionen von Null an zählt. Der korrekte Befehl für die zweite Partition der ersten Platte muss also root (hd0,1) lauten.

  2. Stellen Sie sich vor, Sie haben eine als /dev/sda identifizierte Festplatte mit mehreren Partitionen. Welcher Befehl kann verwendet werden, um herauszufinden, welche die Bootpartition des Systems darstellt?

    Verwenden Sie fdisk -l /dev/sda. Die Bootpartition wird in der Auflistung mit einem Sternchen (*) gekennzeichnet.

  3. Welcher Befehl kann verwendet werden, um die UUID einer Partition anzuzeigen?

    Verwenden Sie ls -la /dev/disk/by-uuid/ und suchen Sie nach der UUID, die auf die Partition zeigt.

  4. Betrachten Sie den folgenden Eintrag für GRUB 2

    menuentry "Default OS" {
        set root=(hd0,1)
        linux /vmlinuz root=/dev/sda1 ro quiet splash
        initrd /initrd.img
    }

    Ändern Sie den Eintrag so, dass das System von einer Festplatte mit der UUID 5dda0af3-c995-481a-a6f3-46dcd3b6998d bootet.

    Die Anweisung set root muss geändert werden. Anstatt eine Festplatte und eine Partition anzugeben, weisen Sie Grub an, nach der Partition mit der gewünschten UUID zu suchen.

    menuentry "Default OS" {
        search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d
        linux /vmlinuz root=/dev/sda1 ro quiet splash
        initrd /initrd.img
    }
  5. Wie können Sie GRUB 2 so einstellen, dass 10 Sekunden gewartet wird, bevor der Standardmenüeintrag gestartet wird?

    Fügen Sie den Parameter GRUB_TIMEOUT=10 zu /etc/default/grub hinzu.

  6. Wie lauten die Befehle, um GRUB von einer GRUB Legacy Shell aus auf die erste Partition der zweiten Platte zu installieren?

    grub> root (hd1,0)
    grub> setup (hd1)

Linux Professional Insitute Inc. Alle Rechte vorbehalten. Besuchen Sie die LPI Learning Website: https://learning.lpi.org
Dieses Werk steht unter der Lizenz Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Nächste Lektion

102.3 Shared Libraries verwalten (102.3 Lektion 1)

Nächste Lektion lesen

Linux Professional Insitute Inc. Alle Rechte vorbehalten. Besuchen Sie die LPI Learning Website: https://learning.lpi.org
Dieses Werk steht unter der Lizenz Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

LPI ist eine Non-Profit-Organisation.

© 2023 Linux Professional Institute (LPI) ist eine globale Organisation für Zertifizierungsstandards und zur Karriereplanung für Open-Source-Profis. Mit mehr als 200.000 Zertifikatsinhabern ist es die weltweit erste und größte herstellerneutrale Linux- und Open-Source-Zertifizierungsstelle. LPI verfügt über zertifizierte Fachleute in über 180 Ländern, bietet Prüfungen in mehreren Sprachen an und hat Hunderte von Trainingspartnern.

Unser Ziel ist es, wirtschaftliche und kreative Möglichkeiten für alle zu ermöglichen, indem wir Open-Source-Wissens- und Kompetenzzertifizierungen allgemein zugänglich machen.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Kontaktieren Sie uns
  • Datenschutz und Cookie-Richtlinien

Haben Sie einen Fehler entdeckt oder möchten Sie helfen, diese Seite zu verbessern? Lassen Sie es uns wissen.

© 1999–2023 The Linux Professional Institute Inc. Alle Rechte vorbehalten.