Bootloader wiederherstellen: Unterschied zwischen den Versionen
Gehrke (Diskussion | Beiträge) K (→Links: chroot (Wikipedia)) |
Gehrke (Diskussion | Beiträge) K (Review-Tag entfernt) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | |||
− | |||
Im Falle eines nicht mehr funktionierenden Boot-Prozesses ist es manchmal notwendig, den [[Bootmanager]] neu zu installieren. In solchen Fällen erscheint möglicherweise nach dem Start des Rechners nur die lapidare Anzeige: | Im Falle eines nicht mehr funktionierenden Boot-Prozesses ist es manchmal notwendig, den [[Bootmanager]] neu zu installieren. In solchen Fällen erscheint möglicherweise nach dem Start des Rechners nur die lapidare Anzeige: | ||
<pre> | <pre> | ||
Zeile 12: | Zeile 10: | ||
=System mit Live-Version booten= | =System mit Live-Version booten= | ||
− | Zuerst wird das System über den USB-Stick gebootet. Je nach BIOS-Einstellungen muss man hierfür noch eine Tastenkombination (oft F2) drücken, um den Stick als Boot-Medium auswählen zu können. Nach dem Start öffnet man eine Shell und wird root-User: | + | Zuerst wird das System über den USB-Stick gebootet. Je nach [[BIOS|BIOS-Einstellungen]] muss man hierfür noch eine Tastenkombination (oft F2) drücken, um den Stick als Boot-Medium auswählen zu können. Nach dem Start öffnet man eine Shell und wird root-User: |
<pre> | <pre> | ||
linux@linux:~> su - | linux@linux:~> su - | ||
</pre> | </pre> | ||
+ | Oftmals starten Live-Systeme mit einem amerikanischen [[Tastaturlayout]]. Hier ist es für deutschsprachige Anwender hilfreich, eine passende Tastaturbelegung einzustellen. Dies kann beispielsweise so erreicht werden: | ||
+ | <pre> | ||
+ | linux@linux:~ #loadkeys de-latin1.map | ||
+ | </pre> | ||
+ | |||
=Partitionierungslayout= | =Partitionierungslayout= | ||
Für die folgenden Schritte ist es wichtig, das Partitionierungslayout des Zielsystems verstanden zu haben. Eine übersichtliche Darstellung erreicht man über den Befehl ''lsblk'': | Für die folgenden Schritte ist es wichtig, das Partitionierungslayout des Zielsystems verstanden zu haben. Eine übersichtliche Darstellung erreicht man über den Befehl ''lsblk'': |
Aktuelle Version vom 14. Januar 2016, 18:03 Uhr
Im Falle eines nicht mehr funktionierenden Boot-Prozesses ist es manchmal notwendig, den Bootmanager neu zu installieren. In solchen Fällen erscheint möglicherweise nach dem Start des Rechners nur die lapidare Anzeige:
GRUB
Der Vorgang kann prinzipiell mit einem beliebigen bootbaren Linux von USB-Stick oder CD geschehen, allerdings ist es wichtig, dass die Systemarchitektur passt (i386 vs. x86_64).
Im folgenden Beispiel erfolgt die Reparatur von GRUB 2 eines installierten OpenSUSE 13.1 mit einer KDE-Live-Version der selben Release. Analog dazu sollte die Vorgehensweise aber auch für andere Systeme und andere Bootloader funktionieren.
Inhaltsverzeichnis
System mit Live-Version booten
Zuerst wird das System über den USB-Stick gebootet. Je nach BIOS-Einstellungen muss man hierfür noch eine Tastenkombination (oft F2) drücken, um den Stick als Boot-Medium auswählen zu können. Nach dem Start öffnet man eine Shell und wird root-User:
linux@linux:~> su -
Oftmals starten Live-Systeme mit einem amerikanischen Tastaturlayout. Hier ist es für deutschsprachige Anwender hilfreich, eine passende Tastaturbelegung einzustellen. Dies kann beispielsweise so erreicht werden:
linux@linux:~ #loadkeys de-latin1.map
Partitionierungslayout
Für die folgenden Schritte ist es wichtig, das Partitionierungslayout des Zielsystems verstanden zu haben. Eine übersichtliche Darstellung erreicht man über den Befehl lsblk:
linux:~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk ├─sda1 8:1 0 156M 0 part └─sda2 8:2 0 1.8T 0 part sdb 8:16 1 1.9G 0 disk ├─sdb1 8:17 1 4M 0 part ├─sdb2 8:18 1 936M 0 part /livecd └─sdb3 8:19 1 970M 0 part /read-write loop7 7:7 0 826.1M 1 loop /read-only
In diesem Beispiel steht 'sda' für die Festplatte und 'sdb' für den USB-Stick. Die Partition '/boot' liegt unverschlüsselt in 'sda1', der ersten primären Partition.
Die anderen Teile des Dateisystems liegen in einem mit dm-crypt verschlüsselten Bereich auf 'sda2', welches die Bezeichnung der zweiten primären Partition ist. Darin befindet sich ein auf LVM basierendes Partitionierungsschema. Zuerst müssen alle Bereiche nacheinander zugreifbar gemacht werden.
Hinweis: Nicht alle Systeme sind so konfiguriert wie in diesem Beispiel. Oftmals findet man weder Verschlüsselung noch LVM vor, sondern nur primäre oder erweiterte Partitionen. Insofern sind die folgenden Abschnitte als optional anzusehen und werden bei Nicht-Verwendung ausgelassen:
Cryptbereich entschlüsseln
Zuerst muss der dm-crypt-Container entschlüsselt werden:
linux:~ # cryptsetup luksOpen /dev/sda2 crypted Enter passphrase for /dev/sda2: linux:~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk ├─sda1 8:1 0 156M 0 part └─sda2 8:2 0 1.8T 0 part └─crypted 253:0 0 1.8T 0 crypt sdb 8:16 1 1.9G 0 disk ├─sdb1 8:17 1 4M 0 part ├─sdb2 8:18 1 936M 0 part /livecd └─sdb3 8:19 1 970M 0 part /read-write loop7 7:7 0 826.1M 1 loop /read-only
Man beachte das neu erzeugte Device 'crypted'.
LVM-Partitionierung einlesen
Die LVM-Partitionierung wird wie folgt eingelesen und verfügbar gemacht:
linux:~ # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert home system -wi------ 1.66t os2 system -wi------ 10.00g root system -wi------ 10.00g swap system -wi------ 2.00g linux:~ # vgchange -a y linux:~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk ├─sda1 8:1 0 156M 0 part └─sda2 8:2 0 1.8T 0 part └─crypted 253:0 0 1.8T 0 crypt ├─system-home 253:1 0 1.7T 0 lvm ├─system-root 253:2 0 10G 0 lvm ├─system-swap 253:3 0 2G 0 lvm └─system-os2 253:4 0 10G 0 lvm sdb 8:16 1 1.9G 0 disk ├─sdb1 8:17 1 4M 0 part ├─sdb2 8:18 1 936M 0 part /livecd └─sdb3 8:19 1 970M 0 part /read-write loop7 7:7 0 826.1M 1 loop /read-only
Im vorliegenden Beispiel liegt die 'root'-Partition in der Volume Group (VG) 'system' in der Logical Volume (LV) 'root'. Diese wird unter /dev/system/root bereitgestellt.
chroot
Nun stehen alle notwendigen Bereiche zur Verfügung. Im Folgenden werden sie im Dateisystem zu einer Struktur verbunden, um dann via 'chroot' temporär in diese Systemumgebung zu wechseln.
Zuerst die echten Dateisysteme '/' und '/boot':
linux:~ # mount /dev/system/root /mnt/ linux:~ # mount /dev/sda1 /mnt/boot/
Anschließend die virtuellen Dateisysteme:
linux:~ # mount -o bind /dev /mnt/dev linux:~ # mount -o bind /sys /mnt/sys linux:~ # mount -t proc /proc /mnt/proc
Abschließend wird das 'chroot' durchgeführt:
linux:~ # chroot /mnt/ /bin/bash
Hinweis: Wenn hierbei ein Fehler auftritt wie der folgende, dann stimmen möglicherweise die Systemarchitekturen der Live-Version einerseits und des Zielsystems anderseits nicht überein (i386 vs. x86_64):
chroot: failed to run command ‘/bin/bash’: Exec format error linux:/ # uname -i x86_64
Bootloader neu installieren
Nachdem nun die gewünschte Systemumgebung vollständig aktiv ist, kann der Bootloader neu geschrieben werden. Im Falle von GRUB 2 wird diese erneute Installation so durchgeführt:
linux:/ # grub2-install /dev/sda Installation finished. No error reported.
Dabei wird der MBR der Festplatte 'sda' als Ziel verwendet.
Systemressourcen freigeben
Um den sauberen Neustart vorzubereiten, sollten alle Schritte in umgekehrter Reihenfolge wieder aufgelöst werden.
chroot beenden:
linux:/ # exit exit
Dateisysteme lösen (umount):
linux:~ # umount /mnt/proc linux:~ # umount /mnt/sys linux:~ # umount /mnt/dev linux:~ # umount /mnt/boot linux:~ # umount /mnt/
Die LVM-Struktur auflösen:
linux:~ # vgchange -a n
Das Crypt-Device schliessen:
linux:~ # cryptsetup luksClose crypted
Abschliessend sollte die Block-Struktur wieder wie zu Anfang aussehen.
linux:~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk ├─sda1 8:1 0 156M 0 part └─sda2 8:2 0 1.8T 0 part sdb 8:16 1 1.9G 0 disk ├─sdb1 8:17 1 4M 0 part ├─sdb2 8:18 1 936M 0 part /livecd └─sdb3 8:19 1 970M 0 part /read-write loop7 7:7 0 826.1M 1 loop /read-only
Nun sollte nach einem Reboot der Bootmanager wieder funktionieren:
linux:~ # reboot