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 Namenvmlinuz
anstelle vonvmlinux
finden, wobei dasz
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 |
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
|
|
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 (wiedebian
) odersaved
, der in Verbindung mitGRUB_SAVEDEFAULT=
verwendet wird, wie weiter unten erklärt wird. Denken Sie daran, dass Menüeinträge bei Null beginnen, so dass der erste Menüeintrag0
ist, der zweite1
, usw. GRUB_SAVEDEFAULT=
-
Wenn diese Option auf
true
undGRUB_DEFAULT=
aufsaved
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 wiegrub-mkconfig
,updategrub
undgrub-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 |
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 |
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
-
Was ist der Standardspeicherort für die GRUB 2 Konfigurationsdatei?
-
Welche Schritte sind erforderlich, um die Einstellungen für GRUB 2 zu ändern?
-
In welche Datei sollen benutzerdefinierte GRUB 2 Menüeinträge eingefügt werden?
-
Wo sind die Menüeinträge für GRUB Legacy gespeichert?
-
Wie können Sie von einem GRUB 2 oder GRUB Legacy Menü aus in die GRUB Shell gelangen?
Offene Übungen
-
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?
-
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? -
Welcher Befehl kann verwendet werden, um die UUID einer Partition anzuzeigen?
-
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. -
Wie können Sie GRUB 2 so einstellen, dass 10 Sekunden gewartet wird, bevor der Standardmenüeintrag gestartet wird?
-
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
-
Was ist der Standardspeicherort für die GRUB 2 Konfigurationsdatei?
/boot/grub/grub.cfg
-
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 mitupdate-grub
. -
In welche Datei sollen benutzerdefinierte GRUB 2 Menüeinträge eingefügt werden?
/etc/grub.d/40_custom
-
Wo sind die Menüeinträge für GRUB Legacy gespeichert?
/boot/grub/menu.lst
-
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
-
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. -
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. -
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. -
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 }
-
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. -
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)