Bootloader wiederherstellen: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (intern verlinkt)
K (Review-Tag entfernt)
 
Zeile 1: Zeile 1:
{{Review|Kompletter Artikel}}--[[Benutzer:Gehrke|Gehrke]] ([[Benutzer Diskussion: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. 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>

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.

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

Links