Wie sollte ich grub zum Booten des Linux-Kernels von einer USB-Festplatte konfigurieren?

17

Ich habe eine Laptop-Festplatte in einem externen Gehäuse, das ich als großes Pendrive verwende. Für einen zusätzlichen Twist habe ich Linux darauf installiert, so dass ich jeden Rechner meiner Wahl booten kann (z. B. zur Datenwiederherstellung oder Reparatur eines geliehenen Systems oder einfach nur mit einem geliehenen Laptop, ohne das vorinstallierte Windows zu zerstören). Das Problem ist, dass die USB-Festplatte je nach Hardwarekonfiguration unter verschiedenen Pfaden sichtbar sein kann. Für die Grub-Konfiguration verwende ich nur, (hda0,0)da es sich um das Gerät handelt, von dem aus der Grub gestartet wurde. Ich habe UUID-Einträge in /etc/fstab. Ich gebe auch rootwaitin den Kernel-Parametern an, dass darauf gewartet wird, dass sich das USB-Subsystem beruhigt, bevor versucht wird, das Gerät zu mounten.

Was soll ich als an den Kernel übergeben root=? Starten Sie derzeit einmalig vom pendrive, überprüfen Sie die Debug-Meldungen, um festzustellen, welches /dev/sdXGerät dem USB-Laufwerk vom Kernel zugewiesen wurde, und starten Sie dann die Grub-Konfiguration neu und bearbeiten Sie sie. Ich kann nichts am PC ändern, außer das Boot from USB hard driveBIOS zu aktivieren und eine höhere Priorität als die internen Festplatten einzustellen.

Es gibt verschiedene initrd-Generierungsskripte, die die Unterstützung von UUID im Root-Gerätepfad enthalten. Leider unterstützt das native Gentoo-Skript (Genkernel) keine rootwaitund ich hatte kein Glück, andere zu verwenden.

Der Startvorgang läuft wie folgt ab (unter Windows ist er ziemlich ähnlich ):

  1. Das BIOS wählt das Startgerät aus und lädt den MBR (der zufällig Grub Stufe 1 ist).
  2. Grub lädt seine Konfigurations- und Stage-2-Dateien von dem Gerät, als das es eingestellt wurde root, und verwendet (hd0)für das Gerät, von dem es vom BIOS geladen wurde.
  3. Grub lädt und startet einen Kernel (immer noch die gleiche Nummerierung, damit ich ihn (hd0,0)wieder verwenden kann).
  4. Der Kernel initialisiert alle eingebauten Geräte ( rootwaitzaubert es jetzt).
  5. Der Kernel hängt die Partition ein, als die er übergeben wurde root(dies ist ein Kernel-Parameter, kein Grub-Parameter).
  6. init.dStartet den Userland-Bootvorgang, einschließlich des Einbindens von Dingen von /etc/fstab.

Teil 5 gibt mir Probleme.

Skolima
quelle

Antworten:

6

Ich denke, die Antwort sollte entweder root=LABEL=...oder seinroot=UUID=...

Aber Sie geben an, dass dies bei Ihnen nicht funktioniert. Ich würde vorschlagen, nachzusehen, ob es ein Problem mit den Aktionen Ihrer initrd gibt.

matli
quelle
Ich habe keine Initrd, das ist das ganze Problem. genkernel unterstützt die Option "rootwait" nicht und andere funktionieren nicht mit Gentoo.
Skolima
2

Ich könnte mich irren oder Sie möglicherweise nur missverstehen, aber ist die Auswahl des Startgeräts nicht etwas, das über das BIOS des Computers konfiguriert wird, den Sie starten?

Ich würde denken, es wäre eine Frage der Wahl des USB-Laufwerks, auf dem GRUB als Bootloader installiert ist, und der Wahl der Distribution, die Sie über das GRUB-Menü booten möchten.

Justin Bennett
quelle
2

Sie können verwenden:

set root='(hd0,msdos5)'
user40070
quelle