Czy możliwa jest hybrydowa pamięć USB Linux dla UEFI i starszego systemu BIOS?

14

moim pomysłem jest stworzenie USB-Boot-Stick z Lubuntu, który byłby zdolny do uruchamiania na starszym laptopie BIOS i nowszych systemach UEFI.

Byłoby to dość łatwe, gdy Stick byłby skonfigurowany jako starsze urządzenie rozruchowe, ale chcę, aby było to urządzenie obsługujące UEFI.

  1. Czy to ma w ogóle sens ?! Czy też zrozumiałem, że koncepcja UEFI jest strasznie błędna?
  2. W razie potrzeby mogą być dwie różne instalacje systemu Linux (jedna dla UEFI, jedna dla starszych wersji, ale obie na tym samym dysku)
  3. Uruchom urządzenie GPT na starszym Biosie - czy to zadziała?

Nie widzę wyraźnego, może być po prostu lepszym pomysłem mieć oddzielną starą wersję bootowania Linuksa, ale jestem ciekaw odkrywania granic :)

Czy mój pomysł na hybrydowy linux-uefi-boot-usb-stick, który działałby ze starszymi biosami jest możliwy?


(3) wydaje się być możliwe dla Linuksa z grub http://www.rodsbooks.com/gdisk/booting.html

Co więcej, mam partycję EF00 gotową na tym drążku, oprócz Swap, Fat32 i dwóch partycji Ext4.


(1) wydaje się również możliwe http://www.rodsbooks.com/bios2uefi/

Te instrukcje pochodzą jednak z 2012 roku, minęło trochę czasu, ponieważ - czy ktoś ma działający przykład, który jest łatwiejszy?


Dla innych badaczy tego tematu:

Uruchamianie systemu Windows 7 z dysku GPT na płycie głównej innej niż EFI Czy istnieje sposób na uruchomienie systemu Windows 7/8 przy użyciu systemu BIOS na GPT?

http://www.borncity.com/blog/2012/07/25/uefi-emulation-auf-pcs/


AKTUALIZACJA:

Udało mi się stworzyć część UEFI, w tym bezpieczną konfigurację rozruchu za pomocą rEFInd.

Zgodnie z podanymi wskazówkami ddkopiowałem gptmbr.binna dysk, który wydaje się teraz robić przynajmniej coś w systemie BIOS: „To nie jest dysk rozruchowy”

Postępowałem jednak zgodnie z radą i ustawiłem pmbrflagę dysku i legacy bootflagę gpt - nadal otrzymujesz ten błąd, jakieś pomysły?

Moja partycja ESP jest drugą partycją na dysku i jest instalowana z plikami efi.

Ustawić:

  • 64 GB miejsca
  • GPT Partitiontable
  • Dysk ma ustawioną flagę pmbr
  • Pierwsza partycja zaczyna się od 16 MB i ma około 45 GB, co oznacza 32 główne dane
  • Druga partycja zaczyna się około 45 GB i jest to system EFI (fat32) z działającą konfiguracją rEFInd
  • 3 - 5 partycja to home (ext4), swap i root (ext4) mojego działającego Lubuntu 14.04.1

Za pomocą ddskopiowałem gptmbr.binmój skompilowany Syslinux 6.02 do pierwszych 440 bajtów.

W parted 3.2 widzę, że moja partycja 2 ma flagę booti legacy_boot.

Podczas rozruchu otrzymuję Brak dysku rozruchowego - jeśli ustawię swoją 5. zamiast 2. partycji legacy_boot, otrzymuję brakujący system operacyjny

To żyje!

(Jak moje stare pytanie zostało usunięte /ubuntu//q/516730/319747 )


Domyślam się, że muszę skopiować niektóre *.c32i inne pliki do folderu syslinux eighter na moim EFI (gdzie ?!) lub na głównej partycji ( /boot/syslinux?!), Aby go uruchomić - mam rację? Jakie pliki są niezbędne?

Co więcej, chyba też będę potrzebować tego syslinucx.cfgpliku - prawda?


Moim celem byłoby przynajmniej bezpośrednie uruchomienie systemu lubuntu na głównej partycji ext4.

Aktualizacja:

Chociaż nie mam pojęcia, dlaczego to działa - ale nie z ręczną instalacją.

  • pmbrflag było złe i zakazane mój system UEFI z uruchomieniem kij jak UEFI
  • legacy_bootflag było konieczne dla mojego 5th partycji (root linux)
  • Musiałem użyć extlinux --install /path/to/root/parition
  • Musiałem utworzyć syslinux.cfgw folderze syslinux pod startem mojej partycji root

Zrobiłem to wszystko na drugim mniejszym patyku, a potem próbowałem skopiować tylko folder syslinux, ale nie miałem szczęścia - extlinux --installwydaje się to obowiązkowe.

Czy ktoś wie, co dokładnie extlinux --installrobi? Czy można to zrobić ręcznie lub jak inaczej można zainstalować nowszą wersję, taką jak 6.02, bez instalowania jej w systemie?

Mam kij do pracy z partycjami wymienionymi w BIOS, UEFI i UEFI SecureBoot, do diabła z przejażdżką, wiele się nauczyłem, prawie zabiłem 2 TB z rozstaniem, bądź ostrożny i powodzenia.

Jook
źródło
twój link jest zepsuty .. czy masz swoją historię gdzieś indziej? chciałbym zrobić to samo. dzięki.
pvinis
1
@pvinis dzięki za informację, scalam pytanie / wynik z askubuntu tutaj, ponieważ został usunięty
Jook

Odpowiedzi:

11

Jest to możliwe i bardzo często odbywa się to zarówno przy użyciu zewnętrznych pamięci USB, jak i napędów wewnętrznych.

W odniesieniu do typów tabel partycji:

  • BIOS zwykle nie potrzebuje żadnej tablicy partycji. Jest zainteresowany tylko częścią kodu bootstrap, która jest pierwszymi 440 bajtami twojego MBR. (Chociaż są wyjątki. Niektóre implementacje BIOS-u faktycznie się psują, jeśli nie mogą znaleźć MBR z jednym ze zwykłych typów partycji. Mam nadzieję, że są one rzadkie.)

    Tabela partycji GPT nie zastępuje fizycznie MBR - zawsze zaczyna się od sektora 1, podczas gdy MBR znajduje się w sektorze 0 - więc możliwe jest, że dysk ma oba. W rzeczywistości, większość dysków GPT nie mają „MBR ochronną”, zawierającą tylko jedną partycję, która obejmuje cały dysk, aby zapobiec starszych narzędzi do partycjonowania MBR tylko przed przypadkowym zniszczeniem danych.

    Możesz więc na przykład zainstalować sektor rozruchowy Syslinux w MBR, a on się uruchomi. (  syslinux-install_updateSkrypt zrobi to za Ciebie, ale możesz poszukać gptmbr.binw pakiecie syslinux, aby zrobić to ręcznie.)

    Podobnie jak flaga „aktywna” na partycjach MBR, Syslinux będzie szukać flagi „starszej wersji BIOS-u do rozruchu” na partycjach GPT (bit 2 - specyfikacja UEFI 2.4 sekcja 5.3.3 tabela 20); wyżej wspomniany skrypt również ustawia tę flagę automatycznie, jeśli masz sgdisk(z gptfdisk) zainstalowany.

    GRUB może być również używany, ale jest też trochę bardziej irytujący. Ponieważ GRUB 2 chce „osadzić” swoje części w tradycyjnie nieużywanych sektorach 1-62, zastąpiłoby GPT, które są przechowywane w tej samej lokalizacji. Może więc być konieczne utworzenie dedykowanej partycji o wielkości 2-4 MB i oznaczenie jej jako rozruchowej z systemu BIOS, aby grub-installznalazło się miejsce do osadzenia.

  • Z drugiej strony, specyfikacja UEFI nie wymagają wsparcia dla typów partycji MBR (rozdział 12.3.1) i przypisać typ partycji MBR 0xEFna partycji systemowej EFI (sekcja 5.2.2).

    Więc jeśli z jakiegoś powodu nie możesz uruchomić swojego dysku z GPT, nadal możesz utworzyć partycję systemową EFI na MBR i będzie ona używana, o ile będzie mieć prawidłowy system plików i wszystkie niezbędne pliki (sekcja 12.3.1.3):

    W przypadku nośników wymiennych musi istnieć tylko jedna partycja systemowa zgodna z UEFI, która musi zawierać katalog zdefiniowany przez UEFI w katalogu głównym. Katalog zostanie nazwany EFI. Wszystkie programy ładujące i aplikacje systemu operacyjnego będą przechowywane w podkatalogu poniżej o EFInazwie BOOT. W BOOTkatalogu musi znajdować się tylko jeden wykonywalny obraz EFI dla każdej obsługiwanej architektury procesorów . Aby nośniki wymienne były uruchamialne w ramach EFI, muszą być zbudowane zgodnie z zasadami określonymi w sekcji 3.4.1.1.

Jeśli chodzi o systemy operacyjne, Linux zasadniczo nie dba o to, czy został uruchomiony dzisiaj z BIOS-u, a jutro z UEFI. W tym tygodniu musiałem ponownie uruchomić laptopa z trybu UEFI do trybu „BIOS” iz powrotem sto razy, próbując znaleźć błąd we wsparciu UEFI 3.17 ...


Zauważ, że artykuł „Transformacja systemu BIOS na UEFI” dotyczy zupełnie innej rzeczy. Opisuje sposób instalacji samego UEFI - implementacji UEFI o nazwie „DUET” - która ma być uruchamiana z systemu tylko BIOS. Nie ma to nic wspólnego z uruchamianiem systemu operacyjnego bezpośrednio z BIOS-u.

użytkownik1686
źródło
+1 - syslinux_install Zajmę się tym, dziękuję za potwierdzenie, zapewnienie i nowe informacje
Jook
Postępowałem zgodnie z twoją radą, ale utknąłem w konfiguracji, mbrwydaje się, że wszystko jest w porządku, ale nie mogę znaleźć EFI Systempartycji. Czy to problem, że jest to druga partycja na dysku zaczynająca się od około 45 GB na dysk? Czy muszę skonfigurować dział EFI oprócz istniejącej konfiguracji EFI?
Jook
Mam działa :) więc, dziękuję! syslinux jest całkiem niezły i zaprowadził mnie do gPxe i plopkexec, które zbadam jeszcze raz. W przypadku jakichkolwiek innych badaczy: askubuntu.com/q/516730/319747
Jook
2

Tak, jest to możliwe.

Podstawową ideą jest podzielenie pamięci USB na GPT w następujący sposób:

  1. Partycja rozruchowa systemu BIOS (typ GPT 1686148-6449-6E6F-744E-656564454649) - 1 MiB, bez systemu plików
  2. Partycja systemowa EFI (typ GPT C12A7328-F81F-11D2-BA4B-00A0C93EC93B) - system plików 200 MiB, VFAT
  3. Partycja rozruchowa systemu Linux (typ GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - 1 system plików GiB, ext4
  4. System plików root / home systemu Linux (typ GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - pozostała przestrzeń, system plików XFS lub Btrfs

Partycjonowanie pozwala nam uruchamiać się w starszych systemach, ponieważ dzięki GPT wciąż jest miejsce na MBR (ze względu na kompatybilność wsteczną), a Grub2 ma wystarczająco dużo miejsca, aby zainstalować część środkową na partycji rozruchowej BIOS. Starsze BIOS-y nie dbają o schemat partycjonowania, a jądro Grub2 / Linux nie ma problemów ze zrozumieniem GPT w starszych systemach.

W systemach UEFI oprogramowanie układowe UEFI ignoruje MBR i wykorzystuje partycję systemową EFI jako punkt wejścia.

Na przykład w Fedorze zasadniczo musisz wykonać następujące czynności:

Upewnij się, że system plików Linux Boot jest zamontowany pod, /boota system plików partycji systemowej EFI jest zamontowany pod /boot/efi.

(Ponownie) Zainstaluj starsze moduły ładujące i moduł ładujący UEFI:

grub2-pc grub2-efi-x64 shim-x64 efibootmgr

(Re-) Wygeneruj pliki konfiguracyjne grub zarówno dla starszego, jak i rozruchu UEFI:

# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg

W zależności od tego, czy system został uruchomiony w trybie starszym, czy w trybie UEFI, musisz naprawić pierwszy lub drugi plik i zastąpić (linux|initrd)16go (linux|initrd)efina odwrót.

Zainstaluj gruba w MBR:

# grub2-install --target=i386-pc /dev/sd_your_usb_stick_device

Voila

maxschlepzig
źródło
PS: Napisałem skrypt obsługi administracyjnej, który implementuje to hybrydowe podejście, dzięki czemu można go użyć do automatycznego utworzenia takiej pamięci USB.
maxschlepzig