MBR: Jak BIOS decyduje, czy dysk można uruchomić, czy nie?

12

Próbując odpowiedzieć na to pytanie na askubuntu: Jak odinstalować GRUB , przeczytałem artykuł w Wikipedii na temat MBR, a także idealną odpowiedź na nieco powiązane pytanie tutaj na Superuser, jednak jedna rzecz nadal nie jest dla mnie jasna:

Co dokładnie sprawia, że ​​BIOS decyduje, czy dysk można uruchomić? W jaki sposób sekwencja rozruchowa przeskakuje z dysku nr 1 i kontynuuje próbę rozruchu z dysku nr 2, jeśli w systemie jest zainstalowany więcej niż jeden dysk?

Rozumiem, że jedyną rzeczą, którą BIOS zwykle sprawdza w MBR, jest jego podpis na samym końcu 512-bajtowego sektora, a następnie po prostu przenosi kontrolę do początkowego programu ładującego znajdującego się w pierwszych 446 bajtach sektora rozruchowego.

Czy to oznacza, że ​​pierwsze 446 bajtów sektora rozruchowego MUSI zawierać jakiś znaczący kod programu ładującego, nawet jeśli dysku nie można uruchomić?

Po tym, jak BIOS przeniósł kontrolę do bootloadera na dysku nr 1, który akurat nie miał partycji „bootowalnych” - jak dokładnie jest wywoływany bootloader na drugim dysku?

Przepraszam, jeśli jest to zbyt techniczne :) Krótkie pytanie brzmi: „W jaki sposób BIOS pomija napęd i próbuje uruchomić się z następnego?”

Siergiej
źródło

Odpowiedzi:

16

Co dokładnie sprawia, że ​​BIOS decyduje, czy dysk można uruchomić?

BIOS decyduje, czy napęd rozruchowy oparty na płycie działowej 16 bajtów, obecne po obszarze MBR (utrzymywany w tabeli zaczynając od 446 p bajtów). Pierwszy bajt w każdym rekordzie partycji reprezentuje stan rozruchowy dysku (i jest ustawiony na 0x80rozruchowy lub 0x00jeśli nie). Niektóre BIOS-y mogą sprawdzać inne części MBR (np. Typy partycji, sumy kontrolne), ale podstawowym wymaganiem jest flaga startowa.

W jaki sposób sekwencja rozruchowa przeskakuje z dysku nr 1 i kontynuuje próbę rozruchu z dysku nr 2, jeśli w systemie jest zainstalowany więcej niż jeden dysk?

Jest to zależne od implementacji i dlatego musisz odpowiednio wybrać kolejność rozruchu. W większości przypadków BIOS przejrzy każdy nośnik pamięci w ustalonej kolejności i określi, czy można go uruchomić z tego urządzenia (za pomocą danych MBR). Jeśli to możliwe, robi to - jeśli nie, kontynuuje zapętlanie innych urządzeń (ponownie, w wybranej kolejności).

Po tym, jak BIOS przeniósł kontrolę do bootloadera na dysku nr 1, który akurat nie miał partycji „bootowalnych” - jak dokładnie jest wywoływany bootloader na drugim dysku?

Po znalezieniu prawidłowego urządzenia rozruchowego (tj. Ustawieniu flagi rozruchowej i pozytywnym przejściu innych kontroli) BIOS kopiuje sektor MBR do pamięci RAM. BIOS następnie przenosi wskaźnik instrukcji na początek tej lokalizacji (za pomocą JUMPinstrukcji), gdzie znajduje się segment kodu MBR, a następnie komputer się uruchamia.

Jeśli system BIOS obsługuje specyfikację rozruchu systemu BIOS , kod MBR może przywrócić kontrolę do systemu BIOS za pomocą określonej instrukcji, sygnalizując awarię rozruchu i monitując o wypróbowanie następnego urządzenia. Starsze BIOS-y po prostu drukują komunikat o błędzie. Dobrze powiedzieć, czy BIOS obsługuje to, czy można uruchomić z USB.

Rozumiem, że jedyną rzeczą, którą BIOS zwykle sprawdza w MBR, jest jego podpis na samym końcu 512-bajtowego sektora, a następnie po prostu przenosi kontrolę do początkowego programu ładującego znajdującego się w pierwszych 446 bajtach sektora rozruchowego.

Jest to poprawne, chociaż należy zauważyć, że większość współczesnych BIOS-ów będzie również szukać tabeli partycji GUID, a także starszej, tradycyjnej tabeli w stylu MBR.

Czy to oznacza, że ​​pierwsze 446 bajtów sektora rozruchowego MUSI zawierać jakiś znaczący kod programu ładującego, nawet jeśli dysku nie można uruchomić?

Nie , ale dysk musi mieć prawidłową tablicę partycji MBR lub GUID - w przeciwnym razie komputer nie wykryje go. Podczas gdy część kodowa MBR może być rzeczywiście pusta, pierwszy sektor dysku musi mieć dobrze uformowany MBR / GPT.

Przełom
źródło
Dzięki za bardzo szczegółową odpowiedź. Więc kryterium prawidłowego urządzenia rozruchowego jest obecność partycji rozruchowej w tabeli partycji i niektóre „inne dodatkowe kontrole”? Jestem trochę zdezorientowany, ponieważ w pierwotnym pytaniu na AskUbuntu autor pokazuje, że wszystkie partycje na dysku nie są bootowalne i wciąż widzi błąd spowodowany przez zepsuty GRUB - który w ogóle nie powinien był być wywoływany przez BIOS ponieważ dysk nie spełnia kryteriów „rozruchowych”, więc BIOS powinien po prostu pominąć dysk i przejść do następnego
Sergey
@Sergey Patrzyłem na to pytanie i nie jestem pewien. Jest możliwe, że MBR jest uszkodzony lub bootowalny flaga jest ustawiona na niepoprawną wartość (nie wiem, jak fdiskbędzie obsługiwać te przypadki, choć pierwotna wersja zrobił flag nieprawidłowe nagłówki MBR). Poradziłem OP, aby opublikował surowy nagłówek MBR, ale może także chcieć „włączyć” / wyłączyć flagę rozruchową (aby ręcznie ustawić / zresetować flagę).
Przełom
Pamiętaj, że kod BIOS nie jest ogólny. Jest raczej specyficzny dla każdej płyty głównej, więc wie, jakie dyski mogą być podłączone do jakich portów.
LatinSuD
Ta odpowiedź nie jest do końca poprawna. FWIU, sprawdzanie, czy jest aktywna partycja i czy to coś, co robi „domyślny” kod rozruchowy MBR, a nie BIOS. NeoSmart przedstawia bardziej wiarygodny opis: „Na komputerach kompatybilnych z IBM (w zasadzie wszystko) ostatnie dwa bajty 512-bajtowego MBR są nazywane sygnaturą rozruchową i są używane przez BIOS do ustalenia, czy wybrany dysk rozruchowy jest rzeczywiście bootowalny, czy nie." Ostatnia część jest po prostu zła. Starsza wersja systemu BIOS może zostać uruchomiona z GPT (z odpowiednim kodem rozruchowym systemu BIOS), ponieważ jest to zasadniczo rozruch w „wolnym stylu”.
Daniel B,
@DanielB obie te kwestie zostały bezpośrednio rozwiązane w odpowiedzi: „BIOS zwykle sprawdza MBR na podstawie jego podpisu na samym końcu 512-bajtowego sektora, a następnie przekazuje kontrolę do początkowego programu ładującego znajdującego się w pierwszych 446 bajtach sektora rozruchowego ” i „ większość współczesnych BIOS-ów będzie również szukać tabeli partycji GUID, a także starszej, tradycyjnej tabeli w stylu MBR ” .
Przełom