MBR einer Linux-Installation wiederherstellen
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:
Anschließend kann mit testdisk
versucht werden, die Partitionen zu erkennen und den MBR neuzuschreiben:
- Starten von
testdisk
und Auswählen einer Logdatei, in der einzelne Änderungen protokolliert werden - Festplatte auswählen und Proceed anwählen
- 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
- Anwählen von Analyse und Quick Search. Sofern Partitionen erkannt wurden, kann über den Menüpunkt Write der MBR neugeschrieben werden:
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. 🙂