Linux 15.036 Themen, 107.107 Beiträge

Woher stammen die eintragungen aus der menu.lst?

robinx99 / 10 Antworten / Baumansicht Nickles

Hi,
ich habe ein debian testing auf einem USB stick installiert, es funktioniert auch so ganz gut. Ich verwende eine selbstkompilierten kernel. So nun zu meinem problem:
Nachdem ich einen kernel installiere wird in der menu.lst von grub der eintrag root=/dev/sda2 gesetzt. Das ist dummerweise falsch, denn es müßte /dev/sdb2 sein, da /dev/sda die interne festplatte ist. Und eigentlich will ich da auch ein "root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62" stehen haben (so dass es auch funktioniert wenn es mal /dev/sdc ist weil z.B.: noch ein usb stick steckt, oder ich an einem rechner mit 2 internen festplatten boote). Bis jetzt korrigiere ich es per hand nach jedem neu eingespieltem kernel, doch es muß doch auch irgendwie möglich sein es debian klar zu machen dass dort immer dass "by-uuid" verwendet wird anstatt direkt dass device, oder?

robinx99

bei Antwort benachrichtigen
KarstenW robinx99 „Woher stammen die eintragungen aus der menu.lst?“
Optionen

Geh mal in die Datei /boot/grub/menu.lst rein und ließ mal was da steht:


cat /boot/grub/menu.lst

....

Nicht auskommentieren, editiere es so wie du es brauchst

# 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
## deine /boot Partition ( ist gleich / wenn /boot nur ein Unterverzeichnis ist)
# kopt=root=/dev/sda7 ro vga=771

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

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

## 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

## should update-grub add savedefault to the default options
## can be true or false
# savedefault=true


Die Datei /boot/grub/menu.lst wird automatisch vom Script update-grub aktualisiert. Einfach update-grub als root im Terminal eingeben. Vorher mußt du aber noch die Kerneloptionen oben anpassen .

update-grub sucht in /boot nach Kerneldateien die mit vmlinuz beginnen. Also wenn du einen eigenen Kernel übersetzt, dann benenne ihn mit vmlinuz am Anfang und als Suffix eventuell noch die Versionsnummer und die Prozessorarchitektur. Beispiel:

ls -l /boot/

insgesamt 22136
-rw-r--r-- 1 root root 85588 27. Jul 00:44 config-2.6.26-2-amd64
drwxr-xr-x 2 root root 4096 29. Jul 19:23 grub
-rw-r--r-- 1 root root 7770768 29. Jul 19:23 initrd.img-2.6.26-2-amd64
-rw-r--r-- 1 root root 7770057 12. Apr 13:07 initrd.img-2.6.26-2-amd64.bak
-rw-r--r-- 1 root root 103212 25. Mär 2008 memtest86.bin
-rw-r--r-- 1 root root 124152 8. Okt 2008 memtest86+.bin
-rw-r--r-- 1 root root 1180135 28. Jun 16:45 System.map-2.6.26-17-AMD64
-rw-r--r-- 1 root root 1225358 27. Jul 00:44 System.map-2.6.26-2-amd64
-rw-r--r-- 1 root root 2573392 28. Jun 16:45 vmlinuz-2.6.26-17-AMD64
-rw-r--r-- 1 root root 1754800 27. Jul 00:44 vmlinuz-2.6.26-2-amd64


Momentan werden bei Debian nur die Gerätedateien unterstützt. Mir ist jedenfalls nicht anderes bekannt.
Das Problem liegt aber nicht bei Debian, sondern bei grub. Ließ mal das Grub Handbuch durch:

http://www.gnu.org/software/grub/manual/

Wenn du willst das deine USB Festplatte oder der USB Stick eine bestimmte Gerätedatei bekommt, dann kannst du eine eigene udev Regel aufstellen. Das ist im Ubuntu Wiki ganz einfach erklärt und es wird auch unter Debian so gemacht.

http://wiki.ubuntuusers.de/udev?highlight=udev

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
gelöscht_23570 KarstenW „Geh mal in die Datei /boot/grub/menu.lst rein und ließ mal was da steht: cat...“
Optionen

Danke, da war auch für mich einiges dabei.

Gruß Alois

bei Antwort benachrichtigen
robinx99 KarstenW „Geh mal in die Datei /boot/grub/menu.lst rein und ließ mal was da steht: cat...“
Optionen

die datei ist ja gerade mein problem
so hier mal der relevante paste (den ganzen default kram lasse aus übersichtsgründen mal weg ist ja eh auskomentiert) so funktioniert es (wobei es bei ubuntu auch so ähnlich aussieht):
## ## End Default Options ##

title Debian GNU/Linux, kernel 2.6.30.3-robin-x1
root (hd0,0)
kernel /vmlinuz-2.6.30.3-robin-x1 root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62 ro quiet
initrd /initrd.img-2.6.30.3-robin-x1

title Debian GNU/Linux, kernel 2.6.30.3-robin-x1 (single-user mode)
root (hd0,0)
kernel /vmlinuz-2.6.30.3-robin-x1 root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62 ro single
initrd /initrd.img-2.6.30.3-robin-x1

title Debian GNU/Linux, kernel 2.6.30-robin-test
root (hd0,0)
kernel /vmlinuz-2.6.30-robin-test root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62 ro quiet
initrd /initrd.img-2.6.30-robin-test

title Debian GNU/Linux, kernel 2.6.30-robin-test (single-user mode)
root (hd0,0)
kernel /vmlinuz-2.6.30-robin-test root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62 ro single
initrd /initrd.img-2.6.30-robin-test

### END DEBIAN AUTOMAGIC KERNELS LIST

und so sieht es nach dem aufruf von update-grub aus wurde aufgerufen von der installation des kernel packages (make-kpkg --initrd kernel_image kernel_headers und anschließend mit dpgk -i *.deb installiert)

## ## End Default Options ##

title Debian GNU/Linux, kernel 2.6.30.3-robin-x1
root (hd0,0)
kernel /vmlinuz-2.6.30.3-robin-x1 root=/dev/sda2 ro quiet
initrd /initrd.img-2.6.30.3-robin-x1

title Debian GNU/Linux, kernel 2.6.30.3-robin-x1 (single-user mode)
root (hd0,0)
kernel /vmlinuz-2.6.30.3-robin-x1 root=/dev/sda2 ro single
initrd /initrd.img-2.6.30.3-robin-x1

title Debian GNU/Linux, kernel 2.6.30-robin-test
root (hd0,0)
kernel /vmlinuz-2.6.30-robin-test root=/dev/sda2 ro quiet
initrd /initrd.img-2.6.30-robin-test

title Debian GNU/Linux, kernel 2.6.30-robin-test (single-user mode)
root (hd0,0)
kernel /vmlinuz-2.6.30-robin-test root=/dev/sda2 ro single
initrd /initrd.img-2.6.30-robin-test

### END DEBIAN AUTOMAGIC KERNELS LIST

nur nach jedem installieren eines kernel meint das update-grub script es müsse überall meinen root eintrag ändern und irgendwie passt mir dass nicht so ganz

robinx99

Edit: da der rest doch wichtig war so sieht es vor den einzelnen zeilen aus

### 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=/dev/sda2 ro

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

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

## 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=quiet

## 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

## should update-grub add savedefault to the default options
## can be true or false
# savedefault=false

und damit sehe ich auch das problem
die zeile muß durch die uuid ersetzt werden
# kopt=root=/dev/sda2 ro


bei Antwort benachrichtigen
KarstenW robinx99 „die datei ist ja gerade mein problem so hier mal der relevante paste den ganzen...“
Optionen

"und damit sehe ich auch das problem
die zeile muß durch die uuid ersetzt werden
# kopt=root=/dev/sda2 ro"

Du kannst diese Zeile editieren und in

# kopt=root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62 ro

ändern

Ich nutze keine UUIDs . Du mußt das ausprobieren.
Du mußt eben die entsprechende UUID angeben.


Und danach udate-grub in der Konsole starten.


PS: Das steht doch auch am Anfang da:

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

Du sollst die Zeilen die mit nur einem # Zeichen anfangen nicht auskommentieren , sondern nur so editieren wie du es brauchst.
Normalerwiese ist das # Zeichen das Kommentarzeichen in einer Konfigurationsdatei bei Linux, aber hier nicht.



Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
robinx99 KarstenW „ und damit sehe ich auch das problem die zeile muß durch die uuid ersetzt...“
Optionen

Genau mit der änderung macht er dass was er soll.
Mir ist erst sehr spät klar geworden was da gemacht wurde. Alles was mit einer "#" beginnt ist ein kommentar und wird von grub nicht ausgewertet, aber wenn nur eine "#" da ist wird es an den stellen von update grub ausgewertet und ich hatte erst vermutet die option versteckt sich irgendwo in /etc/ und ich bin nur zu blind sie zu sehen.

Wobei ich UUID im falle von bootbaren USB sticks eigentlich für die sauberste lösung halte, da brauche ich mir keine gedanken darüber machen welches device sie bei unterschiedlichen rechnern bekommen. Klar Udev regeln ginge vermutlich auch, wobei man dann natürlich aufpassen muß dass alles im initrd ist, denn sonst würde es ja nicht funktionieren, weil /etc/udev/rules.d befindet sich ja gerade in dem root dateisystem dass überhaupt erst gemountet werden soll.

robinx

bei Antwort benachrichtigen
KarstenW robinx99 „Genau mit der änderung macht er dass was er soll. Mir ist erst sehr spät klar...“
Optionen

Ich habe schon gehört das bei Ubuntu die UUIDs genutzt werden . Mir ist noch gar nicht in den Sinn gekommen die Gerätedateien durch UUIDs zu ersetzen.

Ich nehme mal an das in der Datei /boot/grub/menu.lst Makros definiert werden können.
Das ist vielleicht wie bei C , wo man ein Makro durch "# define" kennzeichnet und der Präprozessor den String überall einsetzt , wo das Makro geschrieben wurde.



Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Borlander robinx99 „Genau mit der änderung macht er dass was er soll. Mir ist erst sehr spät klar...“
Optionen
UUID im falle von bootbaren USB sticks eigentlich für die sauberste lösung halte
UUIDs sind meiner Erfahrung nach immer und in jedem Fall die zu bevorzugende Lösung. Auf die klassischen Gerätenamen ist kein Verlass, die können sich nach jedem Neustart ändern.

Übliche Notation für UUIDs in menu.lst schaut übrigens so aus:
root=UUID=xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbb


Gruß
Borlander
bei Antwort benachrichtigen
robinx99 Borlander „ UUIDs sind meiner Erfahrung nach immer und in jedem Fall die zu bevorzugende...“
Optionen

Hi,
hat diese notation root=/dev/disk/by-uuid/6e653f6a-fdab-46a5-b1ac-57b509684f62 nachteile gegenüber root=UUID=6e653f6a-fdab-46a5-b1ac-57b509684f62 oder ist es einfach nur nicht so ganz standard?

robinx99

bei Antwort benachrichtigen
Borlander robinx99 „Hi, hat diese notation root...“
Optionen

Also ich hab die Pfadangabe bislang noch nie gesehen. Bei der Varinte UUID= gehe ich allerdings davon aus, daß diese unabhängig von der Existienz der Symlinks in /dev/disk/by-uuid/ funktioniert.

Gruß
Borlander

bei Antwort benachrichtigen
robinx99 Borlander „Also ich hab die Pfadangabe bislang noch nie gesehen. Bei der Varinte UUID gehe...“
Optionen

Hier http://wiki.archlinux.org/index.php/Persistent_block_device_naming
wird der zugriff auf /dev/disk/by-uuid bzw. /dev/disk/by-label mehr oder weniger als standard bezeichnet und der weg UUID= bzw. LABEL= als alternative, aber anscheinend funktioniert beides problemlos

robinx99

bei Antwort benachrichtigen