MBR einer Linux-Installation wiederherstellen

Netboot durch defekten MBR

Als Vorbereitung für einen Restore-Test habe ich neulich auf einem Linux-System den Master Boot Record (MBR) entfernt:

1# dd if=/dev/zero of=/dev/sda bs=512 count=1

Dieser Befehl überschreibt die ersten 512 Byte (in welchen sich die Partitionstabelle und der Bootloader befinden) der ersten Festplatte (/dev/sda) mit Nullen (/dev/zero).

Blöd ist nur, wenn man dann feststellt, dass der Restore nicht funktioniert und man das System manuell wieder in den Betrieb nehmen muss. 🙂

Vorgehensweise

Um den MBR wiederherzustellen kann ein Programm namens testdisk verwendet werden. Dieses Programm durchsucht angegebene Festplatten auf bekannte Dateisystemmuster und kann so Partitionsgrenzen erkennen. Es werden zahlreiche Linux-, Unix- und Windows-Dateisysteme erkannt.

Da das zerstörte System nicht mehr bootfähig ist, empfiehlt sich der Einsatz einer Live-CD - beispielsweise GParted, welches unter anderem testdisk bereits enthält.

Nach erfolgtem Boot wird ein Terminal geöffnet. Mithilfe der lsscsi- und fdisk-Kommandos kann die Festplatte des Gastbetriebsystems gesucht werden - gparted erkennt keine gültigen Partitionen:

lsscsi / fdisk -l

Anschließend kann mit testdisk versucht werden, die Partitionen zu erkennen und den MBR neuzuschreiben:

  1. Starten von testdisk und Auswählen einer Logdatei, in der einzelne Änderungen protokolliert werden
  2. Festplatte auswählen und Proceed anwählen
  3. Auswählen der Festplattentyps: Intel für herkömmliche PCs mit MBR/BIOS. Bei (U)EFI- oder GPT-Systemen muss EFI GPT ausgewählt werden
  4. Anwählen von Analyse und Quick Search. Sofern Partitionen erkannt wurden, kann über den Menüpunkt Write der MBR neugeschrieben werden:

MBR mit testdisk neuschreiben

Danach listet fdisk auch wieder definierte Partitionen auf:

 1# fdisk -l /dev/sda
 2Disk /dev/sda: 21.5 GB, 21474836480 bytes
 3255 heads, 63 sectors/track, 2610 cylinders
 4Units = cylinders of 16065 * 512 = 8225280 bytes
 5Sector size (logical/physical): 512 bytes / 512 bytes
 6I/O size (minimum/optimal): 512 bytes / 512 bytes
 7Disk identifier: 0x00000000
 8
 9   Device Boot      Start         End      Blocks   Id  System
10/dev/sda1   *           1          64      512000   83  Linux
11/dev/sda2              64        2611    20458496   8e  Linux LVM

Würde man jetzt das System neustarten, würde der Boot aufgrund fehlendem Bootloader fehlschlagen. Je nach vorheriger Konfiguration muss nun noch GRUB(2) neuinstalliert werden - beispielsweise über die Live-CD:

1# mount /dev/sdaX /mnt
2# grub-install --no-floppy --root-directory=/mnt /dev/sda

Blöd ist nur, wenn die GRUB-Version der Live-CD neuer ist als die des Hosts (GRUB2 vs. GRUB-legacy) - dann sind bereits vorhandene Konfigurationsdateien inkompatibel. In einem solchen Fall hilft nur das Einhängen aller Partitionen des Systems und Verwenden von chroot:

1# mount /dev/sdaX /mnt
2# mount /dev/sdaX /mnt/boot
3...
4# mount --bind /dev /mnt/dev
5# mount --bind /tmp /mnt/tmp
6# mount -t proc proc /mnt/proc
7# mount -t sysfs none /mnt/sys
8# chroot /mnt /bin/bash

Nun kann der Bootloader neugeschrieben werden:

1# grep -v rootfs /proc/mounts > /etc/mtab
2# grub-install --no-floppy /dev/sda

Der nächste Boot sollte dann wieder funktionieren. 🙂

Übersetzungen: