GRUB auf USB-Stick - Hinzufügen von Betriebssystemen

9

Einige Hintergrundinformationen:

  • Ich komme aus einem Windows-Hintergrund (obwohl ich mit Ubuntu usw. vertraut bin) und verwende einen Windows 7-Computer, um diese Aufgabe abzuschließen
  • Haben Sie GRUB erfolgreich auf dem MBR des USB-Laufwerks (8 GB FAT32-Laufwerk) installiert:
  • Haben eine Grundstruktur auf dem Laufwerk erstellt: / boot / grub, / boot / img, / boot / kernel

Frage:

Ich habe einige grundlegende Fragen für Anfänger, aber solche, auf die ich über Google / StackExchange usw. keine Antworten finden konnte.

  • Ich verstehe, dass der Ordner / boot / img / [SystemName] das Image für ein bestimmtes System speichert, das möglicherweise verschiedene (oder dieselben) Versionen von Linux-Kerneln verwendet, die im Verzeichnis / boot / kernel gespeichert sind (zumindest so möchte es einrichten)
  • Die meisten dieser Systeme haben jedoch nur einen Kernel in ihren Verzeichnissen namens "Linux" (ohne Angabe der Version). Ich kann herausfinden, welchen Kernel diese alle verwenden, aber was ist der erste Ort, um die Kernel selbst zum Kopieren nach / boot / kernel zu bringen?
  • Nachdem ich die Kernel erhalten habe, stelle ich mir vor, dass der Rest das Gerät hauptsächlich nach / boot / img / kopiert und den richtigen Eintrag in menu.lst erstellt, richtig? Ich kann das System für System tun, sobald ich die Kernel erhalten habe, auf die ich verweisen kann.

Gesamtziel:

Ich versuche, ein 8-GB-USB-Flash-Laufwerk zu erstellen, mit dem ich mehrere Betriebssysteme über ein GRUB-Startmenü starten kann. Um Betriebssysteme hinzuzufügen oder zu entfernen, möchte ich nur die entsprechenden Dateien in einen Ordner / boot / img / [Systemname] und einen Ordner / boot / kernel kopieren und dann die Datei menu.lst bearbeiten müssen. In diesem ersten Schritt geht es darum, die Kernel zu finden, die viele dieser Betriebssysteme gemeinsam nutzen, da ich hoffe, die Duplizierung zu reduzieren.

SeanKilleen
quelle
Und was möchten Sie nach dem Hinzufügen des Kernels haben? Möchten Sie ein funktionierendes Betriebssystem, von dem Sie booten können?
Phunehehe
@phunehehe, danke! Ich habe den Beitrag aktualisiert, um mein Gesamtziel aufzunehmen.
SeanKilleen
Es hört sich so an, als würden Sie versuchen, LiveCD-Images für verschiedene Distributionen auf einem USB-Laufwerk abzulegen und sie dann starten zu können. Ist das richtig?
Wodin
@Wodin: Im Wesentlichen ja. LiveCD (aber mit Schreibfähigkeit, da es auf beschreibbaren Medien verfügbar sein wird), mit einem einheitlichen Bootloader für alle Distributionen / Tools, die ich möchte.
SeanKilleen

Antworten:

4

Was Sie erreichen möchten, ist die Stretching-Boot-Technologie :) Ich denke jedoch, dass dies möglich ist, obwohl ich nicht gut genug informiert bin, um einen vollständigen Durchgang zu ermöglichen.

Erstens haben Distributionen, wie bereits erwähnt, sehr unterschiedliche Anforderungen. Zweitens, das Gute ist, dass Sie auch Distributionen finden können, die nur minimale Anforderungen erfordern.

Ich würde empfehlen, GRUB4DOS als Bootloader zu verwenden. Unter diesem Link erfahren Sie, wie Sie es mit USB verwenden (da es den Befehl find --set root - enthält, der wichtig ist, wenn Sie ein mobiles Gerät wie USB haben).

Dann müssen Sie entscheiden, wie viele Partitionen Sie verwenden möchten. Die Standard-Vollinstallation befindet sich immer in einer einzelnen Partition. Wenn Sie also einen 8-GB-USB-Stick haben und eine 4-GB-Partition verwenden (was eine minimale Installation ermöglicht), sind Sie auf 2 verschiedene "Vollinstallationen" von Hauptdistributionen wie Debian oder Fedora beschränkt.

Es gibt jedoch einige kleine und spezialisierte Linux-Distributionen. Zum Beispiel ist "Puppy Linux" sehr klein und hat einen speziellen "Frugal Installation" -Modus. Es gibt viele Varianten (z. B. gibt es MacPup mit Versuchen, einen Apple wie Desktop oder Fatdog64, ein 64-Bit-Linux, zu implementieren).

In diesem "sparsamen Installationsmodus" wird nur genau 1 Verzeichnis verwendet und kann parallel zu einem vorhandenen Linux oder Windows auf der Festplatte (oder USB) installiert werden. Ich bin sicher, dass es andere Distributionen gibt, die ähnliche Modi unterstützen.

Da Puppy Linux klein ist (<150 MB) und vorausgesetzt, Sie reservieren für jede Installation eine kleine Sicherungsdatei (512 MB), können Sie problemlos 10 verschiedene Betriebssysteme auf dem USB-Stick installieren. Es gibt noch kleinere Linuxes (Slitaz, Tinycore), die Sie verwenden könnten.

Als Beispiel hänge ich die Datei menu.lst (GRUB4DOS) von meiner aktuellen PC-Installation an. Die ersten 8 Einträge sind alle verschiedene Puppy Linux-Installationen auf hd0,2 (dh die 3. Partition auf der 1. Festplatte), dann gibt es eine minimale Debian-Installation in einer kleinen zusätzlichen Partition und auch das ursprüngliche Windows-XP.

timeout=10
default=0  

  title Linux Buero (on /dev/sda3)
  root (hd0,2)
  kernel /puppy431-de/vmlinuz psubdir=puppy431-de pkeys=de ro vga=normal
  initrd /puppy431-de/initrd.gz

  title Live CD build (on /dev/sda3)
  root (hd0,2)
  kernel /puppylivecdbuild/vmlinuz psubdir=puppylivecdbuild ro vga=normal
  initrd /puppylivecdbuild/initrd.gz

  title sage developement(on /dev/sda3)
  root (hd0,2)
  kernel /Sage46dev/vmlinuz psubdir=Sage46dev pfix=nocopy ro vga=normal
  initrd /Sage46dev/initrd.gz

  title sage developement test and fun
  root (hd0,2)
  kernel /Sage-test/vmlinuz psubdir=Sage-test pfix=nocopy,noram ro vga=normal
  initrd /Sage-test/initrd.gz

  title Lupq 511
  find --set-root --ignore-floppies /lupq511/initrd.gz
  kernel /lupq511/vmlinuz psubdir="lupq511" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupq511/initrd.gz 

  title Lupu 520 - New kid on the block
  find --set-root --ignore-floppies /lupu-520/initrd.gz
  kernel /lupu-520/vmlinuz psubdir="lupu-520" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupu-520/initrd.gz 

  title wary beta (on /dev/sda3)
  root (hd0,2)
  kernel /wary/vmlinuz psubdir=wary ro vga=normal
  initrd /wary/initrd.gz

  title spup (on /dev/sda3)
  root (hd0,2)
  kernel /spup/vmlinuz psubdir=spup ro vga=normal
  initrd /spup/initrd.gz

  title Debian (on /dev/sda2)
  find --set-root --ignore-floppies /initrd.img
  kernel /vmlinuz root=/dev/sda2 ro
  initrd /initrd.img

  title Windows NT/2K/XP\nStart Windows if installed on HDD
  fallback 7
  find --set-root --ignore-floppies /ntldr
  chainloader /ntldr

boot

Die Datei menu.lst auf Ihrem USB-Stick könnte ähnlich aussehen. Der Befehl GRUB4DOS find --set-root --ignore-floppies /lupq511/initrd.gz (sucht in allen Laufwerken nach dieser Datei) kann sehr nützlich sein, wenn Sie USB verwenden, sodass Sie keine festen Einträge für Ihr Laufwerk verwenden müssen.

Mit den obigen Informationen einige Kommentare zu Ihren ursprünglichen Fragen:

F: * Ich verstehe, dass der Ordner / boot / img / [Systemname] das Image für ein bestimmtes System speichert, das möglicherweise verschiedene (oder dieselben) Versionen von Linux-Kerneln verwendet, die im Verzeichnis / boot / kernel gespeichert sind (zumindest) so möchte ich es einrichten)

A: Ich bin nicht sicher, ob das funktionieren wird, da die meisten großen Distributionen erwarten, dass sie das ausschließliche Recht auf ihre Partition haben und eine bestimmte Verzeichnisstruktur für ihre Dateien installieren. Meiner Meinung nach ist es besser, das Standard-Setup zu respektieren und anzugeben, was die Distribution erwartet, dh einige benötigen eine exklusive Partition, andere sind nur mit einem Verzeichnis auf einer gemeinsam genutzten Partition zufrieden. Ich sage nicht, dass es nicht möglich ist, mehrere Betriebssysteme nicht standardmäßig auf einer Partition zu installieren, aber es bittet um Probleme und ist meiner Meinung nach für einen Linux-Neuling nicht praktikabel. Eine mögliche Problemumgehung erwähne ich am Ende meines Beitrags ("Wubi-like" -Installationen).

F: * Die meisten dieser Systeme haben jedoch nur einen Kernel in ihren Verzeichnissen namens "Linux" (ohne Angabe der Version). Ich kann herausfinden, welchen Kernel diese alle verwenden, aber was ist der beste Ort, um die Kernel selbst zum Kopieren nach / boot / kernel zu bringen?

A: Ich denke, die Kernel sollten genau dort sein, wo die Distributionen sie normalerweise haben. Sie müssen nicht in einem separaten Ordner / boot / kernel gespeichert werden, und ich würde auch nicht empfehlen, sie zwischen Distributionen freizugeben. Der Speicherplatz für einen Kernel ist minimal (wie 2-3 MB). Es gibt wirklich viele Versionen und Unterversionen und manchmal gibt es sogar spezielle Patches, die auf Kernel von Distributionen angewendet werden. Das Einstecken eines anderen / nicht getesteten Kernels ist ein nicht benötigtes Experiment.

F: * Nachdem ich die Kernel erhalten habe, stelle ich mir vor, dass der Rest das Gerät hauptsächlich nach / boot / img / kopiert und den richtigen Eintrag in menu.lst erstellt, richtig? Ich kann das System für System tun, sobald ich die Kernel erhalten habe, auf die ich verweisen kann.

A: Wie bereits erwähnt, erstellen Sie besser separate Partitionen für die Distributionen, die sie benötigen, und mischen Sie die nicht so gierigen Distributionen in ihre eigenen Ordner. Behandle Kernel, Initrd und den Rest der Distribution als Einheit.

Eine letzte Idee. Wenn Sie keine unterschiedlichen Partitionen verwenden möchten, können Sie versuchen, "WUBI" für die Distributionen zu installieren, die eine vollständige Installation auf einer eigenen Partition erfordern. Dies bedeutet, dass Sie große Dateien mit eigenen ext2 / ext3-Dateisystemen auf dem USB-Stick erstellen, diese dann als "Laufwerke" bereitstellen und das Betriebssystem darin installieren. (Ich nenne es WUBI, weil dies die bekannteste Anwendung ist).

Das Folgende sollte ein Grub4dos menu.lst-Eintrag sein, um eine "Wubi-Installation" zu starten.

# Add the ntfs module - just needed for Installation on a Windows Partition
insmod ntfs
# Set root (normally would be sda1, or hd0,1 Change as necessary
set root=(hd0,1)
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz root=/dev/sda1 loop=/ubuntu/disks/root.disk ro
initrd /boot/initrd/initrd.img
boot

Von hier aus .

Sie sehen, es gibt 2 "set root" -Befehle, der zweite nach "root.disk", der Linux enthält, wird als loop0 gemountet.

Ich hoffe, ich konnte einige Ideen geben, obwohl es kein vollständiger Durchgang ist.

Emil WidmannEmil
quelle
Entschuldigung, ich habe den zweiten Link zum Grub-Eintrag für Wubi falsch verstanden (da es mein erster Beitrag ist, war mein zweiter Link "Spam-geschützt"). Der richtige Link ist: blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil
1

Hier sind zwei Anleitungen:

Ich denke, beide verwenden separate Partitionen für jeden Kernel.

Die Einträge in " /boot/grub/menu.lst " lauten wie folgt :

title Unity-2010 -- With Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010 changes_dev=LABEL=Unity-2010 acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

title Unity-2010 -- No Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010  acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz
oposit
quelle
0

Es hängt wirklich davon ab, welche Distributionen Sie dort platzieren. Einige von ihnen machen einige böse Sachen in den Initramfs, so dass es schwierig wird. Einige Live-Distributionen suchen nach einem Label, andere nach UUID. Das können Sie nicht angeben.

Die Lösung ist nicht einfach. Sie sollten neue angepasste Ramdisks für Ihre Live-Distributionen erstellen.

Ich hoffe, ich habe es nicht falsch verstanden: D.

Admiral0
quelle
0

Sie werden sicherlich eine Art Benutzerbereich benötigen, um mit jedem dieser Kernel zu arbeiten. (Programme, Konfiguration, das funktioniert.) Traditionell würden Sie mindestens eine Partition für jedes separate Betriebssystem verwenden, und die GRUB-Partition würde selbst als / boot gemountet (so hätten Sie boot tatsächlich nicht als Unterverzeichnis davon Partition; es wäre das Stammverzeichnis mit grub / als Unterverzeichnis.)

SamB
quelle