Hallo,
hier moechte ich ein Problem mit grub beim Installieren von ArchLinux 7 und auch meine Loesung beschreiben.
Arch 7 installiert. Dabei die Platte neu partitioniert, Mountpoints gesetzt und auch den Bootmanager grub installiert. Beim Neustart bleibt grub stehen.
Arch war nun nicht gerade meine erste Linuxinstallation. Bis zum Moment des Neustarts war ich mir ziehmlich sicher ob der Richtigkeit all der Dinge, die ich bei der Installation durchgefuehrt habe. Ist bei Arch ja auch nicht weiter schwierig oder verworren oder komplex.
Also ich die Installation nochmal und diesmal mit Argusaugen auf das was ich waehrend der Installation mache. Ergebnis.
Beim Neustart bleibt grub wieder stehen.
Nun war mir bei der Installation doch etwas aufgefallen, dem ich aber zunaechst keine weitere Beachtung schenkte. Dachte, der Installer arbeitet schon korrekt. Aber genau das ist nicht der Fall.
Folgendes viel mir auf:
Beim partitionieren der Platte wurde mir die Platte nicht mit /dev/hdd1 usw. sondern mit /dev/discs/disc0/part1 usw. angezeigt.
Also ich starte eine erneute Installation. Da meine fuer die Installation ausgewaehlte Platte am sekundaeren Slave klemmt muss sie sich also im System mit hdd melden. Der 4. Buchstabe a, b, c, d.
1. Platte: Primaer Master - hda
2. Platte: Primaer Slave - hdb
3. Platte: Sekundaer Master - hdc
4. Platte: Sekundaer Slave - hdd
Also pruefe ich mit
ls -l /mnt/dev/hdd
ob hdd dem System bekannt ist. Ergebnis: der Installer kennt kein /dev/hdd
Meine Platte (3 Partitionen) war unter
/mnt/dev/discs/disc0/disc - hdd
/mnt/dev/discs/disc0/part1 - hdd1
/mnt/dev/discs/disc0/part2 - hdd2
/mnt/dev/discs/disc0/part3 - hdd3
zu finden.
Andere Distris setzen an dieser Stelle schon symbolische Links. Arch 7 aber Nicht. <- DAS IST DER BUG, Teil 1
Nun ist es aber so, dass grub mit der Syntax hdx arbeitet und der Arch-Installer grub auch so konfiguriert.
Beim Start des Rechners kann von grub also keine Partition gefunden werden.
Um das /dev - Problem waehrend der Installation zu loesen habe ich einfach die Links selbst erzeugt.
ln -s /mnt/dev/discs/disc0/disc /mnt/dev/hdd
ln -s /mnt/dev/discs/disc0/part1 /mnt/dev/hdd1
ln -s /mnt/dev/discs/disc0/part2 /mnt/dev/hdd2
ln -s /mnt/dev/discs/disc0/part3 /mnt/dev/hdd3
Wichtig ist, dass man waehrend der Installation die Links mit /mnt erzeugt!
Damit bestehen im System die von grub benoetigten Verzeichnisse in der /dev/hdx - Syntax.
Es geht aber noch weiter mit dem Bug. Damit grub funktioniert benoetigt er sogenannte stage - Dateien. Diese Dateien sollten sich in /boot/grub befinden. Das ist aber nicht der Fall. <- DAS IST DER BUG, Teil 2
Also sucht man diese stage - Dateien mit
find /mnt/ -name "*stage*"
Als Suchergebnis habe ich folgendes erhalten:
/mnt/usr/lib/grub/i386-pc/e2fs_stage1_5
/mnt/usr/lib/grub/i386-pc/stage2_eltorito
/mnt/usr/lib/grub/i386-pc/ufs2_stage1_5
/mnt/usr/lib/grub/i386-pc/iso9660_stage1_5
/mnt/usr/lib/grub/i386-pc/jfs_stage1_5
/mnt/usr/lib/grub/i386-pc/xfs_stage1_5
/mnt/usr/lib/grub/i386-pc/minix_stage1_5
/mnt/usr/lib/grub/i386-pc/fat_stage1_5
/mnt/usr/lib/grub/i386-pc/vstafs_stage1_5
/mnt/usr/lib/grub/i386-pc/stage1
/mnt/usr/lib/grub/i386-pc/stage2
/mnt/usr/lib/grub/i386-pc/reiserfs_stage1_5
/mnt/usr/lib/grub/i386-pc/ffs_stage1_5
Na Klasse, wieso liegen diese Datei nicht in /mnt/boot/grub ?
Also habe ich die wichtigsten dahin kopiert.
cp /mnt/usr/lib/grub/i386-pc/e2fs_stage1_5 /mnt/boot/grub
cp /mnt/usr/lib/grub/i386-pc/stage2_eltorito /mnt/boot/grub
. . .
usw.
Habe irgendwo bei google mal gelesen, dass man eigentlich nur die stage1 und stage2 braucht. Naja, habe sie alle kopiert.
Nun sehe ich mir die Konfigdatei von grub an und entdecke eine Ungereimtheit.
title Arch Linux [/boot/vmlinuz26]
root (hd0,0)
kernel /vmlinuz26 root=/dev/discs/disc0/part3 ro
Die Ungereimtheit ist die Zeile mit dem Eintrag root (hd0,0)
Das wird so nicht funktionieren (kann aber) und ist etwas unflexibel, will mann eventuell noch weitere Systeme auf anderen Platten zum booten konfigurieren.
Um es also besser zu machen verwende ich die Zeile mit dem Eintrag root (hd0,0) NICHT.
Damit es aber funktiniert muss ich nun eine Datei erstellen, die von grub verwendet wird, um die Devices zu identifizieren. Es ist eine Datei mit dem Namen "device.map". Diese Datei muss sich in /boot/grub befinden und enthaelt als Eintrag die Zuordnungen der Devices. Die Datei "device.map" ist neben "menu.lst" eine Konfigurationsdatei von grub. Also die Datei erzeugen:
touch /mnt/boot/grub/device.map
Nun habe ich in dieser Datei mein /dev/hdd eingetragen. Da ich nur ein System von einer Platte zum booten verwenden will enthaelt meine device.map auch nur eine Zeile.
(hd0) /dev/hdd
Ich habe also /dev/hdd hd0 zugeordnet. Nun kann ich hd0 bei der Konfiguration von grub verwenden. Beispiel meiner menu.lst
title Arch Linux [/boot/vmlinuz26]
#root (hd0,0)
#kernel /vmlinuz26 root=/dev/discs/disc0/part3 ro
kernel (hd0,0)/vmlinuz26 root=/dev/hdd3
Wichtig: grub faengt bei 0 an zu zaehlen. Also ist hd0,0 meine hdd1
Und hdd1, also hd0,0 ist /boot
Da sich der Kernel in /boot befindet muss die Zeile mit dem Kernel
kernel (hd0,0)/vmlinuz26 root=/dev/hdd3
heissen !
Der Eintrag mit einer initrd muss sich auch auf hd0 beziehen und koennte so aussehen:
initrd (hd0,0)/meine-initrd.img
Ich fasse noch mal kurz zusammen. Den Eintrag root (hd0,0) verwende ich nicht. Dafuer habe ich die Datei device.map angelegt und konfiguriert.
Jetzt kommt noch etwas Ganz Wichtiges.
Das habe ich zunaechst nicht beachtet und hatte Probleme beim booten. Die /boot - Partition sollte einen Fehler im Dateisystem oder dem Superblock haben. Ist aber Quatsch.
Ursache war, ich hatte vergessen die "fstab" entsprechend zu konfigurieren.
So wurden meine 3 Partitionen vom Installer eingetragen:
/dev/discs/disc0/part1 /boot reiserfs noatime 0 0
/dev/discs/disc0/part2 swap swap defaults 0 0
/dev/discs/disc0/part3 / reiserfs noatime 0 0
Ich dachte erst, das das so ok ist und es ausreicht, grub auf die /dev -Syntax zu konfigurieren. War aber ein Irrtum.
Linux kommt offensichtlich beim booten mit der Bezeichnung der Devices in "gemischter Form" nicht klar. Meine /boot - Partition wurde zwar gelesen aber nicht gemountet. Bei /root gab es keine Probleme.
Ich habe meine /etc/fstab wie folgt geaendert:
#/dev/discs/disc0/part1 /boot reiserfs defaults 0 0
#/dev/discs/disc0/part2 swap swap defaults 0 0
#/dev/discs/disc0/part3 / reiserfs defaults 0 0
/dev/hdd1 /boot reiserfs noatime 0 0
/dev/hdd2 swap swap defaults 0 0
/dev/hdd3 / reiserfs noatime 0 0
Damit gibt es keine Probleme mehr beim booten.
Die beiden Aenderungen mit noatime habe ich in eigener Entscheidung gemacht. Ein defaults ist auch ok.
Wer sich mal die Muehe macht, die Datei /var/log/messages.log zu lesen wird folgendes feststellen:
Auch Devices, bei denen man bei der Installation keine Links erzeugt hat melden sich beim booten mit der /dev - Syntax. Z. Bsp. bei mir /dev/hda und /dev/hdb als Brenner und CDROM sowie noch zwei weitere Platten mit /dev/hde und /dev/hdg (ein onbord-Raid).
Wurde man auf /dev/hde ein Windows liegen hat bekommt die device.map noch eine weitere Zuordnung als Eintrag. z. Bsp.:
(hd1) /dev/hde
Und die menu.lst haette dann einen Eintrag in dieser Form:
title Windoof
root (hd1,1)
chainloader +1
In diesem Beispiel befindet sich C von Windows auf /dev/hde2. (grub faengt bei 0 an zu zaehlen)
Ein
fdisk /dev/hde
ergibt mit p z. Bsp.:
Gerät boot. Anfang Ende Blöcke Id System
/dev/hde1 1 13 104391 83 Dell Utility
/dev/hde2 * 14 1288 10241437+ 7 HPFS/NTFS
Soweit meine Erfahrung mit Arch und grub.
Gruss quiptime