Grub
Grub in den Masterbootrecord installieren
Das Problem
Windows und Linux sollen auf einer Festplatte gebootet werden, z.B. Windows auf Partition 1 (hda1), Linux auf Partition 3 (hda3). Wird erst Windows und dann Linux installiert, erledigt der Bootloader grub normalerweise die Arbeit und erzeugt eine korrekte menu.lst.
Wird Windows nach Linux oder neu installiert, setzt sich der Windows-Bootloader im MBR (Master Boot Record) fest und grub fliegt raus. Da Windows keine ext3- Partitionen erkennt, bootet nur noch Windows ohne jegliche Auswahlmöglichkeit.
Die Lösung
Grub muss wieder in den MBR rein. Um die entsprechenden Kommandos auszuführen,
muss man erstmal eine Linux-Rescue-CD oder Knoppix-Live-CD booten. Bei Knoppix
empfiehlt sich die Eingabe von "knoppix 2" am Bootprompt. Das verhindert das
langsame Booten in den Grafikmodus, den wir für das, was wir nun vorhaben, eh
nicht brauchen.
Ist die CD gebootet, lässt man sich durch Eingabe von
# fdisk -l
auf der Shell anzeigen, auf welcher Partition was drauf ist. Hier ein Ausgabe-Beispiel:
Platte /dev/hda: 20.0 GByte, 20003880960 Byte 255 Köpfe, 63 Sektoren/Spuren, 2432 Zylinder Einheiten = Zylinder von 16065 x 512 = 8225280 Bytes
Gerät boot. Anfang Ende Blöcke Id System /dev/hda1 * 1 1275 10241406 7 HPFS/NTFS /dev/hda2 1786 1810 200812+ 82 Linux Swap / Solaris /dev/hda3 1811 2432 4996215 83 Linux /dev/hda4 1276 1785 4096575 f W95 Erw. (LBA) /dev/hda5 1276 1785 4096543+ 6 FAT16
In unserem Fall befindet sich die Linux-Partition auf /dev/hda3. Also mountet man diese Partition und chrootet sich dahin:
# mount /dev/hda3 /mnt # chroot /mnt
Jetzt muss man nur noch das Kommando ausführen, das grub in den MBR bringt :
# grub-install /dev/hda
(ev. vorher in der Datei devices.map nachschauen, welches Laufwerk auf die /- bzw. /boot-Partition gemappt ist
Falls die Windows-Partition nicht in der menu.lst eingetragen ist, kann man dies
nachholen. Datei zur Bearbeitung öffnen:
# vi /boot/grub/menu.lst
und dort folgenden Eintrag vornehmen
grub (old)
title Windows (kann man was beliebiges reinschreiben) root (hd0,0) makeactive chainloader +1
grub2 (aka grub-common)
menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" { insmod part_msdos insmod ntfs set root='(/dev/sda,msdos1)' search --no-floppy --fs-uuid --set 500cbe6b0cbe4c1a drivemap -s (hd0) ${root} chainloader +1 }
Eigentlich sollte hier nichts von Hand editiert werden müssen. Mit
update-grub(2)
werden Einträge in der grub.cfg automagisch generiert.
Achtung: Wer beim grub2 die grub.cfg manuell editiert, sollte diese wegsichern. Beim nächsten Update des grub-Pakets oder des Kernels werden die Änderungen nämlich überschrieben!
Mit "exit" oder "ctrl+d" die Chroot-Umgebung verlassen und rebooten. Jetzt sollte eine Grub-Auswahlliste zu sehen sein.
Probleme mit grub
Im folgenden wird nur noch grub2 behandelt.
Fehlermeldung beim Booten
Could not stat the resume device file /dev/disk/by-uuid/...
Weiterbooten nur durch Drücken der Return-Taste möglich
Passiert z.B. nach rsync von einer Platte auf die andere. Möglicherweise ist noch die alte swap-Partition gemappt, deren UUID jetzt natürlich nicht mehr gefunden wird.
Abhilfe:
UUID der neuen swap-Partition raussuchen und in der resume-Datei korrigieren.
Beispiel:
# fdisk -l | grep swap /dev/sda3 7836 8880 8393962+ 82 Linux swap / Solaris # ls -l /dev/disk/by-uuid | grep sda3 lrwxrwxrwx 1 root root 10 Nov 11 12:29 37367319-fe2a-424a-9c6c-aa6553471b41 -> ../../sda3
# vi /etc/initramfs-tools/conf.d/resume
eintragen:
RESUME='UUID=37367319-fe2a-424a-9c6c-aa6553471b41'