Ersetzen einer Grub-Installation

Wenn Grub im MBR nur aktualisiert werden soll (mit einer neueren Version), wird dieser Befehl eingegeben:

/usr/sbin/grub-install --recheck --no-floppy /dev/sda

Eine Sicherheitsabfrage kann verlangen, dass dieser Befehl wiederholt wird.

Windows hat den Bootsektor überschrieben: Wiederherstellung von Grub

Um Grub neu in den MBR zu schreiben oder Grub generell wieder herzustellen, muss von der sidux Live-CD gebootet werden.

  1. Um zu ermitteln, welche Partitionen vorhanden sind (zum Beispiel [h,s]d[a..]X), benötigt man root-Privilegien (#), die man so erhält:
    $ sux
    
  2. Nun verwendet man folgende zwei Befehle, um die korrekten Bezeichnungen zu erhalten:
    fdisk -l
    cat /etc/fstab
    
  3. Nach Ermittlung der Partitionsbezeichnungen, legt man einen Einhängepunkt (Mount-Point) an
    mkdir -p /media/[hdxx,sdxx,diskx]
    
  4. und bindet die Partition ins Filesystem ein:
    mount /dev/xdxx /media/xdxx
    
  5. Nun kann Grub in den MBR der ersten (generischen) Festplatte geschrieben werden:
    /usr/sbin/grub-install --recheck --no-floppy --root-directory=/media/xdxx /dev/sda
    
Beispiel:
root@sidux:/home/sidux# fdisk -l
# fdisk -l
Disk /dev/sda: 115.9 GB, 115989736960 bytes
255 heads, 63 sectors/track, 14101 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x40444044
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3673    29503341    7  HPFS/NTFS
/dev/sda2            3674       14101    83762910    5  Extended
/dev/sda5            3674        7239    28641784+  83  Linux
/dev/sda6            7239       10842    28934104+  83  Linux
/dev/sda7           10843       14101    26177886    b  W95 FAT32
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xa41e667f
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        3574    28708123+  83  Linux
/dev/sdb2            3575        7247    29503372+  83  Linux
/dev/sdb3            7248       10845    28900935   83  Linux
/dev/sdb4           10846       14593    30105810    5  Extended
/dev/sdb5   *       10846       14338    28057491   83  Linux
/dev/sdb6           14339       14593     2048256   82  Linux swap / Solaris
Disk /dev/sdc: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00077541
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       30401   244196001   83  Linux
Disk /dev/sdd: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1c01ad92
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1       30401   244196001   83  Linux

root@sidux:/home/sidux# cat /etc/fstab
# /etc/fstab - static information about the filesystems - fstab(5)
#
# /etc/fstab is only read by programs, and not written; it is the duty of the
# system administrator to properly maintain this file.
#
# Instead  of giving the device explicitly, one may indicate the filesystem
# that is to be mounted by its UUID or VOLUME label. This will make the
# system more robust: adding or removing a disk changes the disk device name
# but not the filesystem UUID or VOLUME label.

# automatically added, ST3120026A-3LJ093B4-part1
/dev/sda1       /media/disk0    ntfs    noauto,users,exec,ro,dmask=0022,fmask=0133      0       0

# automatically added, ST3120026A-3LJ093B4-part5
/dev/sda5       /media/disk1    jfs     noauto,users,exec,noatime       0       2

# automatically added, ST3120026A-3LJ093B4-part6
/dev/sda6       /media/disk2    reiserfs        noauto,users,exec,noatime       0       2

# automatically added, ST3120026A-3LJ093B4-part7
/dev/sda7       /media/disk3    vfat    noauto,users,exec,shortname=lower,quiet,umask=000       0       0

# automatically added, ST3120026A-3LJ09RBF-part1
/dev/sdb1       /media/disk4    reiserfs        noauto,users,exec,noatime       0       2

# automatically added, ST3120026A-3LJ09RBF-part2
/dev/sdb2       /media/disk5    ext3    noauto,users,exec,noatime       0       2

# automatically added, ST3120026A-3LJ09RBF-part3
/dev/sdb3       /media/disk6    reiserfs        noauto,users,exec,noatime       0       2

# automatically added, ST3120026A-3LJ09RBF-part5
/dev/sdb5       /media/disk7    ext3    noauto,users,exec,noatime       0       2

# automatically added, ST3120026A-3LJ09RBF-part6
/dev/sdb6       none    swap    sw      0       0

# automatically added, ST3250824AS-4ND1V199-part1
/dev/sdc1       /media/disk9    ext3    noauto,users,exec,noatime       0       2

# automatically added, ST3250620AS-9QE13XVF-part1
/dev/sdd1       /media/disk10   ext3    noauto,users,exec,noatime       0       2

# automatically added, _NEC_DVD_RW_ND-4550A
/dev/cdrom      /media/cdrom    udf,iso9660     user,noauto     0       0

# automatically added, ASUS_DVD-ROM_DVD-E616P_0104
/dev/cdrom1     /media/cdrom1   udf,iso9660     user,noauto     0       0

# automatically added
/dev/fd0        /media/fd0      auto    rw,user,noauto  0       0

# temporary filesystem in virtual memory
#tmpfs  /tmp    tmpfs   defaults        0       0
## Root-Partition ist /dev/sdb1 und der MBR geht nach sda
mkdir -p /media/sdb1
mount /dev/sdb1 /media/sdb1
/usr/sbin/grub-install --recheck --no-floppy --root-directory=/media/sdb1 /dev/sda

Auf älteren Linux-Systemen wurden IDE-Festplatten (PATA) mit der Bezeichnung hdaX anstelle der modernen sdaX versehen.

Erstellen einer bootfähigen Diskette (Floppy)

Um eine bootfähige Diskette zu erstellen, verwendet man am besten die Mittel, die von UBCD (Ultimate Boot Disk CD) bereit gestellt werden.

Grub aus dem MBR entfernen

Dies ist sehr einfach: als Root

lilo -M /dev/hda -s /dev/null

in eine Konsole eingeben.

GRUB-Bootmanager - was ist das?

Achtung: Grub für Kernel ab Version 2.6.22 verwendet als Festplattenbezeichnung sdax
und die Zeile
initrd (hd0,x)/sidux/miniroot.gz
wurde geändert zu:
initrd		/boot/initrd.img-2.6.xx.x-slh-smp-x

Allgemeines

Grub ist ein Bootmanager, der geeignet ist, Betriebssysteme von verschiedenen Partitionen zu starten. Grub ist nicht auf Blocklisten zum Finden der Dateien für den Systemstart angewiesen und kann eine ganze Reihe von Dateisystemen direkt lesen: ext2, ext3, reiserfs (Linux), Fat32, Fat16 (Windows), UFS (BSD), Minix und viele andere.

Grub beherrscht BIOS-Erweiterungen (kann also Partitionen oberhalb der 8 GByte booten!) und kennt keine 1024-Zylindergrenze. Grub ist es ziemlich egal, wo der Kernel liegt, er braucht nur die Angabe der Partition und den Pfad des zu bootenden Kernels (dies kann auch ein Symlink sein). Nach Änderung der Konfiguration (also der menu.lst) ist kein Programmaufruf wie bei Lilo nötig, die neue Konfiguration wird beim nächsten Booten eingelesen.

sidux verwendet Grub beim Booten von CD, und bei einer Festplatten-Installation wird als Standard Grub verwendet. Grub kann aber auch problemlos nachträglich installiert werden und wird mit folgendem Befehl aus einer Root-Konsole in den MBR installiert:

grub-install --root-directory=/media/hdaX /dev/hdY

/media/hdaX steht hierbei für die schreibend gemountete Partition, auf der im Verzeichnis /boot/grub die benötigten Dateien (stage2, stage1_5xxx) abgelegt werden.
Die Konfigurationsdatei menu.lst muss ebenfalls in diesem Verzeichnis erstellt werden. /dev/hdY ist die Platte, in deren MBR Grub installiert wird, normalerweise /dev/hda.

Festplattenbezeichner/Geräte-Namen

Zur Beachtung: hda ist ab Kernel 2.6.22 (und höher) obsolet, und hda muss durch sda ersetzt werden.

Grub unterscheidet nicht zwischen SCSI- und IDE-Festplatten. (hd0) ist immer die erste Festplatte, die in der Bootreihenfolge (Einstellung im BIOS) auch die erste ist, egal ob nun IDE oder SCSI. Ungewöhnlich ist die Zählweise, die 1. Partition auf der ersten Festplatte heißt (hd0,0). Die primären Partitionen haben die Ziffernfolge von 0-3 und die logischen Partitionen zählen dann ab 4 aufwärts.

Grub Linux Label
(fd0) /dev/fd0 Floppy (unter Windows)
(hda0) /dev/hda erste hd
(hd0,0) /dev/hda1 Part.1 auf hd1
(hd0,5) /dev/hda6 Erweiterte Part. auf hd 1

Alle Bezeichnungen für Geräte werden für Grub in Klammern () gesetzt. Man beachte jedoch die Einträge hinter dem Kernel, im Gegensatz zu Grub benötigt der Kernel die Angaben in der für Linux üblichen Art. Die Einträge im folgenden Beispiel zeigen beide auf die gleiche Partition, nämlich die vierte auf der ersten Platte. Der obere Eintrag in der Grub-Schreibweise, der untere in der für Linux typischen Art:

root (hd0,3)
kernel          /boot/vmlinuz root=UUID=bf955abf-ce1f-45a3-9ee5-93b5c5dc4fe0 ro quiet vga=791
initrd          /boot/initrd.img

Befehls-Modus (Grub-Shell)

Ein besonders angenehmes Feature von Grub ist der Befehls-Modus. Er wird mit "c" aufgerufen, es erscheint die Grub-Shell. Damit ist man in der Lage, auch bei einer fehlerhaften menu.lst verschiedene Systeme und Dateien (z. B. den Kernel) zu finden und zu booten.

Um ein wenig zu testen, kann Grub auch aus einem gebooteten sidux in einer Root-Shell mit # grub gestartet werden. In der Grub-Shell kann man sich mit "help" alle verfügbaren Befehle anzeigen lassen. Detaillierte Hilfe zu jedem Befehl gibt es mit "help befehl", zur Linux-Shell kehrt man mit "quit" zurück (die Grub-Shell wird beendet). In der Grub-Shell funktioniert die Tabulatortaste ähnlich wie in der Linux-Shell, das ist eine sehr große Erleichterung. Befehle, Laufwerksbezeichnungen und Dateinamen lassen sich mit der TAB-Taste automatisch vervollständigen.

Grub bietet hierbei z. B. die Möglichkeit, die Lage des Kernels und der initrd noch vor dem eigentlichen Booten mittels "find" festzustellen, z. B. gibt Grub auf den Befehl

find /boot/vmlinuz

die Partitionen aus, die einen Kernel mit dem Namen vmlinuz im Verzeichnis /boot enthalten:

(hd0,3) (hd1,0)

Die verfügbaren Partitionen kann man mit dem Befehl "geometry" feststellen, ein

geometry (hd0)

zeigt Folgendes:

"drive 0x80: C/H/S = 3648/255/63, The number of sectors = 58605120, /dev/hda Partition num: 0,
		Filesystem type is fat, partition type 0xb Partition num: 1,
		Filesystem type is fat, partition type 0xb Partition num: 2,
		Filesystem type is fat, partition type 0xc Partition num: 4,
		Filesystem type is ext2fs, partition type 0x83 Partition num: 5,
		Filesystem type unknown, partition type 0x82 Partition num: 6,
		Filesystem type is fat, partition type 0xb"

Nachdem der Kernel und eine eventuell vorhandene initrd (oder auch miniroot.gz) gefunden wurde, kann mit boot gestartet werden.

Edit-Modus

Dieser Modus ermöglicht es, die Einträge der Datei menu.lst während des Bootens zu ändern. Dies geht auch, wenn Grub von CD gebootet wird und die Datei schreibgeschützt ist. Dazu muss zuerst die ESC-Taste gedrückt werden. Im Anschluss wird mit Enter bestätigt und die Taste "e" gedrückt. Die Parameter werden dann einfach ans Ende der Zeile geschrieben oder man bewegt sich in der Zeile mit den Cursor-Tasten.

menu.lst (Beispiele für mögliche Einträge)

Kommentarzeilen werden mit # eingeleitet und stören den Bootvorgang nicht, sie können also in der Datei verbleiben.

# Example /boot/grub/menu.lst
################################################
# setkey changes the keyboardlayout to german (as an example)
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright
# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
default		0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout		5

# Pretty colours
color cyan/blue white/blue
gfxmenu (hd0,5)/boot/message

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title		Windows 95/98/NT/2000
# root		(hd0,0)
# makeactive
# chainloader	+1
#
# title		Linux
# root		(hd0,1)
# kernel	/vmlinuz root=/dev/hda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=UUID=1885d68b-cc9c-49f8-9f98-a6874e7b3e7e ro  quiet vga=791

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,5)

## should update-grub create alternative automagic boot options
## e.g. alternative=true
##      alternative=false
# alternative=false

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
##      lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=

## should update-grub lock old automagic boot options
## e.g. lockold=false
##      lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(single-user) single
# altoptions=(single-user mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
##      howmany=7
# howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
##      memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## ## End Default Options ##

title		Debian GNU/Linux, kernel 2.6.22.1-slh-smp-7
root		(hd0,5)
kernel		/boot/vmlinuz-2.6.22.1-slh-smp-7 root=UUID=1885d68b-cc9c-49f8-9f98-a6874e7b3e7e ro  quiet vga=791 
initrd		/boot/initrd.img-2.6.22.1-slh-smp-7

title		Debian GNU/Linux, kernel 2.6.22.1-slh-smp-7 (single-user mode)
root		(hd0,5)
kernel		/boot/vmlinuz-2.6.22.1-slh-smp-7 root=UUID=1885d68b-cc9c-49f8-9f98-a6874e7b3e7e ro  quiet vga=791 single
initrd		/boot/initrd.img-2.6.22.1-slh-smp-7

### END DEBIAN AUTOMAGIC KERNELS LIST

#### MS (TM)
title Windows 2K/XP/2003 (hda1)
chainloader (hd0,0)+1

### ISO boot
title sidux 32bit from gaiaISO
kernel (hd0,3)/sidux3/vmlinuz-2.6.22.1-slh-smp-7 boot=fll quiet vga=791 fromiso=/sidux3/siduxgaia.iso
initrd (hd0,3)/sidux3/initrd.img-2.6.22.1-slh-smp-7


title Debian GNU/Linux, kernel 2.6.18-1-686 (hda5)
root (hd0,4)
kernel (hd0,4)/boot/vmlinuz-2.6.18-1-686 root=/dev/hda5 ro vga=791
initrd (hd0,4)/boot/initrd.img-2.6.18-1-686
savedefault

Mehrere Systeme in Grub eintragen (Dual- und Multi-Boot)

Achtung: Grub für Kernel ab Version 2.6.22 verwendet als Festplattenbezeichnung sdax
und die Zeile
initrd (hd0,x)/sidux/miniroot.gz
wurde geändert zu:
initrd (hd0,x)/sidux/initrd.img-2.6.22.x-slh-smp-x

Mit Hilfe von "chainloading" ist es sehr einfach, das Grub-Auswahlmenü mit anderen Betriebssystemen zu erweitern. Wenn man zum Beispiel die Möglichkeit haben möchte, die Systeme MS Windows (TM) und Debian Etch zusammen mit einer sidux 'fromiso'-Installation zu starten, muss man Grub nur ein wenig anpassen. Hierzu öffnet man die Datei /boot/grub/menu.lst als Root mit einem Editor und fügt die folgenden Zeilen nach dem Hinweis ### END DEBIAN AUTOMAGIC KERNELS LIST hinzu:

####MS Windows Vista (TM)
Title Windows Vista
rootnoverify (hd0,1)
makeactive
chainloader +1

### Debian Etch
title Debian Etch
kernel (hd0,3)/debian/vmlinuz root=/dev/hda4 ro	(Oder was auch immer)
initrd (hd0,3)/debian/miniroot.gz		(hier stehen soll)

### ISO boot
title sidux 32bit from gaiaISO
kernel (hd0,3)/sidux3/vmlinuz-2.6.22.1-slh-smp-7 boot=fll quiet vga=791 fromiso=/sidux3/siduxgaia.iso
initrd (hd0,3)/sidux3/initrd.img-2.6.22.1-slh-smp-7

Von sekundärer Platte booten (z. B. mehrere Windows-Installationen)

Manche Leute brauchen/wollen mehrere Windows-Installationen. Windows will aber immer von der 1. Platte starten. Wir müssen also eine Partition verstecken und eine andere aktivieren. Die folgenden Befehle sollte man in der GRUB-Befehlszeile eingeben und bei Erfolg in die menu.lst eintragen. Das sollte dann für jede Windows-Partition geschehen. Backup nicht vergessen!

hide (hd0,0) # versteckt Partition 1 der Platte 1
unhide (hd0,1) # macht Partition 2 der Platte 1 sichtbar
rootnoverify (hd0,1) # macht Partition 2 der Platte 1 zum Root-FS 
makeactive # macht Partition 2 der Platte 1 aktiv
chainloader +1 # zeigt auf den ersten Sektor der Start-Partition
boot # bootet das Betriebssystem

Wenn man von Platte 2 ein zweites Windows starten will, vertauscht man virtuell Platte 1 und 2. Dadurch wird Windows eine erste Platte vorgetäuscht:

map (hd0) (hd1)
map (hd1) (hd0)

Stolperfallen

Grub kennt zwar keine 1024 Zylindergrenze und kann Systeme oberhalb von 1024 Zylindern booten, aber /boot/grub/stage2 muss durch das Bios erreichbar sein (also davor liegen). stage2 darf nach der Installation weder verschoben noch in seiner Lage verändert werden (z. B. könnte Defrag sowas versuchen). Die Setup-Daten würden nicht mehr stimmen. Es ist daher sinnvoll, stage2 mit einem Schreibschutz zu versehen (man muss sich im aktuellen Verzeichnis befinden):

Dos: attrib +r +s stage2
LINUX: # chmod a -w ./stage2

Wo kann man mehr erfahren?

Umfangreiche Informationen gibt es in der offiziellen FAQ zu Grub.

Sofern man eine unterstützte Netzwerkkarte besitzt, kann Grub auch über das Netzwerk booten. Eine entsprechende Boot-Disk kann man sich hier erstellen lassen und anschließend downloaden (allerdings mit einer älteren Version von Grub).

Content last revised 13/09/2008 1200 UTC