Grub reparieren
Dieser Artikel erklärt, wie man einen beschädigten GRUB-Bootloader repariert oder ihn neu installiert, bspw. nach Umzug des Systems auf eine neue Festplatte.
Getestet: Dieser Hinweis soll dir dabei helfen, zu entscheiden, ob dieser Artikel auf deinem System funktionieren wird oder nicht. Solltest du feststellen, dass dieser Artikel bei einer ungetestet Version funktioniert, kannst du das gerne hier korrigieren oder im Forum anmerken.
|
Debian-Rettungssystem
Rettungssystem starten
Für die Reparatur von GRUB kann man das auf den Debian-Installations-CDs vorhandene Rettungssystem verwenden. Eine Netinst-CD reicht aus. Das Rettungssystem erkennt neben „klassischer Partitionierung“ auch Logical Volume Management (LVM) und verschlüsseltes LVM und kann GRUB in diesen Fällen wiederherstellen.
Zum Starten des Rettungssystems bootet man von der CD und wählt im wählt im Startmenü „Advanced Options“ und dann „Rescue Mode“ aus. Dann beantwortet man die Fragen zu Sprache, Hostnamen usw. Das weitere Vorgehen wird weiter unten beschrieben.
Fehler: Rettungsmodus will Dateisysteme nicht einbinden
Bei Aufruf bestimmter Menüpunkte des Rettungsmodus will der Debian-Installer als erstes das Wurzeldateisystems des installierten Systems einhängen. Falls dieses bereits installiert ist, dann schlägt des Einhängen fehl. Entweder ruft man dann eine Shell auf und umountet /target (und ggf. zuvor weitere darunter eingehängte Dateisysteme), oder man bootet neu.
Alternative Rettungssysteme
SystemRescueCD
Eine Alternative zum Debian-Rettungssystem ist SystemRescueCD. Dies ist ein umfangreiches Live-System mit einer reichhaltigen Toolauswahl. Man kann damit GRUB wiederherstellen, aber auch Datenrettung betreiben, Systeme auf andere Festplatten umziehen, Dateisysteme vergrößern/verkleinern usw. Sogar ein SSH-Server ist drin. Mit der SystemRescueCD kann man in ein defektes System chrooten und hat dann dort alle Tools zur Verfügung, um GRUB neu zu installieren, dessen Konfiguration zu ändern, das initramfs neu zu erzeugen, Pakete zu installieren (dank Netzverbindung sogar über apt) usw.
Wie man mit SystemRescueCD chrootet und dann GRUB wiederherstellt, kann man aus der Beschreibung für „Wiederherstellung bei MD-RAID“ ableiten.
SuperGrubDisk
Eine weitere Alternative ist die SuperGrubDisk, die i.W. das ist, was der Name verspricht: ein von CD bootbarer GRUB mit etwas Menü drumherum. Die CD versucht, die vorhandene GRUB-Konfiguration zu erkennen und darüber ein installiertes System zu starten. Aus dem gestarteten System kann man anschließend mit grub-install GRUB neu installieren.
SuperGrubDisk enthält kein Rettungssystem, man kann also nicht in das installierte System chrooten und dann die GRUB-Konfiguration oder initrd reparieren.
Weitere
Man kann GRUB mit so ziemlich jedem weiteren Live-System reparieren, das es erlaubt, in das installierte System zu chrooten.
Wiederherstellung bei BIOS-Boot oder (U)EFI-CSM
Grundlagen
Bei klassischem BIOS-Boot oder bei Nutzung des EFI-CSM wird GRUB, sofern eine DOS-Partitionstabelle verwendet wird, in der „MBR Gap“ zwischen dem MBR (Master Boot Record, der erste Sektor der Festplatte) und dem Beginn der ersten Partition (im Regelfall Sektor 2048) installiert[1]. Der MBR enthält die Partitionstabelle und gerade soviel Code, um den Rest von GRUB in den Hauptspeicher zu laden und zu starten. Eine Windows-Installation überschreibt den MBR und richtet den Windows-eigenen Bootloader ein, wodurch GRUB nicht mehr gestartet wird.
Bei Festplatten größer 2 TiB muss anstelle einer DOS-Partitionstabelle eine GPT verwendet werden. GRUB wird dann nicht in die MBR Gap, sondern in eine separate GRUB-Partition (nicht zu verwechseln mit der ESP) installiert. grub-install erkennt die GRUB-Partition anhand ihres Partitionstyps[2].
Für GRUB sind zwei Befehle wesentlich:
- update-grub aktualisiert die Konfiguration von GRUB und wertet dafür bspw. Änderungen in der Konfigurationsdatei /etc/default/grub aus.
- grub-install installiert GRUB auf dem angegebenen Gerät. Wenn GRUB in eine separate GRUB-Partition installiert werden soll, wird kein Gerät angegeben.
Details lassen sich den Manpages entnehmen.
Für GRUB muss keine Partition als bootbar markiert werden. (Bekannte Ausnahme: bei HP-Proliant-Microservern muss eine Partition als bootbar markiert sein, da der Server sonst nicht weiß, von welcher Platte er den MBR starten soll. Das ist aber eine Beschränkung des BIOS und hat nichts mit GRUB zu tun.)
Wiederherstellung bei klassischer Partitionierung
Bei klassischer Partitionierung fragt das Debian-Rettungssystem nach dem Wurzeldateisystem. Dort wählt man die Partition aus, die als / gemountet werden soll. Falls /boot auf einer separaten Partition liegt, wird man im Folgeschritt nach dieser gefragt. Auch diese Partition muss eingehängt werden. Danach wählt man „Den GRUB-Bootloader neu installieren“ aus. Danach wählt man aus, wohin GRUB installiert werden soll:
- DOS-Partitionstabelle: bei Installation in die MBR Gap der ersten Festplatte gibt man dort /dev/sda an.
- GPT: bei Installation in eine GRUB-Partition gibt man dort nichts an, da grub-install die GRUB-Partition anhand ihres Partitionstyps erkennt.
Danach startet man neu. GRUB sollte jetzt wieder funktionieren.
Um die Liste der Betriebssysteme zu aktualisieren und bspw. ein neu installiertes Windows neu aufzunehmen, führt man im installierten System einmalig
root@debian:~# update-grub
aus. Alternativ kann man im Rettungssystem „Eine Shell in /dev/sda1 ausführen“ auswählen, wobei anstelle von /dev/sda1 das tatsächlich vorhandene Gerät für das Wurzeldateisytem auszuwählen ist. Dort führt man update-grub aus.
Wiederherstellung bei Logical Volume Management
Bei Nutzung von LVM ist in der Regel nur /boot auf einer klassischen Partition zu finden und der Rest des Systems auf Logical Volumes. Für die Wiederherstellung von GRUB muss also die Volume Group verfügbar gemacht und / und /boot eingehängt werden.
GRUB neu installieren
Das Rettungssystem erkennt das LVM, so dass bei der Frage nach dem root-Dateisystem auch Logical Volumes aufgeführt werden. Dort wählt man das LV, das als Wurzeldateisystem eingehängt werden soll.
Danach wird man gefragt, ob man eine separate /boot-Partition einbinden möchte, was man bejaht.
Danach installiert man GRUB neu wie oben bei klassischer Partitionierung beschrieben und startet neu.
Booten scheitert nach Neuinstallation
Falls das Booten mit „Fehler: Sie müssen zuert den Kernel laden“ fehlschlägt, muss man die GRUB-Konfiguration neu erzeugen.
Dieser Fehler tritt i.A. nur auf, wenn das System auf LVM umgezogen wurde. Dafür startet man wiederum den Rettungsmodus und hängt das Wurzeldateisytem und /boot ein. Danach wählt man „Eine Shell in /dev/demo-vg/root ausführen“ (d.h. man chrootet in das installierte System), wobei anstelle von /dev/demo-vg/root das tatsächlich vorhandene Gerät für das Wurzeldateisytem auszuwählen ist. Danach führt man update-grub aus und startet neu.
Booten dauert lange
Falls der Bootvorgang hängt, bevor er mit „Gave up waitung for suspend/resume device“ fortgesetzt wird, dann muss der initrd das Swap-Device mitgeteilt werden. Dieser Fehler tritt i.A. nur auf, wenn das System auf LVM umgezogen wurde.
Die Korrektur kann aus dem laufenden System heraus erfolgen. Man trägt in der /etc/initramfs-tools/conf.d/resume das aktuelle Swap-Device ein und erzeugt vermittels
root@debian:~# update-initramfs -u -k all
die initramfs neu.
Wiederherstellung bei verschlüsseltem Logical Volume Management
Bei per dm-crypt/LUKS verschlüsseltem LVM liegt wie bei unverschlüsseltem LVM /boot auf einer normalen Partition und alle weiteren Dateisysteme auf Logical Volumes. Die Volume Group wird beim Booten entschlüsselt und die darauf vorhandenen Dateisysteme eingehängt.
GRUB neu installieren
Das Rettungssystem erkennt die Verschlüsselung und fragt das Passwort ab. Danach fährt man fort wie bei unverschlüsseltem LVM.
Booten scheitert nach Neuinstallation
Falls das Booten mit „Fehler: Sie müssen zuert den Kernel laden“ fehlschlägt, muss man die GRUB-Konfiguration neu erzeugen. Man aktualisiert die GRUB-Konfiguration wie oben beim unverschlüsseltem LVM beschrieben.
Falls GRUB die Volume Group nicht findet und der Bootvorgang mit „Cannot process volume group“ scheitert, dann muss die initrd mit Unterstützung für Verschlüsselung neu erzeugt werden.
Dazu startet man das Rettungssystem, startet eine Shell im installierten System und führt
root@debian:~# update-initramfs -u -k all
aus.
Wiederherstellung bei MD-RAID
Für die Wiederherstellung eines auf einem RAID installierten GRUB kann man das Debian-Rettungssystem verwenden, muss ihm aber etwas auf die Sprünge helfen.
Das Rettungssystem erkennt das RAID und bietet an, es zu assemblieren.
Im Folgeschritt wählt man die Partitionen entweder aus oder verlässt sich auf die Automatik.
Nun erkennt das Rettungssystem nicht die Partitionen auf dem RAID, weshalb wir kein Wurzeldateisystem einhängen können. Wir wählen daher „zurück“ und danach „Eine Shell ausführen“. In der Shell mounten wir das Wurzeldateisystem von Hand, chrooten in das installierte System und installieren von dort aus GRUB neu.
~ # mkdir /target ~ # mount /dev/md0p1 /target ~ # mount -o bind /dev/ /target/dev/ ~ # mount -o bind /proc/ /target/proc/ ~ # mount -o bind /sys/ /target/sys/ ~ # chroot /target/ # grub-install /dev/sda Installing for i386-pc platform. Installation finished. No error reported.
Danach verlässt man das chroot und die Shell und bootet neu.
Falls /boot auf einer separaten Partition liegt, muss diese zusätzlich eingehängt werden. Das Beispiel zeigt die Installation in die MBR Gap; bei Installation in eine GRUB-Partition lässt man bei grub-install die Angabe des Geräts weg.
Partitionstabelle zerstört
Falls die Partitionstabelle beschädigt oder zerstört wurde, so lassen sich die Partitionen wiederherstellen, sofern deren Daten nicht überschrieben wurden. Dafür kann man das Tool TestDisk verwenden. TestDisk durchsucht die Festplatte nach Superblöcken und rekonstruiert daraus die Partitionstabelle. TestDisk ist auf dem Debian-Rettungssystem nicht vorhanden, man braucht ein Rettungssystem wie bspw. SystemRescueCD (siehe oben unter „Alternative Rettungssysteme“).
TestDisk wird mit Angabe der zu durchsuchenden Festplatte gestartet:
root@sysresccd /root % testdisk /dev/sda
Danach wird man interaktiv durch die Wiederherstellung geführt. Zunächst wählt man das Partitionierungsschema aus:
Im Folgeschritt wählt man „Analyse“ und dann „Quick Search“. Danach wird das Analyseergebnis angezeigt:
Das Analyseergebnis kann man anhand der darunter angezeigten Legende interpretieren. Im Beispiel wurden zwei primäre Partitionen erkannt. Bevor die Partitionstabelle neu geschrieben wird, kann man das Ergebnis ändern und bspw. primäre Partitionen in logische Laufwerke umwidmen.
Nach Wiederherstellung der Partitionstabelle kann man GRUB wiederherstellen wie unter „Wiederherstellung bei MD-RAID” beschrieben.
Ausprobieren
Warnung: Diese Spielerei bitte nur in einer virtuellen Maschine oder nach vorherigem Backup durchführen. |
Wer das Ganze ausprobieren möchte: GRUB zerstört man, indem man
root@debian:~# dd if=/dev/zero of=/dev/sda bs=512 count=2047 seek=1
ausführt. Dadurch werden alle Sektoren zwischen dem MBR und der ersten Partition überschrieben. Wer zusätzlich den MBR schrotten will, gibt
root@debian:~# dd if=/dev/zero of=/dev/sda bs=512 count=2048
ein.
Wiederherstellung bei (U)EFI
Grundlagen
Bei Nutzung von EFI existiert auf der Festplatte eine EFI System Partition (ESP), in die die Bootloader installiert werden. Das EFI lädt die Bootloader direkt aus dieser Partition, der MBR wird ignoriert. Bei EFI muss eine GPT verwendet werden. Die ESP ist im laufenden System unter /boot/efi eingehängt und kann anhand des Partitionstyps erkannt werden.
Für GRUB sind zwei Befehle wesentlich:
- update-grub aktualisiert die Konfiguration von GRUB und wertet dafür bspw. Änderungen in der Konfigurationsdatei /etc/default/grub aus.
- grub-install installiert GRUB neu. Es wird kein Gerät angegegeben.
Details lassen sich den Manpages entnehmen.
Wiederherstellung bei klassischer Partitionierung
Die Wiederherstellung bei klassischer Partitionierung unter EFI durch das Debian-Rettungssystem läuft im Wesentlichen genau so ab wie bei klassischer Partitionierung unter BIOS-Boot, siehe oben.
Das Vorgehen weicht in zwei Punkten ab. Zum ersten bootet die Netinst-CD im EFI-Modus. Nach Einhängen des Wurzeldateisystems wird man gefragt, ob man die EFI-Partition /boot/efi einhängen möchte, was man bejaht.
Danach wählt man „Den GRUB-Bootloader neu installieren“, gibt bei der Frage nach dem Gerät aber (zweite Abweichung) nichts ein.
Das war’s.
Wiederherstellung bei Logical Volume Management
Die Wiederherstellung bei Logical Volume Management unter EFI läuft genau so wie bei BIOS-Boot. Der Installer fragt nach dem Logical Volume, das als Wurzeldateisystem eingehängt werden soll, und danach nach der Partition, die als /boot eingehängt werden soll. Zusätzlich wird wie bei klassischer Partitionierung unter EFI gefragt, ob man /boot/efi einhängen will, was man wiederum bejaht, und bei der Installation von GRUB gibt man gleichfalls kein Gerät an. Fertig.
Wiederherstellung bei verschlüsseltem Logical Volume Management
Das Rettungssystem erkennt die Verschlüsselung und fragt das Passwort ab. Danach fährt man fort wie bei unverschlüsseltem LVM.
Wiederherstellung bei MD-RAID
Die Wiederherstellung eines auf MD-RAID und per EFI bootenden Systems erfolgt ähnlich wie bei BIOS-Boot. Auch hier muss man dem Debian-Rettungssystem unter die Arme greifen. Man lässt wie bei BIOS-Boot das RAID assemblieren und ruft eine Shell auf. In der Shell mounten wir das Wurzeldateisystem von Hand, chrooten in das installierte System und installieren von dort aus GRUB neu.
~ # mkdir /target ~ # mount /dev/md0p1 /target/ ~ # mount /dev/sda1 /boot/efi/ ~ # mount -o bind /dev/ /target/dev/ ~ # mount -o bind /proc/ /target/proc/ ~ # mount -o bind /sys/ /target/sys/ ~ # chroot /target/ # grub-install x86_64-efi wird für Ihre Plattform installiert. Installation beendet. Keine Fehler aufgetreten.
Danach verlässt man das chroot und die Shell und bootet neu.
Falls /boot auf einer separaten Partition liegt, muss diese zusätzlich vor /boot/efi eingehängt werden.