Login
Login-Name Passwort


 
Newsletter
Werbung

Mo, 5. Juni 2000, 00:00

GRUB, zerstörte Partitionen und Booten vom Netz

Vorwort

In diesem Artikel berichte ich darüber, was mir heute abend (22. März 2000) passiert ist und wie ich meine Haut rettete. Ich werde nicht sehr in die technischen Details gehen, da der Artikel ein breites Spektrum von Themen streift, die ausführlich zu beschreiben Bände füllen könnte.

Wie es begann

Es war einmal... so sollten wir, der Tradition folgend beginnen. Kurz gesagt, ich hatte kürzlich in einem Rechner zwei IDE-Platten von jeweils 20 GB installiert. Da der IDE-Controller auf dem Board kein Ultra-DMA beherrscht, installierte ich einen UDMA-Controller. Mit Hilfe der Kernel-Option "Boot from secondary IDE" konnte ich sogar erreichen, daß die Platten von Linux als /dev/hda und /dev/hdc erkannt wurden, genau wie vorher am alten IDE-Controller auch. Nur konnte ich LILO nicht verwenden. LILO hängte sich beim Booten immer nach dem "LI" auf. Ich mußte also immer von Diskette booten. Nicht weiter tragisch bei Uptimes von über einem Monat im Durchschnitt, aber trotzdem verbessserungswürdig.

Ich beschloß daher, GRUB auszuprobieren. Es konnte ja nichts passieren, da ich eine Bootdiskette hatte. Dachte ich.

GRUB

Ich installierte zunächst die GRUB-Dateien mit dem üblichen ./configure; make; make install. Dann erzeugte ich mir noch die Doku im DVI-Format: cd doc; make. Ich folgte der Anleitung in der Doku, um GRUB auf eine Bootdiskette zu kopieren:

dd if=/usr/local/share/grub/stage1 of=/dev/fd0 bs=512
dd if=/usr/local/share/grub/stage2 of=/dev/fd0 bs=512 seek=1

Das Booten mit der Floppy brachte mich zum Bootprompt, und ich spielte ein Weilchen mit den Optionen und der eingebauten Hilfe herum. Es gelang mir nach mehreren Anläufen, Linux zu booten. Sehr fein! Folgende drei Kommandos genügten dazu:

kernel (hd0,1)/boot/vmlinuz-2.2.14
root (hd0,1)
boot

Die ersten beiden Zeilen sind natürlich spezifisch für mein Setup, da ich meine Kernel nach der Versionsnummer zu benennen pflege. Die Angabe (hd0,1) ist die zweite Partition der ersten Festplatte, unter Linux als /dev/hda2 bezeichnet.

Die Katastrophe

Nach diesem Erfolg wollte ich die Diskette loswerden und GRUB direkt auf der Platte installieren. Dazu gab ich die gleichen Kommandos wie oben an, nur mit hda statt fd0, und bootete neu.

Am Bootprompt war GRUB nicht in der Lage, den Kernel zu finden. Na gut, sagte ich mir, dann probiere ich es noch einmal mit der Floppy. Fehlanzeige. Kein Kernel. Noch immer blickte ich nichts. Dann bootete ich mit meiner alten Bootdiskette und erhielt eine Kernel Panic. Nun dämmerte mir langsam, was passiert war. Ich hatte bei der Installation von GRUB auf die Festplatte die gleichen Kommandos verwendet wie bei der Floppy. Dadurch wurden die ersten 150 Sektoren der Festplatte zerstört, unter anderem auch die Partitionstabelle.

Was tun? Neuinstallieren kam nicht in Frage, da ich die 6 GB an Daten nicht verlieren wollte, die auf den Platten lagern. Außerdem ist das System hochgradig angepaßt, Hunderte von Programmen bereits manuell aktualisiert. Schnell merkte ich, daß das Booten von einer Rettungsdiskette nicht funktionierte, da diese Diskette meinen IDE-Controller nicht unterstützt. Vielleicht hätte man den Controller mit einer Kommandozeilen-Option entdecken können, doch das fällt mir erst jetzt ein, wo alles vorbei ist.

Es blieben zwei Alternativen: Entweder würde ich den Rechner auseinanderbauen und die Platten wieder an den alten IDE-Controller hängen. Das wäre aber lästig, und ich müßte noch einen anderen Rechner ausbauen, um überhaupt heranzukommen. Die andere Möglichkeit war Booten vom Netzwerk mit einer speziellen Bootdiskette.

Booten übers Netz

Natürlich entschied ich mich für letzteres. Dazu mußte ich aber erst einmal einen angepaßten Kernel 2.2.14 erstellen, der alle Netzwerktreiber eingebaut anstatt als Module hat, NFS eingebaut, IP Autoconfig mit BOOTP, sowie NFS als Root-Filesystem. Eine halbe Stunde später war der Kernel fertig und auf Diskette kopiert.

Zum Booten übers Netzwerk muß zunächst der DHCP-Server konfiguriert werden, so daß der Client die richtigen Daten erhält. Dann muß man vom NFS-Server ein Root-Filesystem mounten. Es ist ungünstig, wenn dieses Dateisystem identisch ist mit dem des Servers, denn einige Konfigurationsdateien in /etc sind immer rechnerspezifisch, und diverse schreibbare Dateien in /var sollen auch nicht gemeinsam genutzt werden. Zum Glück hatte ich schon eine vorbereitete Mini-Root-Partition. Der erste Versuch, diese zu booten, ging natürlich daneben. Wie ich schnell feststellte, war eine veraltete Datei resolv.conf das größte Problem. Diese enthielt noch die IP-Adresse 10.0.0.2 für den Nameserver, während ich inzwischen auf 172.30.4.1 umgestellt hatte. Nach dieser und ein paar weiteren kleinen Korrekturen fuhr das System hoch. Ich konnte mich einloggen und das fdisk-Programm starten.

Die Rettung

Bis hierher hatte ich noch nichts gewonnen, denn die Partitionstabelle war immer noch zerstört und ich hatte keine Aufzeichnungen zu den genauen Daten der Partitionen gemacht. Dennoch war ich mir sicher, die Partition wieder herstellen zu können, und zwar aus folgenden Gründen:

  • Ich wußte noch, daß die Platte drei Partitionen enthalten hatte, wobei die ersten beiden je ca. 60 MB groß waren (evtl. sogar exakt gleich groß) und die dritte, fast 20 GB große Partition unter Kontrolle des LVM (Logical Volume Manager) stand.
  • Der Bootmanager hatte einen Teil der ersten Partition überschrieben, aber nicht die zweite. Das war verschmerzbar, da die erste Partition eine Swap-Partition war.
  • Die zweite Platte des Systems ist identisch zur ersten, nur sind die ersten beiden Partitionen zu einer zusammengefaßt. Daraus würde sich sofort die Größe der großen Partition ablesen lassen.

Also fdisk gestartet, die zerstörten Partitionen entfernt und neue entsprechend den obigen Überlegungen angelegt. Dann Reboot mit meiner alten Bootfloppy. Und es funktionierte! Alles war wieder da, nur die Swap-Partition nicht. Diese stellte ich dann von Hand wieder her:

swapoff -a
mkswap /dev/hda1 61456
swapon -a

Abschluß

Nun installierte ich GRUB nochmals, diesmal aber korrekt nach der Anleitung. Ich rief also grub auf und arbeitete mit den Kommandos kernel, root und setup. Dann bootete ich neu (ohne Floppy) und kam an den GRUB-Prompt, was mit LILO nicht funktioniert hatte. Am GRUB-Prompt mußte ich allerdings wieder die Kommandos angeben, die ich am Anfang schon einmal beschrieben habe. Geht das nicht einfacher?

Es geht. Man kann eine Datei /boot/grub/menu.lst anlegen, die einen ähnlichen Zweck erfüllt wie /etc/lilo.conf bei LILO. Bei mir sieht diese Datei jetzt so aus:

 default 0 root (hd0,1)
kernel (hd0,1)/boot/vmlinuz-2.2.14
color light-gray/blue black/light-gray

Das Vorhandensein dieser Datei genügt GRUB bereits, eine Installation ist nicht nötig. Wieder einmal bootete ich neu, und erhielt ein Menü, das als einzige Auswahl "2.2.14" anbot. Drücken von ENTER oder Ablauf des Timeouts bootet dann den Linux-Kernel. Hervorragend! GRUB scheint schon jetzt weit besser als LILO zu sein, doch das ist Stoff für einen anderen Artikel.

Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung