Bootloader wiederherstellen
Dieser Artikel oder Teile davon wurden mit 'Review' markiert. Das bedeutet, dass größere Arbeiten am Inhalt des Artikels abgeschlossen sind und der Autor eine Korrekturlesung durch andere User zur Qualitätssicherung für angebracht hält.
Zu sichtende Teile: Kompletter Artikel Bitte hilf LinuxClubWiki, indem du den zu sichtenden Teil überprüfst und den Artikel gegebenenfalls überarbeitest! |
--Gehrke (Diskussion) 21:45, 7. Feb. 2014 (CET)
Im Falle eines nicht mehr funktionierenden Boot-Prozesses ist es manchmal notwendig, den Bootmanager neu zu installieren. Dies 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 -
Partitionunslayout
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.
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ünscht 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