staging.inyokaproject.org

Grub2 nimmt OS nicht ins Menü auf

Status: Ungelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

kladm

Anmeldungsdatum:
27. April 2011

Beiträge: Zähle...

Im wiki zu grub 2 heißt es:

Grundsätzlich ist GRUB 2 von seinen Machern so konzipiert, dass es, sobald das Kommando update-grub bzw. grub-mkconfig ausgeführt wird, alle auf einem Computer installierten Betriebssysteme findet und automatisch in das Auswahlmenü aufnimmt.

So sieht das beim Ausführen von update-grub zunächst auch aus:

bernd@klserver:~# sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-30-generic-pae
Found initrd image: /boot/initrd.img-3.2.0-30-generic-pae
Found linux image: /boot/vmlinuz-3.2.0-29-generic-pae
Found initrd image: /boot/initrd.img-3.2.0-29-generic-pae
Found memtest86+ image: /memtest86+.bin
Found SUSE LINUX Enterprise Server 9 (i586) on /dev/sda3
Found Ubuntu 10.04.2 LTS (10.04) on /dev/sdc1
done

Neben der Neuinstallation von ubuntu 12.04 (auf /dev/sdd) findet er ein älteres 10.04 (auf /dev/sdc) und den derzeit noch immer produktiven alten SLES 9 (auf /dev/sda).

Im Auswahlmenü jedoch taucht zwar der 10.04-Server, nicht aber der SLES auf - ich würde ihn aber dort gerne als default haben, damit der Server bei unbeaufsichtigtem Start per WOL den SLES startet und der neue ubuntu 12.04 manuell ausgewählt werden muß, bis er fertig konfiguriert ist. Im Moment muß ich dafür immer ins BIOS und die Bootreihenfolge ändern.

Die Platte unter /dev/sda ist eine alte ATA-Platte (und wird vom SLES auch als /dev/hda erkannt).

Für Hilfe dankbar,

Bernd

Moderiert von tomtomtom:

Ins passende Forum verschoben. Bitte beachte die Themenstickies.

tomtomtom Team-Icon

Supporter
Avatar von tomtomtom

Anmeldungsdatum:
22. August 2008

Beiträge: 52312

Zeige bitte die Terminal-Ausgabe von

sudo fdisk -l 2>/dev/null | egrep "Disk /|/dev/" | sed "s#^/dev/#Part /dev/#" | awk '{print $2}' | sed 's/://' | xargs -n1 -IX sudo sh -c "hexdump -v -s 0x80 -n  2 -e '2/1 \"%x\" \"\\n\"' X | xargs -n1 -IY sh -c \"case  \"Y\" in '48b4') echo X: GRUB 2 v1.96 ;; 'aa75' | '5272') echo X: GRUB Legacy ;; '7c3c') echo X: GRUB 2 v1.97 oder v1.98 ;; '020') echo X: GRUB 2 v1.99 ;; *) echo X: Kein GRUB Y ;; esac\""

hier im Codeblock.

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

Bitte sehr:

/dev/sda: GRUB Legacy
/dev/sda1: Kein GRUB 00
/dev/sda2: Kein GRUB 00
/dev/sda3: Kein GRUB 00
/dev/sda4: Kein GRUB 00
/dev/sdc: GRUB 2 v1.97 oder v1.98
/dev/sdc1: Kein GRUB 00
/dev/sdc2: Kein GRUB 00
/dev/sdc3: Kein GRUB 00
/dev/sdc4: Kein GRUB 00
/dev/sdd: GRUB 2 v1.99
/dev/sdd1: Kein GRUB 00
/dev/sdd2: Kein GRUB 00
/dev/sdd3: Kein GRUB 00
/dev/sdd4: Kein GRUB 00
/dev/sdd5: Kein GRUB 00
/dev/sdd6: Kein GRUB 00
/dev/sdb: Kein GRUB bc81
/dev/sdb2: Kein GRUB 00

tomtomtom Team-Icon

Supporter
Avatar von tomtomtom

Anmeldungsdatum:
22. August 2008

Beiträge: 52312

Jede Menge GRUBs...

Die Vermutung liegt nahe, dass schlichtweg die Festplatte, von deraus du update-grub durchführst nicht die Festplatte ist, die im BIOS als erstes Bootmedium eingetragen ist.

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

Jede Menge GRUBs...

Nun ja, drei.

Die Vermutung liegt nahe, dass schlichtweg die Festplatte, von deraus du update-grub durchführst nicht die Festplatte ist, die im BIOS als erstes Bootmedium eingetragen ist.

Gewiß nicht - aber da der Grub-1 auf der ersten Platte mit "update-grub" gar nicht erst was anfangen könnte, werde ich, sobald ich dran komme, mal ausprobieren, was der grub2 aus der Lucid-Lynx-Version dazu sagt; von der Platte wird aber sicher bisher nicht gebootet.

bowman

Avatar von bowman

Anmeldungsdatum:
17. Februar 2010

Beiträge: 7502

bernd@klserver:~# sudo update-grub
Generating grub.cfg ...

Der grub-legacy auf sda hat auch keine grub.cfg, die generiert wird und auch keinen os-prober, der andere Programme finden und eintragen kann.

Du solltest dir darüber klar werden, welches System den grub regiert, mit dem du zu erst bootest.

Entweder du stellt die Festplatte um, von der gebootet werden soll oder du macht die Einträge manuell in die menu.lst deines grub-legacy auf sda. Dann musst du das allerdings bei jeden Kernel-Update von Lucid, Precise und Suse machen.

Es spricht also einiges dafür das unzustellen und mit Grub2 zu booten. Im Regiernden OS musst dann nur der update-grub durchgeführt werden, wenn es in einem anderen OS ein Kernel-Update gegebne hat.

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

OK, nochmal zur Erklärung:

Ich möchte gerne ausschließlich mit der 4. Festplatte booten, auf der jetzt Precise und grub2, v 1.99 installiert sind. Das soll auch künftig das einzige OS dieses Serversystems sein!

Vorübergehend hätte ich es aber gerne so, daß dieser grub2 v 1.99 standardmäßig von der 1. Festplatte den dort noch installierten SLES 9 bootet. Wenn das funktioniert, brauche ich den dort ebenfalls befindlichen grub1 nicht mehr; den auf Platte 3 noch existierenden grub2 v 1.97 sowieso nicht.

Nur leider klappt's ja nicht 😉

Und deswegen habe ich im BIOS erstmal wieder auf die Platte 1 (und den legacy grub) umgestellt.

(Bin aber seit tomtomtoms erster Antwort noch gar nicht wieder zum testen gekommen.)

bowman

Avatar von bowman

Anmeldungsdatum:
17. Februar 2010

Beiträge: 7502

Dann musst du in Precise eine GRUB 2/Konfiguration (Abschnitt „Skripte-in-etc-grub-d“) vornehmen.

Du erstellst in der /etc/grub.d ein Script 09_Suseboot (Name frei, wählbar Zahl muss zwischen 06 und 09 liegen) und kopierst dort die Bootbefehle für Suse aus dem os-prober der /boot/grub/grub.cfg rein. Dann macht du das Script ausführbar und danach ein sudo update-grub.

Das führt dazu, dass an der ersten Stelle im Grubmenü dein Suse-OS aufgeführt wird und wenn nichts anderes ausgewählt wird, bootet es automatisch. Allerdings nur, wenn von der Platte gebootet wird, auf welcher der Grub2 sitzt, der durch Precise regiert wird. 😉

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

Damit:

Du erstellst in der /etc/grub.d ein Script 09_Suseboot (Name frei, wählbar Zahl muss zwischen 06 und 09 liegen) und kopierst dort die Bootbefehle für Suse aus dem os-prober der /boot/grub/grub.cfg rein. Dann macht du das Script ausführbar und danach ein sudo update-grub.

hätte ich eine Antwort auf meine übernächste Frage, danke schon mal!

Dummerweise gibt es in der von Precise regierten /boot/grub/grub.cfg kein menuentry für Suse, obwohl (s.o.) der Befehl update-grub, der ja diese /boot/grub/grub.cfg schreibt, u.a. ein

Found SUSE LINUX Enterprise Server 9 (i586) on /dev/sda3

auswirft.

Das ist der Punkt, den ich nicht verstehe.

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

Ergänzung:

Der os-prober findet beide Betriebssysteme auf den anderen Platten:

bernd@klserver:~# sudo os-prober 
/dev/sda3:SUSE LINUX Enterprise Server 9 (i586):SuSE:linux
/dev/sdc1:Ubuntu 10.04.2 LTS (10.04):Ubuntu:linux

Mit dem Lucid Lynx auf Platte 3 weiß der linux-boot-prober auch was anzufangen:

bernd@klserver:~# sudo linux-boot-prober /dev/sdc1
/dev/sdc1:/dev/sdc1:Ubuntu, with Linux 2.6.32-28-generic-pae:/boot/vmlinuz-2.6.32-28-generic-pae:/boot/initrd.img-2.6.32-28-generic-pae:root=UUID=dd7bd6ad-c7b4-40eb-b88d-9928e7df02dd ro quiet

Aber offenbar nicht mit dem SLES auf Platte 1

bernd@klserver:~# sudo linux-boot-prober /dev/sda3
bernd@klserver:~#

Kann der linux-boot-prober überhaupt mit legacy grub?

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

Kann der linux-boot-prober überhaupt mit legacy grub?

Ja, wenn er an der richtigen Stelle sucht:

bernd@klserver:~# sudo linux-boot-prober /dev/sda2
/dev/sda2:/dev/sda2::/vmlinuz:/initrd:root=/dev/sda2
/dev/sda2:/dev/sda2::/vmlinuz:/initrd-2.6.5-7.97-smp:root=/dev/sda2
/dev/sda2:/dev/sda2::/vmlinuz:/initrd:root=/dev/sda2
/dev/sda2:/dev/sda2::/vmlinuz:/initrd-2.6.5-7.97-smp:root=/dev/sda2
/dev/sda2:/dev/sda2::/vmlinuz-2.6.5-7.97-smp:/initrd-2.6.5-7.97-smp:root=/dev/sda2
/dev/sda2:/dev/sda2::/vmlinux-2.6.5-7.97-smp.gz::root=/dev/sda2

Auf dem SLES-System liegen /boot und / auf getrennten Partitionen; damit kommt update-grub wohl nicht klar. Wie bringe ich ihn dazu?

bowman

Avatar von bowman

Anmeldungsdatum:
17. Februar 2010

Beiträge: 7502

Wie man Grub2 mit Scripten konfiguriert, steht unter GRUB 2/Skripte. Da sind auch einige Beispiel-Scripte, wie man bei bestimmten Fällen vorgeht.

Dein Fall ist für mich neu. So eine Konstellation hatte ich bisher noch nicht. Wenn Suse keine separate /boot hätte, wäre es wahrscheinlich einfacher.

Allerdings ist es ja ein Linux-OS, so dass du das Kernel-Image auf der / direkt ansprechen können solltest. Siehe Beispiel GRUB 2/Skripte (Abschnitt „Kernel-Images“)#Kernel-Images. Wahrscheinlich müsstest du aber bei jedem neuen Kernel den Suse bekommt den Eintrag anpassen.

Es gibt aber auch noch Symlinks siehe GRUB 2/Skripte (Abschnitt „Symlink-zum-Wurzelverzeichnis“)#Symlink zum Wurzelverzeichnis die man anwenden kann. Da bin ich aber leider planlos, wie man das wo einträgt. Sorry. 😕 Vllt bis du da je etwas fitter. ☺

Ich bin leider kein Programmierer. 🐸 Scripte hab ich bisher nur durch Abwandlung von Vorlagen gemacht. Die dann meisten auch funktioniert haben. 😀

Vllt hilft dir das ja trotzdem weiter. 😬

kladm

(Themenstarter)

Anmeldungsdatum:
27. April 2011

Beiträge: 17

Wenn ich unter Precise die Suse-Root-Partition nach /mnt mounte und anschließend die Suse-Boot-Partition nach /mnt/boot, findet update-grub die ganze Sache gleich viel interessanter 😉

Anschließend finden sich gleich sechs menuentries in grub.cfg - leider führt keiner davon zum Booten vom SLES 👿 Die ersten fünf initiieren einen sofortigen reboot, der sechste meldet

error: file not found
kernel must be loaded first

oder so ähnlich. Ich vermute, die ungewöhnliche Konstellation mit zwei ziemlich alten ATA-Platten und zwei neuen SATA-Platten, die von den verschiedenen OS auch noch unter unterschiedlichen devices angesprochen werden, führt dazu. Die Sache ist nicht so wichtig, daß ich sie unbedingt hinkriegen müsste! Der Anreiz steigt, den neuen Precise-Server endlich fertig zu machen und den Uralt-SLES (neue kernels kriegt der schon laaange nicht mehr...) endlich abzulösen!

Deine Beiträge haben mir jedenfalls sehr geholfen, danke - zumindest kriege ich jetzt so langsam eine Ahnung, wie grub2 funktioniert 😀

black_tencate

Avatar von black_tencate

Anmeldungsdatum:
27. März 2007

Beiträge: 10674

Hej bowman,

bowman schrieb:

... Wenn Suse keine separate /boot hätte, wäre es wahrscheinlich einfacher.

ich flechte nur mal kurz ein:

  • habe auch ein Linux (8.04) mit getrennter "/boot" Partition (allerdings ist bei mir alles auf einer Platte)

  • blacktencate@tmh4440ll:~$ sudo /etc/grub.d/x/30_os-prober
    [sudo] password for blacktencate: 
    Found Windows Vista (loader) on /dev/sda1
    menuentry "Windows Vista (loader) (on /dev/sda1)" {
    	insmod ntfs
    	set root='(hd0,1)'
    	search --no-floppy --fs-uuid --set 1E24426D2442484B
    	chainloader +1
    }
    Found Ubuntu 10.04.4 LTS (10.04) on /dev/sda14
    menuentry "Ubuntu, mit Linux 2.6.32-40-generic (on /dev/sda14)" {
    	insmod ext2
    	set root='(hd0,14)'
    	search --no-floppy --fs-uuid --set 1542eafc-dbd2-42e8-8d20-5068300c86d0
    	linux /boot/vmlinuz-2.6.32-40-generic root=UUID=1542eafc-dbd2-42e8-8d20-5068300c86d0 ro noplymouth
    	initrd /boot/initrd.img-2.6.32-40-generic
    }
    menuentry "Ubuntu, mit Linux 2.6.32-40-generic (Wiederherstellungsmodus) (on /dev/sda14)" {
    	insmod ext2
    	set root='(hd0,14)'
    	search --no-floppy --fs-uuid --set 1542eafc-dbd2-42e8-8d20-5068300c86d0
    	linux /boot/vmlinuz-2.6.32-40-generic root=UUID=1542eafc-dbd2-42e8-8d20-5068300c86d0 ro single
    	initrd /boot/initrd.img-2.6.32-40-generic
    }
    menuentry "Ubuntu, mit Linux 2.6.32-38-generic (on /dev/sda14)" {
    	insmod ext2
    	set root='(hd0,14)'
    	search --no-floppy --fs-uuid --set 1542eafc-dbd2-42e8-8d20-5068300c86d0
    	linux /boot/vmlinuz-2.6.32-38-generic root=UUID=1542eafc-dbd2-42e8-8d20-5068300c86d0 ro noplymouth
    	initrd /boot/initrd.img-2.6.32-38-generic
    }
    menuentry "Ubuntu, mit Linux 2.6.32-38-generic (Wiederherstellungsmodus) (on /dev/sda14)" {
    	insmod ext2
    	set root='(hd0,14)'
    	search --no-floppy --fs-uuid --set 1542eafc-dbd2-42e8-8d20-5068300c86d0
    	linux /boot/vmlinuz-2.6.32-38-generic root=UUID=1542eafc-dbd2-42e8-8d20-5068300c86d0 ro single
    	initrd /boot/initrd.img-2.6.32-38-generic
    }
    menuentry "Ubuntu, mit Linux 2.6.32-37-generic (on /dev/sda14)" {
    	insmod ext2
    	set root='(hd0,14)'
    	search --no-floppy --fs-uuid --set 1542eafc-dbd2-42e8-8d20-5068300c86d0
    	linux /boot/vmlinuz-2.6.32-37-generic root=UUID=1542eafc-dbd2-42e8-8d20-5068300c86d0 ro noplymouth
    	initrd /boot/initrd.img-2.6.32-37-generic
    }
    menuentry "Ubuntu, mit Linux 2.6.32-37-generic (Wiederherstellungsmodus) (on /dev/sda14)" {
    	insmod ext2
    	set root='(hd0,14)'
    	search --no-floppy --fs-uuid --set 1542eafc-dbd2-42e8-8d20-5068300c86d0
    	linux /boot/vmlinuz-2.6.32-37-generic root=UUID=1542eafc-dbd2-42e8-8d20-5068300c86d0 ro single
    	initrd /boot/initrd.img-2.6.32-37-generic
    }
    Found Windows Vista (loader) on /dev/sda2
    menuentry "Windows Vista (loader) (on /dev/sda2)" {
    	insmod ntfs
    	set root='(hd0,2)'
    	search --no-floppy --fs-uuid --set B2C01BA3C01B6D3B
    	chainloader +1
    }
    Found Ubuntu 8.04.4 LTS (8.04) on /dev/sda8
    menuentry "Ubuntu 8.04.3 LTS, kernel 2.6.24-23-generic (on /dev/sda8)" {
    	insmod ext2
    	set root='(hd0,5)'
    	search --no-floppy --fs-uuid --set d66545b4-1d8c-4713-bbea-2e24909c8545
    	linux /vmlinuz-2.6.24-23-generic root=UUID=9ef5c427-e86d-4f81-97f9-c5d8e52b8e8c ro quiet splash
    	initrd /initrd.img-2.6.24-23-generic
    }
    menuentry "Ubuntu 8.04.3 LTS, kernel 2.6.24-23-generic (recovery mode) (on /dev/sda8)" {
    	insmod ext2
    	set root='(hd0,5)'
    	search --no-floppy --fs-uuid --set d66545b4-1d8c-4713-bbea-2e24909c8545
    	linux /vmlinuz-2.6.24-23-generic root=UUID=9ef5c427-e86d-4f81-97f9-c5d8e52b8e8c ro single
    	initrd /initrd.img-2.6.24-23-generic
    }
    menuentry "Ubuntu 8.04.3 LTS, kernel 2.6.24-19-generic (on /dev/sda8)" {
    	insmod ext2
    	set root='(hd0,5)'
    	search --no-floppy --fs-uuid --set d66545b4-1d8c-4713-bbea-2e24909c8545
    	linux /vmlinuz-2.6.24-19-generic root=UUID=9ef5c427-e86d-4f81-97f9-c5d8e52b8e8c ro quiet splash
    	initrd /initrd.img-2.6.24-19-generic
    }
    menuentry "Ubuntu 8.04.3 LTS, kernel 2.6.24-19-generic (recovery mode) (on /dev/sda8)" {
    	insmod ext2
    	set root='(hd0,5)'
    	search --no-floppy --fs-uuid --set d66545b4-1d8c-4713-bbea-2e24909c8545
    	linux /vmlinuz-2.6.24-19-generic root=UUID=9ef5c427-e86d-4f81-97f9-c5d8e52b8e8c ro single
    	initrd /initrd.img-2.6.24-19-generic
    }
    menuentry "Ubuntu 8.04.3 LTS, memtest86+ (on /dev/sda8)" {
    	insmod ext2
    	set root='(hd0,5)'
    	search --no-floppy --fs-uuid --set d66545b4-1d8c-4713-bbea-2e24909c8545
    	linux /memtest86+.bin 
    }

    es werden alle O/S gefunden, wenn auch XP mit "Windows Vista (loader) (on /dev/sda2)" bezeichnet wird, aber Probleme mit separater "/boot" hat grub_2 jedenfalls nicht.

Gruß black tencate

EDIT.:

... Da bin ich aber leider planlos, wie man das wo einträgt.

geht ganz einfach, s. hier

Antworten |