GRUB su unità USB - aggiunta di SO


9

Alcuni retroscena:

  • Proveniente da un ambiente in gran parte Windows (anche se ho familiarità con Ubuntu, ecc.) E utilizzo di una macchina Windows 7 per completare questa attività
  • GRUB è stato installato correttamente sull'MBR dell'unità USB (unità FAT32 da 8 GB):
  • Hanno creato una struttura di base sull'unità: / boot / grub, / boot / img, / boot / kernel

Domanda:

Ho alcune domande basilari per principianti, ma ho avuto problemi a trovare risposte tramite Google / StackExchange, ecc.

  • Comprendo che la cartella / boot / img / [NomeSistema] memorizzerà l'immagine per un sistema specifico, che può utilizzare varie (o stesse) versioni di kernel Linux archiviate nella directory / boot / kernel (almeno, è così che mi piacerebbe installarlo)
  • Tuttavia, la maggior parte di questi sistemi ha solo un kernel nelle loro directory chiamato "linux" (senza indicare la versione). Posso cercare quale kernel usano tutti, ma qual è il posto migliore per far copiare i kernel stessi in / boot / kernel?
  • Dopo aver ottenuto i kernel, immagino che il resto stia copiando principalmente il dispositivo in / boot / img / e creando la voce corretta in menu.lst, giusto? Posso farlo su un sistema per sistema una volta che riesco a far riferimento i kernel.

Obiettivo generale:

Sto tentando di creare un'unità flash USB da 8 GB che mi consentirà di avviare più sistemi operativi da un menu di avvio di GRUB. Per aggiungere o sottrarre sistemi operativi, vorrei solo copiare i file appropriati in una cartella / boot / img / [NomeSistema] e / boot / kernel come appropriato, quindi modificare il file menu.lst. Quindi, questo primo passo riguarda la ricerca dei kernel condivisi da molti di questi sistemi operativi, poiché spero di ridurre la duplicazione.


E cosa vuoi avere dopo aver aggiunto il kernel? Vuoi un sistema operativo funzionante da cui è possibile avviare?
phunehehe,

@phunehehe, grazie! Ho aggiornato il post per includere il mio obiettivo generale.
SeanKilleen,

Sembra che tu stia provando a scaricare immagini LiveCD per varie distribuzioni su un'unità USB e quindi a poterle avviare. È corretto?
Wodin,

@Wodin: essenzialmente sì. LiveCD (ma con capacità di scrittura poiché sarà su supporti scrivibili), con un bootloader unificato per tutte le distro / strumenti che vorrò.
SeanKilleen,

Risposte:


4

Quello che stai cercando di ottenere è il potenziamento della tecnologia di avvio :) Tuttavia, penso che sia possibile, anche se non sono abbastanza esperto da fornire una panoramica completa.

In primo luogo, come detto prima, le distribuzioni hanno requisiti molto diversi. In secondo luogo, la cosa positiva, d'altra parte, puoi anche trovare distro che richiedono requisiti minimi.

Consiglierei di usare GRUB4DOS come bootloader. Vedi questo link come usarlo con USB (perché ha il comando find --set root -, che è importante se hai un dispositivo mobile come USB).

Quindi devi decidere quante partizioni utilizzerai. "Installazione completa" standard è sempre in una singola partizione. Quindi, se si dispone di una chiavetta USB da 8 GB e si prende una partizione da 4 GB (che consente un'installazione minima) si verrebbero limitati a 2 diverse "Installazioni complete" di distro principali come Debian o Fedora.

Tuttavia, ci sono alcune distribuzioni Linux piccole e specializzate. Ad esempio "Puppy Linux" è molto piccolo e ha una modalità speciale "Installazione frugale". È disponibile in molti modi (ad esempio c'è MacPup con tentativi di implementare una Apple come Desktop o Fatdog64 che è un Linux a 64 bit).

In questa modalità "Installazione frugale" utilizza esattamente 1 directory e può essere installato in parallelo a un Linux o Windows esistente sul disco rigido (o USB). Sono sicuro che ci sono altre distribuzioni che supportano modalità simili.

Poiché Puppy Linux è piccolo (<150 MB) e supponendo di riservare un piccolo file di salvataggio per ogni installazione (512 MB), è possibile installare facilmente come 10 diversi sistemi operativi sulla chiavetta USB. Ci sono anche Linux più piccoli (Slitaz, Tinycore), che puoi usare.

Ad esempio, allego il file menu.lst (GRUB4DOS) dall'installazione corrente del mio PC, le prime 8 voci sono tutte diverse installazioni Puppy Linux su hd0,2 (ovvero la terza partizione sul primo disco fisso), quindi c'è un minimo Installazione di Debian in una piccola partizione aggiuntiva e anche l'originale 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

Il menu.lst sulla tua USB potrebbe sembrare simile, il comando GRUB4DOS find --set-root --ignore-floppies /lupq511/initrd.gz (cerca questo file in tutte le unità) potrebbe essere molto utile se usi USB, quindi non devi usare voci fisse per la tua unità.

Con le informazioni di cui sopra alcuni commenti sulle tue domande originali:

D: * Comprendo che la cartella / boot / img / [NomeSistema] memorizzerà l'immagine per un sistema specifico, che può utilizzare varie (o uguali) versioni dei kernel Linux archiviate nella directory / boot / kernel (almeno, è così che mi piacerebbe installarlo)

A: Non sono sicuro che funzionerà, poiché la maggior parte delle principali distribuzioni prevede di avere il diritto esclusivo della propria partizione e installare una struttura di directory specifica per i propri file. A mio avviso, è meglio rispettare l'impostazione predefinita e fornire ciò che la distribuzione si aspetta, ad esempio alcuni hanno bisogno di una partizione esclusiva, alcuni saranno soddisfatti solo di una directory su una partizione condivisa. Non dico che non sia possibile installare più SO su 1 partizione in modo non predefinito, ma sta chiedendo problemi e secondo me non è pratico per un nuovo arrivato Linux. Una possibile soluzione che menziono in fondo al mio post (installazioni "simili a Wubi").

D: * Tuttavia, la maggior parte di questi sistemi ha un kernel nelle loro directory chiamato "linux" (non indicando la versione). Posso cercare quale kernel usano tutti, ma qual è il posto migliore per far copiare i kernel stessi in / boot / kernel?

A: Penso che i kernel dovrebbero andare esattamente lì dove le distribuzioni li hanno normalmente. Non è necessario memorizzarli in una cartella / boot / kernel separata e inoltre non consiglierei di provare a condividerli tra le distribuzioni. Lo spazio di archiviazione è minimo per un kernel (come 2-3 MB). Esistono davvero molte versioni e sotto-versioni e talvolta ci sono persino patch specifiche applicate ai kernel delle distribuzioni. Plugin in un kernel diverso / non testato è un esperimento non necessario.

D: * Dopo aver ottenuto i kernel, immagino che il resto stia copiando principalmente il dispositivo in / boot / img / e creando la voce corretta in menu.lst, giusto? Posso farlo su un sistema per sistema una volta che riesco a far riferimento i kernel.

A: Come accennato in precedenza, creare meglio partizioni separate per quelle distribuzioni che ne hanno bisogno e mescolare le distribuzioni non così avide nelle proprie cartelle. Tratta kernel, initrd e il resto della distribuzione come un'unità.

Un'ultima idea. Se non si desidera utilizzare partizioni diverse, è possibile provare qualcosa come installazioni "WUBI" per le distribuzioni che richiedono un'installazione completa sulla propria partizione. Ciò significa che si creano file di grandi dimensioni con i propri filesystem ext2 / ext3 su USB, quindi li si monta come "unità" e si installa il sistema operativo al suo interno. (Lo chiamo WUBI, perché questa è l'applicazione più conosciuta).

Quanto segue dovrebbe essere una voce menu.lst di Grub4dos per avviare una "installazione di Wubi".

# 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

Da qui .

Vedete, ci sono 2 comandi "set root", il secondo dopo "root.disk" che contiene Linux, è montato come loop0.

Spero di poter dare alcune idee, anche se non è un passaggio completo.


Mi spiace di aver sbagliato il secondo link alla voce di Grub per Wubi (perché è il mio primo post il mio secondo link era "protetto dallo spam"). Il link giusto è: blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil

1

Ecco due guide:

Penso che entrambi utilizzino partizioni separate per ciascun kernel.

Le voci in " /boot/grub/menu.lst " sono così:

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

0

Dipende davvero da quali distro ci stai mettendo. Alcuni di loro fanno delle cose brutte negli initramfs, quindi diventa difficile. Alcune distro dal vivo cercano un'etichetta, altre cercano il uuid. Non puoi fornirlo.

La soluzione non è facile, dovresti creare nuovi ramdisk personalizzati per le tue distribuzioni dal vivo.

spero di non aver sbagliato: D


0

Avrai sicuramente bisogno di un qualche tipo di spazio utente da abbinare a ciascuno di questi kernel. (Programmi, configurazione, le opere.) Tradizionalmente, useresti almeno una partizione per ciascun sistema operativo separato, e la partizione GRUB stessa sarebbe montata come / boot (quindi, in effetti, non avresti l'avvio come sottodirectory di questo partizione; sarebbe la directory principale, con grub / come sottodirectory.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.