GRUB2 nie ładuje modułów

1

Próbuję stworzyć własną pamięć USB Multiboot z niestandardową konfiguracją GRUB2. Zasadniczo postępowałem zgodnie z instrukcjami z https://wiki.archlinux.org/index.php/Multiboot_USB_drive, aby zainstalować GRUB2 na pamięci USB w trybie EFI:

  • Formatuj pamięć, mając jedną partycję EFI (100 MB) i partycję EXT4
  • zamontuj partycje w jakiejś lokalizacji
  • Wykonywanie grub-install --target=x86_64-efi --recheck --removable --efi-directory=/EFI_MOUNTPOINT --boot-directory=/DATA_MOUNTPOINT/boot

Mam więc partycję EFI, w tym grub.cfg

search.fs_uuid <uuid> root hdX,gptY 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

i partycja rozruchowa zawierająca tylko jeden folder / boot / grub

  • czcionki (folder)
  • locale (folder)
  • x86_64-efi (folder)
  • grubenv (plik)

Działa to tak dalece, jak mogę napisać własny plik grub.cfg w katalogu / boot / grub, zawierający pewne menuentrys, i mogę uruchomić z tych wpisów. Ale nie mogę załadować żadnych modułów. Jeśli wprowadzę wiersz poleceń, np. Pisanie

insmod ntfs

absolutnie nic nie robi. Nie ma żadnego komunikatu o błędzie ani nic, moduł po prostu się nie ładuje (sprawdzane przez lsmod). Próbowałem też adresować bezwzględnie

insmod (hdX,gptY)/boot/grub/x86_64-efi/ntfs.mod

z tym samym wynikiem. Ścieżka jest poprawna, ponieważ na przykład mogę cat plik .mod do standardowego wyjścia.

To, co właściwie mogę zrobić, to usunąć moduły. Na przykład

rmmod btrfs
rmmod btrfs

powoduje wyświetlenie komunikatu o błędzie tylko w drugim wierszu, więc moduł btrfs zostaje usunięty, co potwierdza wyjście lsmod. Ale pisanie (gdy btrfs jest już usunięte)

insmod btrfs (or absolute addressing like above)
rmmod btrfs

powoduje wyświetlenie komunikatu o błędzie w wierszu 2, więc pierwszy wiersz oczywiście nie przyniósł żadnego efektu.

Czy masz pojęcie, co się dzieje? Próbowałem nawet skopiować folder mod na partycję EFI, ale to nie pomogło ...

Z góry dziękuję

gruber235
źródło

Odpowiedzi:

2

Wypróbowałem kilka różnych opcji „multiboot USB”. Podoba mi się ten jeden, ponieważ jest dynamiczny, wszystko, co musisz zrobić, to dodać pliki ISO, a on znajdzie nowy plik ISO i doda go do menu. Brak konfiguracji menu GRUB. Miałem problem z Linux Mint Debian Edition 3, ale to działa z tym. Zawsze możesz spojrzeć na jego skrypty, aby zobaczyć, jak to działa.

Powodzenia.

tutaj jest strona:

https://github.com/mpolitzer/grub-iso-multiboot

MJC
źródło
1

Ok, właśnie się dowiedziałem, że jest to spowodowane Bezpiecznym uruchomieniem. Według https://forums.opensuse.org/showthread.php/531587-is-GRUB-deliberately-broken-in-openSUSE

Jeśli włączony jest bezpieczny rozruch, wówczas grub2-efi wewnętrznie wyłącza „insmod”, aby zapobiec naruszeniom bezpiecznego rozruchu. I „grub2” został załadowany z „grub.efi” na twojej partycji EFI, która już wstępnie załadowała moduły normalnie potrzebne. Dodatkowo „linux” nie jest dozwolony, jeśli włączony jest bezpieczny rozruch - należy użyć „linuxefi” (który sprawdza podpisy).

I grub-install --help daje

--no-uefi-secure-boot: nie instaluj obrazu używanego z UEFI Secure Boot, nawet jeśli system zaczął z niego korzystać. Ta opcja jest dostępna tylko w EFI.

Więc jeśli twoja bieżąca maszyna została uruchomiona przy użyciu Bezpiecznego rozruchu, grub-install instaluje tę wersję GRUB i nie możesz wstawić żadnych modułów. O dziwo w moim przypadku GRUB miał załadowany moduł „linux”, ale nie ma modułu „linuxefi”. Tak czy inaczej, oto moja zaktualizowana konfiguracja:

  • Formatuj pamięć, mając jedną partycję EFI (100 MB) i partycję EXT4 (jako partycja danych dla wszystkiego, co nie jest związane z GRUB)
  • Zamontuj partycję EFI
  • Wykonać grub-install --target=x86_64-efi --recheck --removable --no-uefi-secure-boot --efi-directory=/EFI_MOUNTPOINT --boot-directory=/EFI_MOUNTPOINT/boot

Nie mogę wyłączyć Bezpiecznego rozruchu na moim komputerze, ale oznaczyłem pliki .efi jako bezpieczne. Korzystanie z tej konfiguracji (i oznaczanie /EFI/BOOT/BOOTX64.EFI jako bezpieczne w komputerach EFI) działało dla mnie, a GRUB jest teraz w pełni funkcjonalny. Używanie --boot-directory=/DATA_MOUNTPOINT/bootjak w mojej oryginalnej konfiguracji spowodowało awarię GRUBA i przejście do trybu ratunkowego.

Biorąc pod uwagę, jak powszechny jest obecnie Bezpieczny rozruch, uważam, że dość denerwujące jest to, że takie zachowanie nie jest wspomniane nigdzie w całej instrukcji GRUB2.

gruber235
źródło
0

Możesz użyć dysku Super UEFIinSecureBoot, który jest specjalnie zaprojektowany do tego przypadku. Zawiera zmodyfikowany program ładujący, który nie tylko ładuje moduły w trybie Bezpiecznego rozruchu, ale także przejmuje funkcje weryfikacji plików, aby załadować dowolne niezaufane pliki EFI.

ValdikSS
źródło