Hallo Leute,
ich habe mittlerweile meinen USB-Stick so präpariert, dass grub startet und auch den Kernel lädt. Dummerweise braucht der Kernel zum Erkennen des Geräts /dev/sda länger als bis zum root mount. Das erkennt man, wenn man bei eingesteckten Stick von Platte bootet. Wie kann ich den Kernel bitten, vor dem root mount noch ein bisschen zu warten, so dass das mounten nicht fehlschlägt? Das ganze möglichst ohne initrd.
Tschüss, Torsten
am 21.11.2003, um 11:55:48 +0100 mailte Torsten Werner folgendes:
man bei eingesteckten Stick von Platte bootet. Wie kann ich den Kernel bitten, vor dem root mount noch ein bisschen zu warten, so dass das mounten nicht fehlschlägt? Das ganze möglichst ohne initrd.
Lies mal den Knoppix-Remaster-Vortrag von Chris. Der ging da auch auf dieses Problem ein.
Andreas
Hi Andreas,
On Fri, Nov 21, 2003 at 12:17:53 +0100, Andreas Kretschmer wrote:
Lies mal den Knoppix-Remaster-Vortrag von Chris. Der ging da auch auf dieses Problem ein.
Meine Loesung funktioniert nur mit initrd. Die Shell in der initrd muss sleep eingebaut haben. Wenn sleep fehlt, benutzt einen ugly hack (/proc muss gemountet sein):
delay(){ IFS="." read begin x < /proc/uptime ( IFS="." while read end x < /proc/uptime do [ "$begin" != "$end" ] && break done ) }
Danach _zweimal_ delay aufrufen:
delay ; delay
Erklaerung: In /proc/uptime steht die Uptime in Sekunden mit Nachkommastellen. Die Funktion delay liest den ganzzahlinen Teil in die Variable "begin". Danach wird in der while-Schleife so lange der aktuelle ganzzahlige Teil in "end" ausgelesen, bis er sich von "begin" unterscheidet. In diesem Fall hat ein Sekundensprung stattgefunden. Man kann das Pech haben, dass delay genau vor einem Sekundensprung aufgerufen wird und so die Verzoegerung zu klein fuer USB ist. Daher der zweite Aufruf direkt danach. So wartet man mindestens eine Sekunde.
bye, Chris p.s.: Ja, das ist ein busy-wait. p.p.s.: Ich weiss, dass das extrem krank ist. p.p.p.s.: Beim Booten ist das sch***egal ;)
Hallo Christian,
Am 21. November 2003 schrieb Christian Perle:
Die Shell in der initrd muss sleep eingebaut haben.
es funktioniert bis jetzt auf einem Rechnertyp und es reicht die Datei /etc/mkinitrd/mkinitrd.conf zu bearbeiten:
DELAY=5
Danach noch 'dpkg-reconfigure kernel-image-2.4.22' und fertig.
Torsten
Torsten Werner wrote:
Hallo Leute,
Hi,
ich habe mittlerweile meinen USB-Stick so präpariert, dass grub startet und auch den Kernel lädt. Dummerweise braucht der Kernel zum Erkennen des Geräts /dev/sda länger als bis zum root mount. Das erkennt man, wenn man bei eingesteckten Stick von Platte bootet. Wie kann ich den Kernel bitten, vor dem root mount noch ein bisschen zu warten, so dass das mounten nicht fehlschlägt? Das ganze möglichst ohne initrd.
AFAIK gibt's einen Kernel-Patch dafür.
Google: linux kernel patch booting usb stick root mount
lieferte diesen Thread der LKML. Da gibt's ein paar Anregungen mit und ohne initrd.
http://www.cs.helsinki.fi/linux/linux-kernel/2003-04/0835.html
Tschüss, Torsten
Bye,
Jens
Am 21. November 2003 schrieb Jens Lorenz:
Da gibt's ein paar Anregungen mit und ohne initrd.
Danke allen, ich probiere es doch mal mit initrd. Nächstes Problem: der Stick wird als fd0 (BIOS drive 0x0) erkannt, d. h. ich benutze /dev/sda ohne Partitionen. Nun würde ich gern den Stick partitionieren, aber ich habe nicht herausgefunden, wie ich grub das beibringe. Device wie (fd0,0) mag der nicht. Gibt es eine Lösung? Eventuell mit anderem Bootloader?
Torsten
lug-dd@mailman.schlittermann.de