Jak powinienem skonfigurować Grub do uruchamiania jądra Linuksa z dysku twardego USB?

17

Mam dysk twardy laptopa w zewnętrznej obudowie, której używam jako dużego pendrive. Dla dodatkowej niespodzianki zainstalowałem na nim Linuksa, dzięki czemu mogę uruchomić dowolną maszynę z moją wybraną dystrybucją (np. Do odzyskiwania danych lub naprawy uszkodzonego systemu lub po prostu za pomocą pożyczonego laptopa bez niszczenia wstępnie zainstalowanego systemu Windows). Problem polega na tym, że w zależności od konfiguracji sprzętowej dysk twardy USB może być widoczny pod różnymi ścieżkami. Do konfiguracji gruba używam po prostu, (hda0,0)ponieważ jest to związane z urządzeniem, z którego grub został uruchomiony. Mam wpisy UUID w /etc/fstab. Podaję również rootwaitparametry jądra, aby czekało na ustabilizowanie się podsystemu USB przed próbą zamontowania urządzenia.

Co mam przekazać jako jądro root=? Aktualnie uruchom raz z pendrive, sprawdź komunikaty debugowania, aby zobaczyć, które /dev/sdXurządzenie zostało przypisane do napędu USB przez jądro, a następnie uruchom ponownie i edytuj konfigurację grub. Nie mogę nic zmienić na komputerze oprócz włączenia Boot from USB hard drivew BIOS i ustawienia wyższego priorytetu niż wewnętrzne dyski twarde.

Istnieje wiele skryptów generujących initrd, które zawierają obsługę UUID w ścieżce urządzenia root, niestety natywny Gentoo (genkernel) nie obsługuje rootwaiti nie miałem szczęścia próbować używać innych.

Proces uruchamiania przebiega w ten sposób ( jest podobny w Windows ):

  1. BIOS wybiera urządzenie rozruchowe i ładuje cokolwiek, co jest jego MBR (którym jest grub grub 1).
  2. Grub ładuje swoją konfigurację i pliki etapu 2 z urządzenia, które ustawił root, używając (hd0)dla urządzenia, z którego został załadowany przez BIOS.
  3. Grub ładuje i uruchamia jądro (wciąż ta sama numeracja, więc mogę użyć (hd0,0)ponownie).
  4. Jądro inicjuje wszystkie wbudowane urządzenia ( rootwaitczy to teraz magia).
  5. Jądro montuje partycję, w której został przekazany root(jest to parametr jądra, a nie parametr grub).
  6. init.duruchamia proces uruchamiania użytkownika, w tym montowanie elementów z /etc/fstab.

Część 5 daje mi problemy.

skolima
źródło

Odpowiedzi:

6

Myślę, że odpowiedź powinna być w użyciu albo root=LABEL=...czyroot=UUID=...

Ale wskazujesz, że to nie działa dla ciebie. Sugerowałbym sprawdzenie, czy jest jakiś problem z działaniami twojego initrd.

matli
źródło
Nie mam initrd, to jest cały problem. genkernel nie obsługuje opcji „rootwait”, a inne nie działają z Gentoo.
skolima
2

Mogę się pomylić, a może po prostu źle cię zrozumieć, ale czy wybór urządzenia rozruchowego nie jest czymś, co można skonfigurować w systemie BIOS komputera, na którym się uruchamiasz?

Myślę, że będzie to kwestia wyboru napędu USB, na którym GRUB zostanie zainstalowany jako program ładujący, a następnie wybrania dystrybucji, którą chcesz uruchomić z menu GRUB.

Justin Bennett
źródło
2

Możesz użyć:

set root='(hd0,msdos5)'
użytkownik40070
źródło