PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : grub auf USB-Stick



Cybercchriss
20.09.04, 16:40
Kann mir jemand erklären, wie ich grub auf einem USB-Stick installiert bekomme?

Hier meine bisherigen Versuche:
Mein USB-Stick wird als /dev/sdb erkannt

Zuerst habe ich mit fdisk eine Primäre, bootfähige Linuxpartitiontable erstellt und danach mit mke2fs /dev/sda1 ein Dateisystem erzeugt.
Dann habe ich die grub-0.95-i386-pc.tar.gz runtergeladen und mit folgenden Befehlen den Bootloader zu installieren versucht:

dd if=stage1 of=/dev/sdb1 bs=512 count=1
dd if=stage2 of=/dev/sdb1 bs=512 seek=1

Als dies niucht hinhaute habe ich versucht, den Bootloader direkt auf den Stick und nicht auf die Partition zu schreiben:

mke2fs /dev/sda

dd if=stage1 of=/dev/sdb bs=512 count=1
dd if=stage2 of=/dev/sdb bs=512 seek=1

Nun kommt er immerhin bis zur stage2 und dann passiert nix mehr.
Ein Verzeichnis namens /boot/grub mit allen Dateien aus grub-0.95-i386-pc.tar.gz habe ich sicherheitshalber auch mal auf den Stick kopiert.

Wenn ich den Stick per grub-install /dev/sdb beschreiben will, kommt irgendwas mit unbekanntes blockdivice!

Nach 8 Stunden vergeblicher Liebesmühe bin ich ziemlich enttäuscht :(

Cybercchriss
21.09.04, 10:54
hat keiner eine Idee?

Cybercchriss
22.09.04, 10:13
Nun habe ich es geschafft den Grub zu installieren und kann auch über die Grub-Shell den Kernel starten.

USB- und SCSI Treiber habe ich in den Kernel reinkompiliert und die Treiber scheinen auch alle fehlerfrei geladen zu werden.

Sobald jedoch das Dateisystem gemountet werden soll kommt folgender Fehler:
VFS: Cannot open root device "sda1" or unknown-block(0,0)
Please append a acorrect "root=" boot option
Kernel panic: VFS: Unable to mount root fs on unknown-block(0,0)

ext2-Unterstützung ist im Kernel eingebunden!
das Dateisystem ext2 befindet sich auf /dev/sda1

Als boot-parameter habe ich genommen:
root (hd0,0)
kernel /boot/bzImage root=/dev/sda1
boot

Ein Kollege vermutet, dass notwendige Treiber für den USB-Stick nicht schnell genug vom Kernel geladen werden und empfahl mir eine ramdisk mit einem sleep 10 einzubinden.
Da ich mit ramdisks keine grosse Erfahrungen habe, habe ich folgendes versucht:

root> dd if=/dev/zero of=initrd bs=1k count=4096
root> mk2fs -m0 initrd
root> mount initrd /mnt/initrd -t ext2 -o loop
root> cd /mnt/initrd
root> vi linuxrc

#!/bin/bash
sleep 10

root> chmod 700 linuxrc

Danach habe ich die Ramdisk in der Grub-Shell mit initrd=/boot/initrd angegeben und gebootet.

Die Ramdisk wird initialisiert, jedoch merke ich nichts von einer 10 sekündigen Verzögerung. Sollte nicht automatisch die Datei linuxrc ausgeführt werden?

phoenix22
22.09.04, 10:15
Der Befehl sleep muss auch in der Ramdisk sein + evtl. notwendige libs (rausfinden mit ldd sleep)

Stage
22.09.04, 10:21
OK eins nach dem anderen.
Vergiss das mal mit der initrd...das klappt so nicht, weil eine initrd eine bestimmte Verzeichnissstruktur haben muss, und auch die entsprechenden binaries, sonst kann es diese ja nciht ausführen.

Einfacher ist es du baust dir einen Kernel, der den Support für USB,USB Filesystem, Deinen USB-Hostcontroller(uhci,ohci bzw ehci) und für den USBstick noch USB Mass Storage Support. Dann natürlich noch das Filesystem für die Rootpartition.

Dann brauchst du natürlich wenn du root=/dev/sda1 angibst, auf sda1 ein gültiges Root-filesystem, das der kernel mounten kann und den init-prozess starten kann. Ohne dem läuft da nix :)

Cybercchriss
22.09.04, 11:15
Okay - vergessen wir mal die initrd.

Mein Kernel sollte sämtlichen wichtigen Treiber zur Unterstützung des USB-Sticks beinhalten (dies habe ich mit einem anderen Kernel abgeglichen, der mit einem USB funktioniert)
Ebenso habe ich die Dateisystem (ext2) Unterstützung in den Kernel eingebunden.
Ein root-Filesystem nebst init auf der Partition (/dev/sda1) ist natürlich auch vorhanden.
Jetzt bleibt nur die Frage, warum der Kernel die root-partition nicht mounten kann?

Cybercchriss
23.09.04, 11:23
Soderle - habe es geschafft eine ramdisk zu bauen die ein sleep 10 ausführt!
Es kommt jetzt tatsächlich eine weitere Meldung, die den USB zuweist.

---
sda: sda1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi 0, id 0 , lun 0, type 0
VFS: Cannot open root device "sda1" or unknown-block(0,0)
Please append a acorrect "root=" boot option
Kernel panic: Unable to mount root fs on unknown-block(0,0)
---

Leider ist es immer noch nicht möglich die root-partition zu mounten.