GRUB na dysku USB - dodawanie systemów operacyjnych

9

Niektóre tło:

  • Pochodzę głównie z systemu Windows (choć znam system Ubuntu itp.) I używam komputera z systemem Windows 7 do wykonania tego zadania
  • Zainstalowałem GRUB pomyślnie w MBR napędu USB (8 GB FAT32):
  • Stworzyłem podstawową strukturę na dysku: / boot / grub, / boot / img, / boot / kernel

Pytanie:

Mam kilka podstawowych pytań dla początkujących, ale te, na które miałem problemy ze znalezieniem odpowiedzi za pośrednictwem Google / StackExchange itp.

  • Rozumiem, że folder / boot / img / [SystemName] będzie przechowywać obraz dla określonego systemu, który może korzystać z różnych (lub takich samych) wersji jądra systemu Linux, zapisanych w katalogu / boot / kernel (przynajmniej tak właśnie zrobiłem chciałbym to skonfigurować)
  • Jednak większość tych systemów ma po prostu jądro w swoich katalogach o nazwie „linux” (nie podając wersji). Mogę znaleźć jądro, którego wszyscy używają, ale jakie jest najlepsze miejsce, aby same jądra skopiowały się do / boot / kernel?
  • Po otrzymaniu jądra, wyobrażam sobie, że reszta w większości kopiuje urządzenie do / boot / img / i tworzy odpowiedni wpis w menu.lst, prawda? Mogę to zrobić w systemie dla poszczególnych systemów, gdy tylko będę mógł uzyskać dostęp do jąder.

Ogolny cel:

Próbuję utworzyć dysk flash USB o pojemności 8 GB, który pozwoli mi na uruchomienie wielu systemów operacyjnych z menu uruchamiania GRUB. Aby dodać lub odjąć systemy operacyjne, chciałbym tylko skopiować odpowiednie pliki do folderu / boot / img / [SystemName] i odpowiednio do folderu / boot / kernel, a następnie edytować plik menu.lst. Tak więc ten pierwszy krok polega na znalezieniu jądra, które współdziała wiele z tych systemów operacyjnych, ponieważ mam nadzieję na ograniczenie duplikacji.

SeanKilleen
źródło
A co chcesz mieć po dodaniu jądra? Czy chcesz działającego systemu operacyjnego, z którego można uruchomić system?
phunehehe
@phunehehe, dzięki! Zaktualizowałem post, aby uwzględnić mój ogólny cel.
SeanKilleen,
Wygląda na to, że próbujesz zrzucić obrazy LiveCD dla różnych dystrybucji na dysk USB, a następnie móc je uruchomić. Czy to jest poprawne?
Wodin
@Wodin: Zasadniczo tak. LiveCD (ale z możliwością zapisu, ponieważ będzie na nośniku zapisywalnym), z jednym ujednoliconym bootloaderem dla wszystkich dystrybucji / narzędzi, których potrzebuję.
SeanKilleen

Odpowiedzi:

4

To, co próbujesz osiągnąć, to rozciągnięcie technologii rozruchowej :) Myślę jednak, że jest to możliwe, chociaż nie mam wystarczającej wiedzy, aby przeprowadzić pełne przejście.

Po pierwsze, jak powiedziano wcześniej, dystrybucje mają bardzo różne wymagania. Po drugie, dobrą rzeczą jest to, że możesz także znaleźć dystrybucje, które wymagają minimalnych wymagań.

Poleciłbym użyć GRUB4DOS jako bootloadera. Zobacz ten link, jak używać go z USB (ponieważ ma polecenie find --set root - co jest ważne, jeśli masz urządzenie mobilne takie jak USB).

Następnie musisz zdecydować, z ilu partycji będziesz korzystać. Standardowa „Pełna instalacja” jest zawsze na jednej partycji. Więc jeśli masz 8 GB pamięci USB i weź partycję 4 GB (co pozwala na minimalną instalację), będziesz ograniczony do 2 różnych „pełnych instalacji” głównych dystrybucji, takich jak Debian lub Fedora.

Istnieją jednak małe i wyspecjalizowane dystrybucje Linuksa. Na przykład „Puppy Linux” jest bardzo mały i ma specjalny tryb „Oszczędna instalacja”. Występuje w wielu odmianach (np. Jest MacPup z próbami wdrożenia Apple takiego jak Desktop lub Fatdog64, który jest 64-bitowym Linuksem).

W tym trybie „Oszczędna instalacja” używa tylko 1 katalogu i może być zainstalowany równolegle do istniejącego systemu Linux lub Windows na dysku twardym (lub USB). Jestem pewien, że istnieją inne dystrybucje, które obsługują podobne tryby.

Ponieważ Puppy Linux jest mały (<150 MB) i przy założeniu, że zarezerwujesz mały plik zapisu dla każdej instalacji (512 MB), możesz łatwo zainstalować 10 różnych systemów operacyjnych na pamięci USB. Istnieją jeszcze mniejsze Linuxesy (Slitaz, Tinycore), których możesz użyć.

Jako przykład dołączam plik menu.lst (GRUB4DOS) z mojej bieżącej instalacji na PC. Pierwsze 8 wpisów to różne instalacje Puppy Linux na hd0,2 (tj. 3. partycja na 1. dysku twardym), wtedy jest minimalny Instalacja Debiana na małej dodatkowej partycji, a także w oryginalnym systemie 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

Menu.lst na twoim USB może wyglądać podobnie, polecenie GRUB4DOS find --set-root --ignore-floppies /lupq511/initrd.gz (szuka tego pliku na wszystkich dyskach) może być bardzo przydatne, jeśli używasz USB, więc nie musisz używać stałych wpisów dla dysku.

Dzięki powyższym informacjom niektóre komentarze do twoich oryginalnych pytań:

P: * Rozumiem, że folder / boot / img / [SystemName] będzie przechowywać obraz dla określonego systemu, który może korzystać z różnych (lub takich samych) wersji jąder systemu Linux przechowywanych w katalogu / boot / kernel (przynajmniej tak chciałbym to skonfigurować)

Odp .: Nie jestem pewien, czy to zadziała, ponieważ większość głównych dystrybucji oczekuje wyłącznego prawa do partycji i instaluje określoną strukturę katalogów dla swoich plików. Moim zdaniem lepiej jest przestrzegać domyślnej konfiguracji i zapewnić to, czego oczekuje dystrybucja, tj. Niektórzy potrzebują wyłącznej partycji, inni będą zadowoleni z samego katalogu na wspólnej partycji. Nie twierdzę, że nie jest możliwe zainstalowanie wielu systemów operacyjnych na 1 partycji w sposób inny niż domyślny, ale prosi o kłopoty i moim zdaniem nie jest praktyczny dla początkujących Linuksa. Możliwe obejście, o którym wspomniałem na dole mojego postu (instaluje się „wubi-podobne”).

P: * Jednak większość z tych systemów ma po prostu jądro w swoich katalogach o nazwie „linux” (nie podając wersji). Mogę znaleźć jądro, którego wszyscy używają, ale jakie jest najlepsze miejsce, aby same jądra skopiowały do ​​/ boot / kernel?

Odp .: Myślę, że jądra powinny iść dokładnie tam, gdzie zwykle je mają dystrybucje. Nie ma potrzeby przechowywania ich w osobnym folderze / boot / kernel, a także nie zalecałbym próby dzielenia się nimi między dystrybucjami. Przestrzeń pamięci jest minimalna dla jądra (jak 2-3 MB). Naprawdę istnieje wiele wersji i pod-wersji, a czasem nawet specyficzne łatki są stosowane do jądra dystrybucji. Podłączenie innego / nieprzetestowanego jądra jest niepotrzebnym eksperymentem.

P: * Po otrzymaniu jąder, wyobrażam sobie, że reszta w większości kopiuje urządzenie do / boot / img / i tworzy odpowiedni wpis w menu.lst, prawda? Mogę to zrobić w systemie dla poszczególnych systemów, gdy tylko będę mógł uzyskać dostęp do jąder.

Odp .: Jak wspomniano wcześniej, lepiej utwórz osobne partycje dla tych dystrybucji, które ich potrzebują, i dodaj niezbyt chciwe dystrybucje do własnych folderów. Traktuj jądro, initrd i resztę dystrybucji jako jednostkę.

Ostatni pomysł. Jeśli nie chcesz używać różnych partycji, możesz wypróbować coś takiego jak instalacje „WUBI” dla dystrybucji wymagających pełnej instalacji na własnej partycji. Oznacza to, że tworzysz duże pliki z własnymi systemami plików ext2 / ext3 na USB, a następnie montujesz je jako „dyski” i instalujesz w nim system operacyjny. (Nazywam to WUBI, ponieważ jest to najbardziej znana aplikacja).

Poniżej powinien znajdować się wpis menu Grub4dos.lst, aby uruchomić „instalację 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

Od tutaj .

Widzisz, istnieją 2 polecenia „ustaw root”, drugi po „root.disk”, który zawiera Linux, jest montowany jako loop0.

Mam nadzieję, że mógłbym podać kilka pomysłów, chociaż nie jest to kompletny przewodnik.

Emil WidmannEmil
źródło
Przepraszam, że drugi link do wpisu Grub dla Wubi jest nieprawidłowy (ponieważ jest to mój pierwszy post, mój drugi link był „chroniony przed spamem”). Właściwy link to: blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil
1

Oto dwa przewodniki:

Myślę, że obie używają osobnych partycji dla każdego jądra.

Wpisy w „ /boot/grub/menu.lst ” są następujące:

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
źródło
0

To naprawdę zależy od tego, jakie dystrybucje tam umieszczasz. Niektórzy z nich robią paskudne rzeczy w initramfs, więc staje się to trudne. Niektóre dystrybucje na żywo szukają etykiety, niektóre szukają identyfikatora użytkownika. Nie możesz tego zapewnić.

Rozwiązanie nie jest łatwe, powinieneś zbudować nowe niestandardowe ramdyski dla swoich dystrybucji na żywo.

mam nadzieję, że nie pomyliłem się: D

admirał 0
źródło
0

Na pewno będziesz potrzebować przestrzeni użytkownika, aby przejść do każdego z tych jąder. (Programy, konfiguracja, działa.) Tradycyjnie używałbyś co najmniej jednej partycji dla każdego osobnego systemu operacyjnego, a sama partycja GRUB byłaby montowana jako / boot (tak więc nie miałbyś bootowania jako podkatalogu tego partycja; byłby to katalog główny, z podkatalogiem grub /).

SamB
źródło