GNU GRUB - GNU GRUB

GNU GRUB
Logo GNU GRUB
Logo GNU GRUB
Debian niestabilny GRUB2 (2015).png
GRUB v2 działa w trybie tekstowym
Pierwotny autor (autorzy) Erich Boleyn
Deweloper(zy) Projekt GNU
Pierwsze wydanie 1995 ; 26 lat temu ( 1995 )
Wersja stabilna
2.06 (GRUB 2) / 8 czerwca 2021 ; 4 miesiące temu ( 2021-06-08 )
Magazyn
Napisane w Montaż , C
System operacyjny Linux , macOS , BSD , ( Solaris / illumos (port x86)) i Windows (poprzez ładowanie łańcuchowe)
Platforma IA-32 , x86-64 , IA-64 , ARM , PowerPC , s390x , MIPS i SPARC
Dostępne w angielski i inne
Rodzaj Program rozruchowy
Licencja GPLv3
Strona internetowa www .gnu .org /oprogramowanie /grub /

GNU GRUB (skrót od GNU GRand Unified Bootloader , powszechnie określany jako GRUB ) to pakiet ładujący z Projektu GNU . GRUB jest referencyjną implementacją specyfikacji Free Software Foundation 's Multiboot Specification , która daje użytkownikowi możliwość uruchomienia jednego z wielu systemów operacyjnych zainstalowanych na komputerze lub wybrania konkretnej konfiguracji jądra dostępnej na partycjach konkretnego systemu operacyjnego.

GNU GRUB został opracowany z pakietu o nazwie Grand Unified Bootloader (gra na Grand Unified Theory ). Jest używany głównie w systemach uniksopodobnych. System operacyjny GNU używa GNU GRUB jako programu ładującego, podobnie jak większość dystrybucji Linuksa i system operacyjny Solaris na systemach x86, począwszy od wydania Solaris 10 1/06.

Operacja

GRUB2 na partycjonowanym dysku twardym MBR ; etap 1 ( boot.img) można alternatywnie zapisać w jednym z sektorów rozruchowych partycji .
GRUB2 na dysku twardym partycjonowanym przez GPT , uruchamianie z oprogramowania układowego BIOS lub tryb zgodności UEFI (CSM)

Uruchamianie

Po włączeniu komputera system BIOS znajduje skonfigurowane podstawowe urządzenie rozruchowe (zwykle dysk twardy komputera) i ładuje oraz wykonuje początkowy program ładowania początkowego z głównego rekordu rozruchowego (MBR). MBR to pierwszy sektor dysku twardego, z zerem jak jego offsetowych (sektorów liczenie rozpoczyna się od zera). Przez długi czas rozmiar sektora wynosił 512 bajtów, ale od 2009 roku dostępne są dyski twarde o rozmiarze sektora 4096 bajtów, zwane dyskami Advanced Format . Od października 2013 r. dostęp do takich dysków twardych nadal odbywa się w sektorach 512-bajtowych, wykorzystując emulację 512e .

Spuścizna MBR tablicy partycji obsługuje do czterech stref i zajmuje 64 bajtów, w połączeniu. Wraz z opcjonalną sygnaturą dysku (cztery bajty) i znacznikiem czasu dysku (sześć bajtów), pozostawia to od 434 do 446 bajtów dostępnych dla kodu maszynowego programu ładującego. Chociaż tak mała przestrzeń może być wystarczająca dla bardzo prostych programów ładujących , nie jest wystarczająco duża, aby pomieścić program ładujący obsługujący złożone i wiele systemów plików , wybór opcji rozruchu za pomocą menu itp. Programy ładujące o większych rozmiarach są zatem podzielone na fragmenty, w których najmniejszy fragment mieści się w MBR i znajduje się w nim, podczas gdy większy fragment (części) jest przechowywany w innych lokalizacjach (na przykład w pustych sektorach między MBR a pierwszą partycją) i jest wywoływany przez kod MBR programu ładującego.

Obrazy jądra systemu operacyjnego to w większości przypadków pliki znajdujące się w odpowiednich systemach plików, ale koncepcja systemu plików jest nieznana systemowi BIOS. Tak więc w systemach opartych na BIOS-ie obowiązkiem programu ładującego jest dostęp do zawartości tych plików, aby można go było załadować do pamięci RAM i wykonać.

Jednym z możliwych sposobów ładowania obrazów jądra przez programy ładujące jest bezpośredni dostęp do sektorów dysku twardego bez zrozumienia podstawowego systemu plików. Zwykle wymagany jest dodatkowy poziom pośredniości w postaci map lub plików map  – plików pomocniczych zawierających listę fizycznych sektorów zajmowanych przez obrazy jądra. Mapy takie należy aktualizować za każdym razem, gdy obraz jądra zmienia swoją fizyczną lokalizację na dysku, z powodu instalowania nowych obrazów jądra, defragmentacji systemu plików itp. Ponadto, w przypadku zmiany fizycznej lokalizacji map, ich lokalizacje należy zaktualizować w ramach kod MBR programu ładującego, więc mechanizm pośrednictwa sektorów nadal działa. Jest to nie tylko uciążliwe, ale także powoduje, że system wymaga ręcznych napraw na wypadek, gdyby coś poszło nie tak podczas aktualizacji systemu.

Innym podejściem jest uświadomienie programowi ładującemu podstawowych systemów plików, dzięki czemu obrazy jądra są konfigurowane i dostępne przy użyciu ich rzeczywistych ścieżek plików . To wymaga, aby program ładujący zawierał sterownik dla każdego z obsługiwanych systemów plików, aby mógł być zrozumiany i dostępny dla samego programu ładującego. Takie podejście eliminuje potrzebę zakodowania lokalizacji sektorów dysku twardego i istnienia plików map oraz nie wymaga aktualizacji MBR po dodaniu lub przeniesieniu obrazów jądra. Konfiguracja programu ładującego jest przechowywana w zwykłym pliku, do którego uzyskuje się również dostęp w sposób uwzględniający system plików, aby uzyskać konfiguracje rozruchu przed faktycznym uruchomieniem jakichkolwiek obrazów jądra. W rezultacie znacznie zmniejsza się możliwość wystąpienia błędów podczas różnych aktualizacji systemu. Jako minus, takie programy ładujące mają zwiększoną wewnętrzną złożoność i jeszcze większe rozmiary.

GNU GRUB wykorzystuje drugie podejście, poprzez zrozumienie podstawowych systemów plików. Sam program ładujący jest podzielony na wiele etapów , co pozwala na dopasowanie się do schematu rozruchu MBR.

Powszechnie używane są dwie główne wersje GRUB-a: GRUB w wersji 1, zwany starszym GRUB-em, jest rozpowszechniony tylko w starszych wydaniach dystrybucji Linuksa. GRUB 2 został napisany od podstaw i miał zastąpić swojego poprzednika i jest obecnie używany przez większość dystrybucji Linuksa.

Wersja 0 (starsza wersja GRUB)

Menu GRUB v1 (uruchamiane w ramach instalacji Ubuntu 8.04)

GRUB 0.x stosuje podejście dwuetapowe. Główny rekord rozruchowy (MBR) zwykle zawiera GRUB stage 1 lub może zawierać standardową implementację MBR, która ładuje łańcuchem GRUB stage 1 z sektora rozruchowego aktywnej partycji . Biorąc pod uwagę mały rozmiar sektora rozruchowego (512 bajtów), etap 1 może zrobić niewiele więcej niż załadowanie następnego etapu GRUB poprzez załadowanie kilku sektorów dysku ze stałej lokalizacji w pobliżu początku dysku (w obrębie pierwszych 1024 cylindrów).

Etap 1 może bezpośrednio załadować etap 2 , ale zwykle jest skonfigurowany do ładowania etapu 1.5. , znajduje się na pierwszych 30 KB dysku twardego bezpośrednio za MBR i przed pierwszą partycją. Jeśli to miejsce nie jest dostępne (nietypowa tablica partycji, specjalne sterowniki dysków, dysk GPT lub LVM ), instalacja etapu 1.5 nie powiedzie się. Obraz stage 1.5 zawiera sterowniki systemu plików, co umożliwia bezpośrednie załadowanie stage 2 z dowolnej znanej lokalizacji w systemie plików, na przykład z /boot/grub. Etap 2 załaduje następnie domyślny plik konfiguracyjny i wszelkie inne potrzebne moduły.

Wersja 2 (GRUB 2)

GRUB 2 — wizualizacja partycjonowania MBR i GPT oraz sekwencji rozruchowej (systemy korzystające z oprogramowania układowego BIOS).

Uruchamianie w systemach z oprogramowaniem układowym BIOS

  • Zobacz ilustrację na ostatnim zdjęciu po prawej stronie.
  • boot.img( etap 1 ) jest zapisywany w pierwszych 440 bajtach głównego rekordu rozruchowego (kod rozruchowy MBR w sektorze 0) lub opcjonalnie w sektorze rozruchowym partycji (PBR). Adresuje diskboot.imgza pomocą 64-bitowego adresu LBA. Rzeczywisty numer sektora jest zapisywany przez grub-install. diskboot.imgjest pierwszym sektorem, core.imgktórego jedynym celem jest wczytanie reszty core.imgzidentyfikowanych przez LBA numerów sektorów również zapisanych przez grub-install.
  • Na dyskach z partycjami MBR core.img( etap 1.5 ) jest przechowywany w pustych sektorach (jeśli są dostępne) między MBR a pierwszą partycją. Najnowsze systemy operacyjne sugerują przerwę 1 MiB na wyrównanie (2047*512 bajtów lub 255*4KiB sektorów). Ta luka kiedyś wynosiła 62 sektory (31 KiB) jako przypomnienie o limicie liczby sektorów adresowania cylindra-głowica-sektor (C/H/S) używanego przez BIOS przed 1996 r., dlatego core.imgjest zaprojektowana tak, aby była mniejsza niż 32 KiB.
  • Na dyskach z partycjami GPT: partycje podstawowe nie są ograniczone do 4, dlatego core.imgsą zapisywane na własnej małej (1 MiB), partycji rozruchowej BIOS bez systemu plików.
  • etap 2: core.img ładowanie /boot/grub/i386-pc/normal.modz partycji skonfigurowanej przez grub-install. Jeśli indeks partycji uległ zmianie, GRUB nie będzie mógł znaleźć normal.modi wyświetli użytkownikowi monit ratunkowy GRUB.
  • W zależności od tego, jak GRUB2 został zainstalowany, /boot/grub/znajduje się on na partycji głównej dystrybucji Linuksa lub na osobnej partycji /boot .
  • po załadowaniu normal.mod: normal.mod parsuje /boot/grub/grub.cfg, opcjonalnie ładuje moduły (np. do obsługi graficznego interfejsu użytkownika i systemu plików) i wyświetla menu.

Uruchamianie w systemach z oprogramowaniem układowym UEFI

  • /efi/<distro>/grubx64.efi(dla systemów x64 UEFI) jest instalowany jako plik w partycji systemowej EFI i uruchamiany bezpośrednio przez oprogramowanie układowe, bez boot.imgsektora 0 w MBR. Ten plik jest podobny do stage1 i stage1.5.
  • /boot/grub/można zainstalować na partycji systemowej EFI lub oddzielnej partycji /boot .
  • W przypadku systemów x64 UEFI stage2 to /boot/grub/x86_64-efi/normal.modplik i inne /boot/grub/pliki.

Po uruchomieniu

GRUB przedstawia menu, w którym użytkownik może wybierać spośród systemów operacyjnych (OS) znalezionych przez grub-install. GRUB można skonfigurować tak, aby automatycznie ładował określony system operacyjny po upływie określonego przez użytkownika limitu czasu. Jeśli limit czasu jest ustawiony na zero sekund, naciśnięcie i przytrzymanie ⇧ Shiftpodczas uruchamiania komputera umożliwia dostęp do menu rozruchu.

W menu wyboru systemu operacyjnego GRUB akceptuje kilka poleceń:

  • Naciskając e, można edytować parametry jądra wybranej pozycji menu przed uruchomieniem systemu operacyjnego . Powodem robienia tego w GRUB-ie (tzn. nieedytowania parametrów w już uruchomionym systemie) może być sytuacja awaryjna: system nie uruchomił się. Korzystając z wiersza parametrów jądra można między innymi określić moduł, który ma zostać wyłączony (na czarnej liście) dla jądra. Może to być wymagane, jeśli określony moduł jądra jest uszkodzony, a tym samym uniemożliwia uruchomienie. Na przykład, aby umieścić moduł jądra na czarnej liście nvidia-current, można dodać modprobe.blacklist=nvidia-currentna końcu parametry jądra.
  • Naciskając c, użytkownik wchodzi do wiersza poleceń GRUB. Linia poleceń GRUB nie jest zwykłą powłoką Linuksa, jak np. bash , i akceptuje tylko niektóre polecenia specyficzne dla GRUB, udokumentowane przez różne dystrybucje Linuksa.

Po wybraniu opcji rozruchu GRUB ładuje wybrane jądro do pamięci i przekazuje kontrolę do jądra. Alternatywnie GRUB może przekazać kontrolę nad procesem rozruchu innemu programowi ładującemu, używając ładowania łańcuchowego . Jest to metoda używana do ładowania systemów operacyjnych, które nie obsługują specyfikacji Multiboot lub nie są obsługiwane bezpośrednio przez GRUB.

Historia

GRUB został początkowo opracowany przez Ericha Boleyna w ramach prac nad uruchomieniem systemu operacyjnego GNU / Hurd , opracowanego przez Free Software Foundation . W 1999 Gordon Matzigkeit i Yoshinori K. Okuji uczynili GRUB oficjalnym pakietem oprogramowania Projektu GNU i otworzyli proces rozwoju dla opinii publicznej. Od 2014 r. większość dystrybucji Linuksa przyjęła GNU GRUB 2, a także inne systemy, takie jak PlayStation 4 firmy Sony .

Rozwój

GRUB w wersji 1 (znany również jako „Grub Legacy”) nie jest już rozwijany i jest wycofywany. Twórcy GNU GRUB skupili się na GRUB 2, kompletnej przeróbce, której celem jest uczynienie GNU GRUB czystszym, solidniejszym, bardziej przenośnym i potężniejszym. GRUB 2 wystartował pod nazwą PUPA . PUPA była wspierana przez Agencję Promocji Technologii Informacyjnych (IPA) w Japonii. PUPA została zintegrowana z rozwojem GRUB 2 około 2002 roku, kiedy GRUB w wersji 0.9x został przemianowany na GRUB Legacy.

Niektóre z celów projektu GRUB 2 obejmują obsługę platform innych niż x86 , internacjonalizację i lokalizację , znaki spoza ASCII, moduły dynamiczne, zarządzanie pamięcią , mini-język skryptowy , migrację kodu specyficznego dla platformy (x86) do modułów specyficznych dla platformy, oraz framework zorientowany obiektowo. GNU GRUB w wersji 2.00 został oficjalnie wydany 26 czerwca 2012 roku.

Trzy z najczęściej używanych dystrybucji Linuksa używają GRUB 2 jako głównego programu ładującego. Ubuntu zaadoptowało go jako domyślny program ładujący w wersji 9.10 z października 2009 roku. Fedora poszła w jej ślady z Fedorą 16 wydaną w listopadzie 2011 roku. OpenSUSE przyjęło GRUB 2 jako domyślny program ładujący w wersji 12.2 z września 2012 roku. Solaris przyjął również GRUB 2 na platforma x86 w wydaniu Solaris 11.1.

Pod koniec 2015 r. wykryto i szybko naprawiono exploit polegający na 28-krotnym naciśnięciu klawisza Backspace w celu ominięcia hasła logowania.

Warianty

GNU GRUB jest darmowym i otwartym oprogramowaniem , więc powstało kilka wariantów. Kilka godnych uwagi, które nie zostały połączone z główną linią GRUB:

  • OpenSolaris zawiera zmodyfikowany GRUB Legacy, który obsługuje plasterki Solaris VTOC, automatyczny wybór jądra 64-bitowego i uruchamianie z ZFS (z kompresją i wieloma środowiskami rozruchowymi).
  • Google Summer of Code 2008 miał projekt wspierający dziedzictwo GRUB w celu uruchamiania z partycji w formacie ext4 .
  • Projekt Syllable stworzył zmodyfikowaną wersję GRUB, aby załadować system z systemu plików AtheOS .
  • TrustedGRUB rozszerza GRUB, wdrażając weryfikację integralności systemu i bezpieczeństwo procesu rozruchu przy użyciu modułu Trusted Platform Module (TPM).
  • Pakiet Intel BIOS Implementation Test Suite (BITS) zapewnia środowisko GRUB do testowania BIOS-ów, aw szczególności ich inicjalizacji procesorów, sprzętu i technologii Intel. BITS obsługuje skrypty za pośrednictwem języka Python i zawiera interfejsy API języka Python umożliwiające dostęp do różnych niskopoziomowych funkcji platformy sprzętowej, w tym ACPI, rejestrów procesora i chipsetu, PCI i PCI Express.
  • GRUB4DOS to starszy widelec GRUB, który poprawia wrażenia z instalacji w DOS i Microsoft Windows , umieszczając wszystko poza konfiguracją GRLDR w jednym pliku obrazu. Może być ładowany bezpośrednio z DOS, lub przez NTLDR lub Windows Boot Manager . GRUB4DOS jest aktywnie rozwijany i od 2021 r. obsługuje UEFI.

Narzędzia

Narzędzia konfiguracyjne GRUB

StartUp-Manager , program służący do konfiguracji GRUB

Narzędzia konfiguracyjne używane przez różne dystrybucje często zawierają moduły do ​​konfiguracji GRUB-a. Na przykład YaST2 w dystrybucjach SUSE Linux i openSUSE oraz Anaconda w dystrybucjach Fedora / RHEL . StartUp-Manager i GRUB Customizer to graficzne edytory konfiguracji dla dystrybucji opartych na Debianie. Rozwój StartUp-Managera zatrzymał się 6 maja 2011 r. po tym, jak główny programista podał osobiste powody, dla których program nie rozwijał się aktywnie. GRUB Customizer jest również dostępny dla dystrybucji opartych na Arch.

Dla GRUB 2 istnieją moduły sterujące KDE.

GRLDR ICE to małe narzędzie do modyfikacji domyślnej konfiguracji pliku grldr dla GRUB4DOS.

Narzędzia do naprawy rozruchu

Boot-Repair to proste narzędzie graficzne do odzyskiwania po częstych problemach z rozruchem za pomocą GRUB-a i programu ładującego Microsoft Windows . Ta aplikacja jest dostępna na licencji GNU GPL . Boot-Repair może naprawić GRUB w wielu dystrybucjach Linuksa, w tym między innymi Debian, Ubuntu, Mint , Fedora, openSUSE i Arch Linux .

Konfigurator GRUB

Instalator dla Windows

Grub2Win to pakiet oprogramowania Windows o otwartym kodzie źródłowym. Pozwala na uruchamianie GNU GRUB z katalogu Windows. Program instalacyjny instaluje GNU GRUB w wersji 2.06 na partycji NTFS. Aplikacja Windows GUI jest następnie używana do dostosowywania menu rozruchowego GRUB, motywów, kolejności rozruchu UEFI, skryptów itp. Wszystkie skrypty i polecenia GNU GRUB są obsługiwane zarówno przez UEFI, jak i starsze systemy. Grub2Win może skonfigurować GRUB do obsługi wielu systemów Windows, Ubuntu, openSuse, Fedora i wielu innych dystrybucji Linuksa. Jest dostępny bezpłatnie na licencji GNU GPL na SourceForge .

Alternatywne menedżery rozruchu

Siłą GRUB-a jest szeroka gama obsługiwanych platform, systemów plików i systemów operacyjnych, co czyni go domyślnym wyborem dla dystrybucji i systemów wbudowanych.

Istnieją jednak menedżery rozruchu skierowane do użytkownika końcowego, które zapewniają bardziej przyjazną obsługę, graficzny selektor systemu operacyjnego i prostszą konfigurację:

  • rEFInd – graficzny menedżer rozruchu w stylu Macintosh, tylko dla komputerów z systemem UEFI (BIOS nie jest obsługiwany).
  • CloverEFI — graficzny menedżer rozruchu w stylu Macintosh dla komputerów z systemem BIOS i UEFI. Emuluje UEFI z mocno zmodyfikowanym DUET z projektu TianoCore. Wymaga partycji sformatowanej w systemie FAT nawet w systemach BIOS. Jako korzyść, posiada podstawowy sterownik systemu plików w sektorze startowym partycji, co pozwala uniknąć kruchości drugiego i trzeciego etapu GRUB oraz niesławnego monitu ratunkowego GRUB. Interfejs użytkownika wygląda podobnie do rEFInd: oba dziedziczą po porzuconym menedżerze rozruchu rEFIt .

Alternatywy niegraficzne:

  • systemd-boot - Lekki menedżer rozruchu UEFI z tekstowym menu wyboru systemu operacyjnego.

Zewnętrzne linki

Instrukcje i rozwiązywanie problemów

Witryny wiki dystrybucji zawierają wiele rozwiązań typowych problemów i niestandardowych ustawień, które mogą ci pomóc:

Dokumentacja

Artykuły wprowadzające

Techniczne

Zobacz też

Bibliografia