View previous topic :: View next topic |
Author |
Message |
Christoph Schnauß Guru
Joined: 17 Dec 2004 Posts: 553 Location: Berlin
|
Posted: Sat Feb 09, 2013 9:55 pm Post subject: bootfähigen USB-Stick mit Gentoo erstellen |
|
|
guten Abend,
Ich bin dabei, mir einen bootfähigen USB-Stick einzurichten. Das Ding hat immerhin 64 GB, das reicht. Ich dachte mir, es sollte doch ausreichen, GRUB auf dem Stick zu installieren einschließlich eines Grundsystems, also einschließlich X-Server. Grundsätzlich macht er das auch mit, ich kriege mein gewohntes Auswahlmenü beim Booten von GRUB angezeigt und kann das auf der ersten Platte vorhandene Windows7 booten. Mit Gentoo auf dem Stick gibts aber Probleme. Da startet der Kernel zwar brav und zeigt mir erstmal die Pinguine, bricht dann aber mit einer Panikmeldung ab. Das liegt vermutlich _nicht_ am Kernel, sondern an GRUB, weil es mir nicht gelingt, in der grub.conf das korrekte root-Device anzusprechen. /dev/sdc1 wird nicht gefunden.
Wenn ich mit der miniinstall-CD boote, zeigt mir fdisk -l die vorhandenen Partitionen der ersten Platte (/dev/sda) an, auf der zweiten Platte (/dev/sdb) gibt es derzeit nur eine Partition ohne Dateisystem (vorgesehen ist ext4), und mein Stick wird als /dev/sdc angezeigt, /dev/sdc1 ist eine primäre und mit ext4 formatierte Partition, auf der ein Gentoo-System liegt, /dev/sdc2 ist eine FAT32-Partition. Alles ganz prima, In einer gechrooteten Umgebung kann ich meinem Stick mit emerge bedienen und installieren, was ich zu brauchen glaube. Ich kann auch bei Bedarf den X-server hochfahren.
Nur: wenn ich jetzt _nicht_ über die CD booten, sondern den Stick selbst benutzen möchte, findet er (also GRUB) die Partition auf dem Stick nicht. Das hat offenbar damit zu tun, daß ein Booten vom Stick aus die Reihenfolge der Devices ändert (ich kanns mir nicht anders erklären). Für GRUB sollte hd0 laut device.map eigentlich /dev/sda sein, hd1 dann /dev/sdb und hd2 mein /dev/sdc, also mein Stick. Das stimmt aber nur, wenn ich von der CD boote. Der Stick selber verändert das Startdevice offenbar zu hd0 (statt hd2), was sich daran erkennen läßt, daß ich mit Code: | splashimage=(hd0,0)/boot/grub/splash.xpm.gz | den Hintergrund für das Bootmenü dargestellt bekomme und daß ich mein Windows, das ja real auf /dev/sda1 liegt, mit Code: | rootnoverify (hd1,0) | ansprechen muß. Das heißt: Der Bootmanager, der ja auf meinem Stick liegt (und nicht im MBR einer Platte) kann seine Konfiguration auslesen und befolgen und wenn gewünscht auf die Systeminstallation einer Platte umschalten. Nur die Systeminstallation auf dem Stick selber findet er nicht, egal was ich nun anzugeben versuche.
Hat jemand eine Lösung? |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5165
|
Posted: Sat Feb 09, 2013 11:14 pm Post subject: |
|
|
nein das ist kein grub problem, sondern liegt daran, dass die initialisierung des USB stacks zu lange braucht, bis dieser den USB-Stick erkennt. Und dadurch findet der kernel das root device nicht und panics
Man kann beim kernel aber einen boot parameter angeben, mit dem man dem kernel eine wartezeit mitgeben kann, bevor dieser versucht das root device zu mounten.
Und zusätzlich solltest du, wenn du vorhast dein "USB Gentoo" auch auf anderen rechnern zu starten, eine initrd/initramfs erstellen, welches das mounten des root device per UUID (des Filesystems) oder per LABEL unterstützt. _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
Christoph Schnauß Guru
Joined: 17 Dec 2004 Posts: 553 Location: Berlin
|
Posted: Sun Feb 10, 2013 1:31 am Post subject: |
|
|
danke erstmal,
firefly wrote: | das ... liegt daran, dass die initialisierung des USB stacks zu lange braucht, bis dieser den USB-Stick erkennt. Und dadurch findet der kernel das root device nicht und panics :) |
Klingt plausibel
firefly wrote: | Man kann beim kernel aber einen boot parameter angeben, mit dem man dem kernel eine wartezeit mitgeben kann, bevor dieser versucht das root device zu mounten. |
öhm ... und wie mache ich das? In der grub.conf was reinschreiben? 3 Sekunden müßten reichen, aber ich weiß nicht genau, wie.
firefly wrote: | Und zusätzlich solltest du, wenn du vorhast dein "USB Gentoo" auch auf anderen rechnern zu starten, eine initrd/initramfs erstellen, welches das mounten des root device per UUID (des Filesystems) oder per LABEL unterstützt. |
Ohje. Hab ich natürlich nicht, bisher kam ich bei fest installierten Systemen immer ohne initramfs aus. Das Handbuch gibt auch nur an, daß man sowas mit genkernel machen kann, ich habe genkernel aber ignoriert, muß/will ja meinen Kernel selber bauen. Und eine verständliche Anleitung, wie das geht, ist mir nicht bekannt.
Allerdings: wie oben bereits angegeben, zeigt mir bei gebooteter miniinstall-CD ein einfaches meine zwei Platten als /dev/sda und /dev/sdb sowie meinen Stick als /dev/sdc an. Und auf den Platten gibt es keinen GRUB, wenn ich CD und Stick rausziehe, bootet Windows7 und es gibt keinen Bootmanager. Wenn ich vom Stick aus boote, also noch ehe die beiden Platten initialisiert werden, muß ich in der grub.conf als Ort für mein Windows (hd1,0) angeben, dann funktioniert es. "Richtig" wäre aber eigentlich (hd0,0). Gibts dafür eine Erklärung? |
|
Back to top |
|
|
cryptosteve Veteran
Joined: 04 Jan 2004 Posts: 1169 Location: GER
|
Posted: Sun Feb 10, 2013 5:20 am Post subject: |
|
|
Christoph Schnauß wrote: | firefly wrote: | Man kann beim kernel aber einen boot parameter angeben, mit dem man dem kernel eine wartezeit mitgeben kann, bevor dieser versucht das root device zu mounten. |
öhm ... und wie mache ich das? In der grub.conf was reinschreiben? 3 Sekunden müßten reichen, aber ich weiß nicht genau, wie. |
Moin,
versuche mal, Deine Kernel-Zeile um grub um folgenden Parameter zu erweitern:
Mit den Zeiten musst Du natürlich ein bißchen testen, was sich für Dich als praktikabel erweist. _________________ - born to create drama -
gpg: 0x9B6C7E15
CS Virtual Travel Bug: VF6G5D |
|
Back to top |
|
|
bell Guru
Joined: 27 Nov 2007 Posts: 508
|
Posted: Sun Feb 10, 2013 2:02 pm Post subject: |
|
|
Ich baue meine Initramfs und den Kernel immer mit Genkernel. Und trotzdem habe ich die volle "old-style" Kontrolle über die Kernel-Konfiguration. Mit Code: | genkernel --oldconfig --no-ramdisk-modules --no-keymap all | wird make; make modules_install; mounten von /boot; kopieren des Kernels nach /boot; generieren und installieren der minimalistischen initramfs gemacht.
Du kannst natürlich auch Code: | genkernel --oldconfig --no-ramdisk-modules --no-keymap initramfs | ausführen, die nur die initramfs generiert und nach /boot packt.
Wichtig ist die Option "--oldconfig", die Deine ".config" nicht anfasst, auch kein "mrproper" ausführt, sondern sicherheitshalber nur ein "make silentoldconfig" ausführt und direkt anfängt den Kernel zu bauen. no-ramdisk-modules und no-keymap machen die initramfs kleiner und diese "Automatische Hardware-Erkennung" ist nicht mehr da.
Das ist also die "minimale" genkernel-initramfs, die fast so tickt als wäre sie nicht da. Ok. UUID Unterstützung wäre schon drin. Aber Du kannst bei Bedarf zusätzliche Funktionen ganz einfach per Parameter hinzufügen oder in der /etc/genkernel.conf einstellen. Siehe "genkernel --help". |
|
Back to top |
|
|
Christoph Schnauß Guru
Joined: 17 Dec 2004 Posts: 553 Location: Berlin
|
Posted: Sun Feb 10, 2013 4:59 pm Post subject: |
|
|
cryptosteve wrote: | versuche mal, Deine Kernel-Zeile um grub um folgenden Parameter zu erweitern:
|
Besten Dank, damit bin ich erstmal bis zum login gekommen. Damit ist das Hauptproblem vorerst erledigt.
Was ich trotzdem überhaupt nicht verstehe, ist die scheinbare "Umbenennung" der Bootdevices. In der folgenden Form funktioniert meine aktuelle grub.conf jetzt erstmal so weit, daß der Bootmanager das macht, wozu er eben da ist: Code: | default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title PC1 Windows 7
rootnoverify (hd1,0)
makeactive
chainloader +1
title Stick Gentoo
root (hd0,0)
kernel /boot/kernel root=/dev/sdg1 rootdelay=20 |
Warum will der Stick unbedingt als (hd0) angesprochen werden? Und warum wird die physische Platte mit dem vorhandenen Windows zu (hd1)? Wieso wird /dev/sdg1 verlangt, owohl es das eigentlich gar nicht gibt?
bell wrote: | Du kannst natürlich auch Code: | genkernel --oldconfig --no-ramdisk-modules --no-keymap initramfs | ausführen, die nur die initramfs generiert und nach /boot packt.
Wichtig ist die Option "--oldconfig", die Deine ".config" nicht anfasst, auch kein "mrproper" ausführt, sondern sicherheitshalber nur ein "make silentoldconfig" ausführt und direkt anfängt den Kernel zu bauen. no-ramdisk-modules und no-keymap machen die initramfs kleiner und diese "Automatische Hardware-Erkennung" ist nicht mehr da. |
Danke. Ich muß sowieso nochmal an den Kernel ran und noch einiges basteln. Wichtig war erstmal, daß ich mit grub ein befriedigendes Ergebnis bekomme. |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5165
|
Posted: Sun Feb 10, 2013 5:39 pm Post subject: |
|
|
Christoph Schnauß wrote: |
Warum will der Stick unbedingt als (hd0) angesprochen werden? Und warum wird die physische Platte mit dem vorhandenen Windows zu (hd1)? Wieso wird /dev/sdg1 verlangt, owohl es das eigentlich gar nicht gibt? |
Soweit ich weis, ist hd0 in grub die "Platte", von der der Bootloader vom Bios geladen wurde.
Doch sdg gibt es, scheinbar meint der kernel dass sda-sdf schon belegt sind. Und aufgrund dieser "willkür" welches device name der kernel dem USB-Stick beim booten vergibt, ist die verwendung von UUID oder LABEL (beide vom Dateisystem) robuster.
Dafür wird halt ein initramfs benötigt, welche das mounten des root-devices übernimmt.
Ohne initramfs funktioniert es seit einiger zeit auch mit Partition-UUID (root=PARTUUID). Nur hierfür ist eine Partitionstabelle im format GPT notwendig. _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|