Co wybrać – GPT czy MBR? Wyjaśniamy, czym różnią się te standardy. Instalowanie systemu Windows na dysku przekonwertowanym z MBR na GPT bez utraty danych na partycjach niesystemowych Utwórz partycję mbr

Zanim zadasz pytanie w wątku dotyczącym MBR, przeczytaj poniższe informacje:

1. Co to jest MBR i dlaczego jest ważny w obsłudze komputera?
W tłumaczeniu z języka angielskiego MBR to skrót oznaczający główny/główny rekord rozruchowy lub główny rekord rozruchowy. Rekord ten znajduje się w pierwszym fizycznym sektorze dysku twardego i odgrywa główną rolę w ładowaniu systemu operacyjnego, a raczej wyborze partycji, z której ma zostać załadowany system operacyjny. Zatem MBR zawiera informacje o partycjach dysku twardego (tabela partycji). Po uruchomieniu komputera rekord MBR jest ładowany do pamięci BIOS (podstawowy system wejścia/wyjścia), gdzie ma kontrolę nad ładowaniem systemu, a raczej wybór, która partycja ma być aktywna. Dlatego w systemie Acer, aby móc skorzystać z systemu odzyskiwania systemu (eRecovery Management) z ukrytej partycji, należy jednocześnie nacisnąć klawisze Alt-F10 podczas uruchamiania komputera (tj. gdy pojawi się logo Acer, podczas testu POST Przeprowadzany jest test BIOS-u). Ta kombinacja klawiszy umożliwia MBR wybranie pierwszej partycji (PQService) jako partycji aktywnej. Kiedy komputer uruchamia się normalnie, druga partycja pozostaje partycją aktywną, na której zainstalowany jest system operacyjny głównego użytkownika. Na powyższym rysunku starałem się graficznie przedstawić zasadę działania MBR, gdzie widać pierwszą ukrytą partycję „PQService”, drugą partycję z zainstalowanym systemem „C:” i trzecią partycję na dane użytkownika „D” :”.

Prezentowane są tutaj dyski z trzema i czterema partycjami (w tym drugim przypadku ukryta jest czwarta partycja z Instant-On-Arcade „IOArcade”, która umożliwia załadowanie powłoki multimedialnej bez ładowania głównego systemu operacyjnego).

2. Kombinacja klawiszy Alt+F10 nie działa. Co mam zrobić?
Jeśli po naciśnięciu Alt+F10 nie będzie można uruchomić komputera z ukrytej partycji (wprowadź Acer eRecovery Management), oznacza to zastąpienie oryginalnego rekordu MBR Acer głównym rekordem rozruchowym zainstalowanego systemu operacyjnego. Aby zainstalować oryginalny MBR (od Acer) w systemie Windows XP, Vista, użyj tej poprawki (rozpakuj i uruchom). Jeśli preinstalowany był system Windows 7, to po rozpakowaniu uruchom tę poprawkę. Po ponownym uruchomieniu systemu spróbuj ponownie nacisnąć Alt+F10.

3. Usunąłeś ukryte partycje i nie zamierzasz używać Acer eRecovery Management. Co zrobić w tym przypadku?
Najpierw musisz wyłączyć funkcję „D2D Recovery” w BIOS-ie. Następnie możesz samodzielnie zainstalować system operacyjny lub skorzystać z dysków do odzyskiwania dostarczonych z komputerem lub utworzonych za pomocą programu Acer eRecovery. W tym drugim przypadku program przywracający automatycznie wykryje brak ukrytej partycji i zainstaluje system na pierwszej partycji, z której następnie zostanie uruchomiony zainstalowany system operacyjny.

Ponadto: aby przywrócić program ładujący systemu Windows XP (jeśli ten system operacyjny jest zainstalowany), użyj tego narzędzia. Bądź ostrożny! Uruchom plik tylko wtedy, gdy masz zainstalowany system Windows XP. Jeśli chcesz przywrócić program ładujący systemu Windows Vista, uruchom to narzędzie.

Jeśli chcesz naprawić MBR w środowisku DOS, narzędzie mbrwrwin.exe nie będzie działać. Użyj w tym celu.

Wszystkie pytania wyrażamy w tym temacie na forum:

Materiał został przygotowany specjalnie dla serwisu http://(autor – Guryev Denis, GDenis)
e-mail [e-mail chroniony]
(modyfikowanie materiału, kopiowanie i rozpowszechnianie tylko za zgodą autora)

Jednym ze skutecznych kroków w celu rozwiązania problemów z uruchamianiem systemu Windows jest przywrócenie rekordu rozruchowego systemu Windows 10/7/8.1 z nową partycją UEFI i GPT lub BIOS z partycjonowaniem MBR. Jedną z najczęstszych przyczyn uszkodzenia głównego rekordu rozruchowego jest infekcja złośliwym oprogramowaniem lub uszkodzenie plików w tym sektorze. Nieprawidłowe zamknięcie może również prowadzić do uszkodzenia rekordu rozruchowego (MBR). Czasami pojawiają się problemy, gdy zainstalowany jest Linux Grub, a system Windows nie może go wykryć. W niektórych przypadkach może pojawić się błąd Brakuje bootmgr Lub BCD po włączeniu komputera. W takich przypadkach możesz uruchomić naprawę programu ładującego, aby rozwiązać te problemy.

Jak przywrócić program ładujący systemu Windows 10

Powinieneś być przygotowany, ponieważ Twój komputer nie uruchomi się na pulpicie, a dodatkowe opcje rozruchu mogą nie być skuteczne. Dlatego potrzebujesz systemu Windows 10 z tą samą głębią bitową (x32 lub x64), którą zamierzasz naprawić, i najlepiej w tej samej wersji. Aby uruchomić wiersz poleceń, należy uruchomić wszystkie poniższe metody z rozruchowego dysku flash USB. Pamiętaj, że po przywróceniu bootloadera mogą pojawić się pewne błędy i wystarczy kilka razy zrestartować komputer, aby bootloader się do tego przyzwyczaił.

Rozpocznij instalację systemu Windows 10 z rozruchowego dysku flash USB i przejdź do punktu instalacji. Następnie kliknij na dole „ Przywracanie systemu", aby uzyskać dostęp do dodatkowych opcji rozruchu.

Metoda 1. Po przejściu do zaawansowanych opcji rozruchu przejdź do „ " > "Dodatkowe opcje„ > i wybierz „”. Poczekaj na zakończenie procesu i moduł ładujący systemu Windows 10 powinien zostać przywrócony.

Metoda 2. W tych samych zaawansowanych opcjach rozruchu przejdź do „ Rozwiązywanie problemów" > "Dodatkowe opcje" > i biegnij " Wiersz poleceń".


Najpierw upewnimy się, na którym dysku lokalnym znajduje się system, na którym chcemy przywrócić bootloader. Aby to zrobić, uruchom następujące trzy polecenia w wierszu poleceń, naciskając klawisz Enter po każdym:

  1. część dysku
  2. objętość listy- wyświetla listę sekcji.
  3. Wyjście- wyjście z narzędzia do pracy z dyskami.

W moim przypadku poniższy zrzut ekranu pokazuje, że dysk lokalny, na którym jest zainstalowany system Windows 10, to nie „C”, ale „D”. Najprawdopodobniej będziesz mieć literę „C”, ale bądź ostrożny, musisz określić, gdzie masz zainstalowany system. Po ustaleniu, pod jaką literą znajduje się Twój system, wprowadź następujące polecenie, aby przywrócić program ładujący systemu Windows 10:

  • bcdboot D:\windows

Metoda 3. Jeśli korzystasz z systemu Windows z nowym UEFI i schematem partycji GPT, to musisz znaleźć ukrytą partycję z systemem plików FAT32 (jest to około 90-300 MB). Jeśli masz partycję BIOS i MBR, systemem plików będzie NTFS (około 500 MB). W moim przypadku jest to NTFS. Oznacza to, że uruchamiamy wiersz poleceń za pośrednictwem rozruchowego dysku flash USB, jak opisano powyżej, i wpisujemy polecenia:

  1. część dysku- uruchamia narzędzie do pracy z dyskami.
  2. objętość listy- wyświetla listę sekcji.
  3. wybierz głośność 3- Wybór ukryty woluminy (w moim przypadku jest to NTFS, możesz mieć ukryty system plików FAT32).
  4. format fs=ntfs Lub format fs=fat32- formatowanie wybranego woluminu (w zależności jaki posiadasz).
  5. przypisz literę=E- Przypisujemy do tego nową literę (przypisałem to, co już było).
  6. Wyjście- wyjdź z narzędzia discpart.
  7. bcdboot D:\Windows /s E: /f WSZYSTKO- skopiuj pliki bootloadera. (W moim przypadku dysk D: to wolumin, na którym znajduje się sam system Windows, E: to litera, którą przypisaliśmy do ukrytej partycji).
  8. część dysku- ponownie uruchamia narzędzie dyskowe.
  9. objętość listy- wyświetlić listę sekcji.
  10. wybierz głośność 3- Numer ukrytego woluminu, do którego przypisaliśmy literę.
  11. usuń literę=E- usuń literę, aby partycja nie była wyświetlana w systemie po ponownym uruchomieniu.


Metoda 4. W tej metodzie użyjemy narzędzia Bootrec.exe. Wpisz kolejno następujące polecenia w wierszu poleceń:

  1. bootrec /RebuildBcd
  2. bootrec /fixMbr
  3. bootrec/fixboot

Wyloguj się i zrestartuj system.


W niektórych przypadkach konieczne będzie wykonanie dodatkowego polecenia:

  • bootsect /nt60 SYS Lub bootsect /nt60 WSZYSTKO

W tej sekcji pokażę Ci, jak napisać własnego menedżera multiboot. Menedżer multiboot to kod znajdujący się w sektorze rozruchowym, który według wyboru użytkownika ładuje dowolny z kilku systemów operacyjnych zainstalowanych na komputerze. Podczas dyskusji zapoznasz się z przerwaniem INT 13h, tablicą partycji itp. Standardowy program ładujący, który domyślnie instaluje większość systemów operacyjnych, jest zbyt prymitywny, aby można go było traktować poważnie, a niestandardowe programy ładujące od zewnętrznych programistów są zwykle zbyt nieporadne i zawodne. Napiszmy więc własne! Pisząc go, poznamy Tao i Zen asemblera, nauczymy się debugować programy bez debugera i przyjrzymy się bliżej niskopoziomowym interfejsom dysku twardego.

Interfejs INT 13h

Dyskami można zarządzać zarówno poprzez porty we/wy, jak i poprzez BIOS. Porty są znacznie potężniejsze i ciekawsze, ale BIOS jest znacznie łatwiejszy do zaprogramowania, a także obsługuje dużą liczbę dysków o różnych rozmiarach, abstrakcyjnie od cech konstrukcyjnych każdego konkretnego modelu. Dlatego będziemy działać przez niego, a dokładniej poprzez interfejs przerwań INT 13h.

Numer funkcji wpisywany jest do rejestru AH. W przypadku czytania jest równa dwa. Rejestr AL odpowiada za liczbę przetwarzanych sektorów. Ponieważ będziemy czytać jeden sektor na operację, umieścimy go tutaj. Rejestr DH przechowuje numer głowicy, a rejestr DL przechowuje numer dysku (80h to pierwszy dysk twardy, 81h to drugi itd.). Pięć najmniej znaczących bitów rejestru CL określa numer sektora, pozostałe bity rejestru CL i osiem bitów rejestru CH określają numer cylindra, który chcemy odczytać. Para rejestrów ES:BX wskazuje adres bufora docelowego. Właściwie to wszystko. Po wykonaniu polecenia INT 13h odczytane dane trafią do bufora, a w przypadku wystąpienia błędu (np. głowica „natknie się” na sektor BAD) BIOS ustawi flagę przeniesienia i będziemy zmuszeni , aby spróbować ponownie lub wyświetlić smutną wiadomość na ekranie.

Kod języka asemblera dla tego programu pokazano na Listingu 5.6.

Listowanie 5.6. Kod odczytujący sektor rozruchowy lub rozszerzoną tablicę partycji

MOV SI, 1BEh ; Przejdź do pierwszej sekcji
MOV AX, CS ; Konfigurowanie ES
RUSZA SIĘ, AX
MOV BX, buf ; Przesunięcie bufora
...
read_all_partitions:
MOV AX, pączek ; Odczytaj 1 sektor z dysku

MOV DH, ; Początkowy numer głowy
MOV CX, ; Uruchamianie sektora z cylindrem INT 13h
błąd JC; Błąd odczytu
;Przetwórz odczytany sektor rozruchowy lub rozszerzoną tablicę partycji
;===================================================================
;
Bajt CMP, 80h
JZ LOAD_BOOT ; To jest sektor rozruchowy
; Przekazujemy mu kontrolę
Bajt CMP, 05h
JZ LOAD_CHS_EXT ; To jest rozszerzona tablica partycji
; w formacie CHS
Bajt CMP, 0Fh
JZ LOAD_LBA_EXT ; To jest rozszerzona tablica partycji
; w formacie LBA
DODAJ SI, 10h ; Przejdźmy do następnej sekcji
CMP SI, 1EEh
JNA read_all_partitions ; Przeczytaj wszystkie sekcje jeden po drugim
...buf rb 512 ; Bufor 512 bajtów

Zapisanie sektora w trybie CHS odbywa się prawie dokładnie w ten sam sposób, z tą różnicą, że rejestr AH ma wartość nie 02h, a 03h. Tryb LBA jest znacznie trudniejszy do rozszyfrowania, ale my, podobnie jak prawdziwi hakerzy, na pewno go opanujemy.

Sektor odczytywany jest funkcją 42h(AH = 42h). Rejestr DL, tak jak poprzednio, zawiera numer napędu, natomiast para rejestrów DS:SI wskazuje na pakiet adresu dysku, co stanowi zaawansowaną strukturę formatu opisanego w tabeli. 5.4.

Tabela 5.4. Format pakietu adresowego używany do odczytu i zapisu sektorów w trybie LBA

Stronniczość Typ Opis
00h BAJT Wielkość paczki - 10h lub 18h
01h BAJT Pole jest zarezerwowane i musi wynosić zero
02h SŁOWO Ile sektorów przeczytać
04h DWORD 32-bitowy adres bufora docelowego w formacie seg:offs
08h QWORD Początkowy numer sektora do odczytu
10 godz QWORD 64-bitowy płaski adres bufora docelowego. Używane tylko wtedy, gdy adres 32-bitowy to FFFF:FFFF

Kod odczytujący sektor w trybie LBA ogólnie wygląda jak ten pokazany na Listingu 5.7.

Listowanie 5.7. Kod odczytujący sektor z dysku w trybie LBA

MOV DI, 1BEh ; Przejdź do pierwszej sekcji
MOV AX, CS ; Konfigurowanie...
MOV buf_seg ; ...człon
PRZESUŃ EAX, ; Przesunięcie partycji względem
; początek sekcji
DODAJ EAX, EDI ; EDI musi zawierać numer sektora
; aktualny MBR
MOV ;
...
read_all_partitions:
MOV AN, 42h; Odczyt sektora w trybie LBA
MOV DL, 80h; Przeczytaj od pierwszej płyty
MOV SI, dap ; Przesunięcie pakietu adresowego INT 13h
błąd JC; Błąd odczytu
...
klaps:
rozmiar_pakietu db 10h ; rozmiar pakietu 10h bajtów
zarezerwowane db 00h ; „Skrytka” dla przyszłych rozszerzeń
N_SEC dw 01h ; Czytanie jednego sektora
buf_seg dw 00h ; W tym miejscu zostanie wprowadzony segment bufora docelowego
buf_off dw buf ; Przesunięcie bufora docelowego
X_SEC dd 0 ; W tym miejscu zostanie wprowadzony numer sektora, który ma zostać odczytany
dd 0 ; Naprawdę nieużywany ogon
; Adres 64-bitowy
buf rb 512; Bufor 512 bajtów

Zapis jest podobny do czytania, tyle że rejestr AH zawiera nie 42h, a 43h. Rejestr AL określa tryb: jeśli bit 0 ma wartość 1, BIOS nie zapisuje go, ale emuluje. Bit 2, jeśli jest ustawiony, umożliwia rejestrację sprawdzającą. Jeśli rejestr AL ma wartość 0, wykonywany jest domyślny normalny zapis.

Teraz, gdy już oswoiliśmy się z przerwaniami dyskowymi, przejdźmy do omówienia innych aspektów programowania.

Tworzenie kodu bootloadera

Programy ładujące najlepiej programować przy użyciu FASM. Z punktu widzenia asemblera moduł ładujący jest zwykłym plikiem binarnym, którego maksymalny dopuszczalny rozmiar wynosi 1BBh (443) bajtów. Trochę? Ale nie spieszmy się z wnioskami. Każda partycja zawsze zaczyna się od początku cylindra, co oznacza, że ​​pomiędzy końcem MBR a początkiem partycji znajduje się co najmniej n wolnych sektorów, gdzie n == sektorów na ścieżkę. Prawie wszystkie współczesne dyski twarde mają 64 sektory na ścieżkę, co daje nam: 443 + 63*512 == 32 699 bajtów, czyli około 32 KB. Tak, w tym woluminie możesz nawet zmieścić interfejs graficzny z myszą! Jednak tego nie zrobimy. Prawdziwi hakerzy pracują w trybie tekstowym za pomocą wiersza poleceń.

Jak już wspomniano, BIOS ładuje MBR pod adresem 7C00h, więc na początku kodu asemblera powinna znajdować się dyrektywa ORG 7C00h, a także USE16, ponieważ bootloader działa w 16-bitowym trybie rzeczywistym. Później, jeśli zajdzie taka potrzeba, może przejść do trybu chronionego, ale stanie się to później. Nie wchodźmy w taką dżunglę.

Po wykryciu partycji rozruchowej (co można wykryć po fladze 80h, umieszczonej w zerowym przesunięciu od początku partycji), program ładujący musi odczytać pierwszy sektor tej partycji, umieszczając go w pamięci pod adresem 0000:7C00h, który jest dokładnie na wierzchu własnego ciała. Ale to już nie jest dobre! Aby nie spowodować awarii systemu, program ładujący musi wcześniej przenieść swoje ciało na inny adres, co zwykle odbywa się za pomocą polecenia MOVSB. Możesz kopiować na dowolny adres pamięci - od 0080:0067h do 9FE00h. Lepiej nie dotykać pamięci znajdującej się poniżej 0080:0067h, ponieważ znajdują się tutaj wektory przerwań i zmienne systemowe BIOS-u, a obszar mapowania ROM zaczyna się od A000h i wyżej, więc maksymalny dostępny adres to A000h - 200h (rozmiar sektora) = = 9FE00h.

Nie zapominaj, że nigdy nie powinieneś dotykać rejestru DL, ponieważ zawiera on numer dysku rozruchowego. Niektóre programy ładujące zawierają błąd, który zawsze uruchamia się z pierwszego dysku twardego, a dzieje się tak, gdy BIOS pozwala na zmianę kolejności rozruchu od ponad 10 lat, w związku z czym każdy dysk można uruchomić.

Prawdę mówiąc, FASM jest jedynym znanym mi asemblerem, który bezpośrednio „przetrawia” polecenie połączenia międzymiastowego JMP 0000:7C00h. Wszystkie inne asemblery powodują wypaczenie czegoś takiego: PUSH offset_of_target/PUSH segment_of_target/RETF . Tutaj wypychamy segment i przesunięcie adresu docelowego na stos i wykonujemy daleki RETF, który zabiera nas do żądanej lokalizacji. Możesz także użyć kodu samomodyfikującego się, składając polecenie JMP FAR „ręcznie” lub po prostu umieszczając adres docelowy w tym samym segmencie co adres źródłowy (na przykład 0000:7C00h ? 0000:7E00h). Jednak te podejścia są żmudne i nudne.

Ogólnie szkielet naszego modułu ładującego będzie wyglądał jak ten pokazany na Listingu 5.8.

Lista 5.8. Szkielet prostego bootloadera napisanego w FASM

użyj 16
ORG 7C00h
CLD; Kopiuj od lewej do prawej
; (rosnące adresy)
MOV SI,7C00h ; Skąd kopiować
MOV DI,7E00h ; Gdzie skopiować
MOV CX,200h ; Długość sektora
REPREZENTANT MOVSB; Kopiuj
; // Wybierz partycję, którą chcemy załadować,
; // wczytaj go do pamięci pod adresem 0000:7C00h
; // (zobacz Listingi 5.7 i 5.6)
JMP 0000:7C00h; Przeniesienie kontroli do sektora rozruchowego

Zapisz program ładujący w głównym rekordzie rozruchowym

W starym systemie MS-DOS łatwo było zapisać program ładujący w MBR. Aby to zrobić wystarczy wyciągnąć przerwanie INT 13h, funkcja 03h (zapis sektora). Jednak w systemie Windows NT ta technika już nie działa i trzeba skorzystać z funkcji CreateFile. Jeżeli zamiast nazwy otwieranego pliku podamy nazwę urządzenia, np. .PHYSICALDRIVE0 (pierwszy dysk fizyczny), możemy swobodnie odczytywać i zapisywać jego sektory wywołując odpowiednio ReadFile i WriteFile. W tym przypadku flaga dwCreationDisposition musi być ustawiona na wartość OPEN_EXISTING, a flaga dwShareMode na wartość FILE_SHARE_WRITE. Będziesz także potrzebować uprawnień administratora systemu, w przeciwnym razie nic nie będzie działać.

Gotowy przykład wywołania CreateFile wygląda jak na Listingu 5.9.

Lista 5.9. Otwieranie bezpośredniego dostępu do dysku twardego w systemie Windows NT

XOR EAX, EAX
WCIŚNIJ EAX ; hPlik szablonu
PUSH dword FILE_ATTRIBUTE_NORMAL ; dwFlagsAndAttributes
PUSH dword OPEN_EXISTING ; dwCreationDisposition
WCIŚNIJ EAX ; Atrybuty lpSecurity
PUSH dword FILE_SHARE_WRITE ; dwShareMode
PUSH dword (GENERIC_WRITE OR GENERIC_READ) ; dwPożądany dostęp
NAZWA URZĄDZENIA PUSH; Nazwa urządzenia
WYWOŁAJ Utwórz plik ; Otwieranie urządzenia
INC EAX
TESTUJ EAX, EAX
Błąd JZ
GRUDZIEŃ EAX
...
DEVICE_NAME db ".PHYSICALDRIVE0",0
BUF RB 512 ; Bufor

Po otwarciu dysku fizycznego i upewnieniu się, że operacja się powiodła, należy wczytać do bufora oryginalny sektor MBR, nadpisać pierwsze 1BBh bajty, nie dotykając w żaden sposób tablicy partycji i sygnatury 55h AAh (nie chcemy dysk, aby przestał się uruchamiać, prawda?). Teraz pozostaje tylko zapisać zaktualizowany kod MBR i zamknąć deskryptor urządzenia. Po ponownym uruchomieniu wszystkie zmiany zaczną obowiązywać.

Notatka

To prawda, że ​​​​jest całkiem możliwe, że wprowadzone zmiany nawet nie pomyślą o wejściu w życie. Ładowacz mści się brutalnie za najmniejsze błędy konstrukcyjne. Dlatego, aby nie stracić zawartości partycji, lepiej najpierw poćwiczyć na VMWare lub innym emulatorze komputera.

Pod Windowsem 9 X Oczywiście sztuczka CreateFile nie działa. Ale tam możesz użyć symulacji przerwań z DMPI lub użyć sterownika ASPI. Obie metody zostały szczegółowo opisane w mojej książce „Techniki ochrony płyt CD przed kopiowaniem”. Jednak choć mowa tu o płytach CD, a nie o dyskach twardych, dyski twarde programuje się w ten sam sposób.

Przed napisaniem własnego programu ładującego zaleca się przestudiowanie istniejących niestandardowych programów ładujących. Wszystkie wymienione poniżej programy ładujące są dystrybuowane na licencji GPL lub BSD, czyli bez ograniczeń.

Ge2000.asm to starannie skomentowany wirus Stealth, który zastępuje program ładujący system własnym. Chociaż jest to wirus, nie jest niebezpieczny i można go wykorzystać do celów edukacyjnych.

Mbr.asm to niezwykle prosty, ale w pełni funkcjonalny bootloader obsługujący partycje powyżej 8 GB.

Bootasm to doskonały menedżer multiboot ze szczegółowymi komentarzami, przechodzi w tryb chroniony, może uruchamiać się z dyskietki, płyty CD, dysku ZIP, dysku twardego itp. Obsługuje partycje powyżej 8 GB, pokazuje wskaźnik ładowania i robi wiele innych przydatnych rzeczy, których nie zaszkodzi się nauczyć.

Debugowanie kodu bootloadera

Debugowanie kodu programu ładującego jest niezwykle trudne. Program ładujący przejmuje kontrolę na długo przed uruchomieniem systemu operacyjnego, gdy nie działają jeszcze żadne debugery. Kilka lat temu był to ogromny problem i opracowując „wyrafinowane” programy ładujące, trzeba było albo wbudować w nie zintegrowany mini-debugger, albo szukać błędów ręcznie, studiując wykazy z ołówkiem w dłoni. Wraz z pojawieniem się emulatorów wszystko się zmieniło. Wystarczy uruchomić emulator taki jak BOCHS (ryc. 5.5) i możesz debugować program ładujący jak każdy inny program!


Ryż. 5.5. Wygląd emulatora BOCHS w procesie debugowania sektora rozruchowego

Programowanie bootloaderem jest jednym z niewielu obszarów, w których użycie asemblera jest naprawdę uzasadnione. Języki wysokiego poziomu są do tego zbyt oderwane od sprzętu. Ponadto nie są wystarczająco elastyczne. Dlatego hakerzy uwielbiają majstrować przy programach ładujących, dodając wiele nowych funkcji, w tym automatyczne uruchamianie z napędów CD-ROM lub SCSI, oprogramowanie antywirusowe, ochronę hasłem z szyfrowaniem danych itp. Tutaj naprawdę jest miejsce na rozbudowę i jest na czym pochwalić się wszystkimi swoimi możliwościami. Do dalszej lektury polecam kilka bardzo interesujących źródeł. Tutaj są:

? Rekordy rozruchowe MBR i systemu operacyjnego- wiele ciekawych materiałów na temat MBR (w języku angielskim): http://thestarman.narod.ru/asm/mbr/MBR_in_detail.htm;

? BOCHS- doskonały emulator z wbudowanym debugerem, który znacznie upraszcza proces „uruchamiania” sektorów rozruchowych. Bezpłatny, dystrybuowany z kodem źródłowym: http://bochs.sourceforge.net;

? http://www.koders.com(ryc. 5.6) - doskonała wyszukiwarka mająca na celu wyszukiwanie kodów źródłowych za pomocą słowa kluczowego MBR zwraca ogromną liczbę programów ładujących na każdy gust;


Ryż. 5.6. Wyszukaj źródła modułu ładującego MBR na stronie internetowej Koders

? Lista przerwań Ralpha Browna(Rys. 5.7) - słynna „Lista przerwań” Ralpha Browna, opisująca wszystkie przerwania, w tym nieudokumentowane (w języku angielskim): http://www.pobox.com/~ralf;


Ryż. 5.7. Zobacz legendarną „Listę przerwań” Ralpha Browna

OpenBIOS to projekt „Open BIOS” rozpowszechniany w kodzie źródłowym. Pomaga zrozumieć niektóre nieoczywiste aspekty przetwarzania programu ładującego system: http://www.openbios.info/docs/index.html.

Formatowanie dysków twardych odbywa się w trzech krokach:

    formatowanie niskiego poziomu (fizyczny układ dysku na cylindry, ścieżki, sektory);

    partycjonowanie dysku na partycje (urządzenia logiczne):

    wysokiego poziomu (logicznego) formatowania każdej sekcji.

Na etapie formatowania niskiego poziomu procesor wykonując program formatujący, naprzemiennie wysyła najpierw polecenie „Wyszukaj” do kontrolera dysku twardego, aby zainstalować głowice napędów na żądanym cylindrze, a następnie wysyła polecenie „Formatuj ścieżkę”. Wykonując polecenie „Formatuj ścieżkę”, kontroler dysku twardego, po otrzymaniu impulsu „Indeks” (początek ścieżki) z napędu, zapisuje format serwisowy ścieżki, który dzieli ją na sektory. Każdy sektor zawiera blok danych (512 bajtów) otoczony formatem usługi sektora (zawartość i rozmiar formatu usługi określa konkretny twórca urządzenia). Format usługowy ścieżek i sektorów jest wymagany przez kontroler dysku twardego podczas wykonywania poleceń. Odczytując i deszyfrując pola formatu usługi, kontroler znajduje wymagany cylinder, powierzchnię, sektor i blok danych wewnątrz sektora na dysku. Na kolejnych etapach formatowania informacje o systemie są zapisywane w blokach danych wielu sektorów, co zapewnia organizację partycji na dysku, automatyczne ładowanie systemu operacyjnego i obsługę systemu plików na dysku.

Na etapie podziału dysku na partycje, w bloku danych pierwszego sektora fizycznego dysku (cylinder 0, powierzchnia 0, sektor 1) tworzona jest tablica partycji z adresu 1BEh, składająca się z 4 linii szesnastobajtowych. Zwykle informacje systemowe zapisywane w bloku danych tego sektora podczas procesu formatowania nazywane są głównym rekordem rozruchowym (MBR).

Od samego początku bloku danych tego sektora znajduje się program (IPL 1). Procesor przełącza się do programu IPL 1 po pomyślnym zakończeniu testu POST i programu „Bootloader”, wykonując który procesor ładuje z dysku do pamięci MBR i przekazuje kontrolę na początek MBR (do programu IPL 1) , kontynuując działania prowadzące do załadowania systemu operacyjnego. Program IPL 1 (program ładujący) znajdujący się w MBR przegląda wiersze tabeli partycji w poszukiwaniu aktywnej partycji, z której będzie można uruchomić system operacyjny. Jeśli w tablicy partycji nie ma aktywnej partycji, zostanie wyświetlony komunikat o błędzie. Jeśli przynajmniej jedna partycja zawiera nieprawidłową etykietę lub jeśli więcej niż jedna partycja jest oznaczona jako aktywna, zostanie wyświetlony komunikat o błędzie Nieprawidłowa tabela partycji i proces rozruchu zostanie zatrzymany. Jeśli zostanie wykryta aktywna partycja, analizowany jest sektor rozruchowy tej partycji. Jeśli zostanie znaleziona tylko jedna aktywna partycja, zawartość bloku danych jej sektora rozruchowego (BOOT) zostanie wczytana do pamięci pod adresem 0000:7C00 i sterowanie zostanie przekazane na ten adres, jeśli sektor rozruchowy aktywnej partycji nie zostanie odczytany; przy pięciu próbach wyświetlany jest komunikat o błędzie: Błąd podczas ładowania systemu operacyjnego i system się zatrzymuje; sprawdzana jest sygnatura odczytanego sektora rozruchowego aktywnej partycji i jeśli jego ostatnie dwa bajty nie odpowiadają sygnaturze 55AAh, wyświetla się komunikat o błędzie: Brak systemu operacyjnego i system się zatrzymuje). Procesor odczytuje polecenie JMP pod adresem 0000:7С00, wykonując je, przekazuje kontrolę na początek programu IPL 2, który sprawdza, czy partycja jest rzeczywiście aktywna: IPL 2 sprawdza nazwy i rozszerzenia dwóch plików w katalogu głównym - powinny to być pliki IO.SYS i MSDOS.SYS (NTLDR dla Windows NT), ładuje je i. itp.

Windows 9x opiera się na wielu tych samych koncepcjach co DOS, ale przenosi te koncepcje dalej i logicznie. Te same dwa pliki systemowe IO.SYS i MSDOS.SYS, ale teraz cały program systemowy znajduje się w IO.SYS, a drugi plik MSDOS.SYS zawiera tekst ASCII z ustawieniami kontrolującymi zachowanie systemu podczas rozruchu. Odpowiedniki programów Himem.sys. Pliki Ifshlp.sys i Setver.exe są automatycznie ładowane przez program IO.SYS podczas uruchamiania systemu. Tak jak poprzednio, można używać plików Config.sys i Autoexec.bat do ładowania sterowników i programów rezydentnych do pamięci, ale 32-bitowe sterowniki urządzeń, zaprojektowane specjalnie dla systemu Windows 9x, są teraz ładowane poprzez wpisy w rejestrze systemowym. Po zakończeniu wszystkich prac wstępnych uruchamiany jest plik Win.com, uruchamiany jest system Windows 9x i udostępniane są jego możliwości za pośrednictwem menu graficznego.

Rejestr systemowy jest bazą danych, w której Windows 9x przechowuje informacje o wszystkich ustawieniach, ustawieniach konfiguracyjnych i parametrach niezbędnych do działania własnych modułów i poszczególnych aplikacji. Rejestr systemowy realizuje połączone funkcje plików Config.sys, Autoexec.bat i ini systemu Windows 3.1. Na dysku komputera rejestr jest przechowywany w dwóch oddzielnych plikach: System.dat i User.dat. Pierwsza z nich zawiera wszelkiego rodzaju ustawienia sprzętowe, natomiast druga zawiera dane o użytkownikach pracujących w systemie i używanych przez nich konfiguracjach. Każdy użytkownik może mieć swój własny plik User.dat, tj. własne środowisko pracy, które dostosowuje do swoich upodobań i potrzeb. Rejestr systemowy można importować, eksportować, a także tworzyć kopie zapasowe i za ich pomocą przywracać zapisane dane - jednym słowem jest to dość potężny mechanizm zarządzania parametrami systemu i zabezpieczania ich przed utratą i uszkodzeniem.

Tabela 3. Komponenty MBR

Region

Opis

Program IPL 1 (program bootloadera zajmuje obszar od adresu 00h do 1BEh)

Kod programu komunikatów o błędach:

    Nieprawidłowa tablica partycji (nieprawidłowa tablica partycji).

    Błąd ładowania systemu operacyjnego (błąd ładowania systemu operacyjnego)

    Brak systemu operacyjnego (brak systemu operacyjnego).

Tablice partycji (4 rzędy po 16 bajtów = 64 bajty) zajmują strefę od adresów 1BEh do 1FDh

1 linia (16 bajtów):

    Flaga startowa (80h - aktywna / 00h - normalna partycja) - 1 bajt

    Uruchamiający sektor fizyczny partycji (głowica, sektor i cylinder) - 3 bajty

    Typ partycji -1 bajt

    Końcowy sektor fizyczny partycji (głowica, sektor i cylinder) - 3 bajty

    Liczba sektorów poprzedzających sekcję - 4 bajty

    Całkowita liczba sektorów w tej sekcji wynosi 4 bajty

Ostatnie 2 bajty bloku danych sektora od adresów 1FE do 1FF - Podpis końcowy

55AA - oznacza koniec MBR. Sprawdzane przez program bootloader

Obszar MBR, który zmienił się w FAT32, to tablica partycji. Podobnie jak poprzednio składa się z czterech 16-bajtowych rekordów. Każdy wpis definiuje sekcję. FAT32 wprowadził 2 nowe typy partycji DOS32 (0B) i DOS32X (OS).

Wybór jednego ze standardów GPT lub MBR może być dość prosty dla właściciela nowego komputera z dużym dyskiem twardym i nowoczesnym interfejsem UEFI.

Takie parametry wymagają przejścia na bardziej nowoczesny standard.

Natomiast jeśli masz więcej niż jeden komputer, wybór może zostać dokonany na rzecz prawie przestarzałego MBR - i może się okazać, że będzie to jedyna opcja.

Zawartość:

Co oznaczają te skróty?

Każdy dysk twardy lub dysk SSD musi zostać podzielony na partycje przed użyciem do zapisu systemu operacyjnego, systemu i innych informacji.

Standard MBR, co oznacza „główny rekord rozruchowy”, reprezentuje stary sposób przechowywania danych, GPT (lub „tabela partycji GUID”) jest nowością.

Obydwa są również niezbędne do przechowywania informacji o początku i końcu każdej partycji, dzięki czemu system rozpoznaje lokalizację sektorów i określa, czy dana część dysku jest bootowalna, czy nie.

Chociaż MBR jest uważany za niezawodny i prosty - a odzyskiwanie jest rzadko wymagane.

Wady standardu obejmują brak możliwości obsługi dużej liczby partycji to niewielka wada w przypadku dysków twardych o wielkości do 500 GB, ale już dość poważna w przypadku modeli terabajtowych, a nawet 4 terabajtowych.

Jeśli konieczne było utworzenie więcej niż 4 partycji, konieczne było zastosowanie dość złożonej technologii EBR.

Drugim problemem związanym ze zwiększaniem objętości dysków twardych jest brak możliwości pracy z partycjami większymi niż 2,2 TB.

Zalety i wady nowego standardu

Ulepszony standard GPT, który stopniowo zastępuje MBR, jest częścią technologii UEFI, która z kolei zastępuje przestarzały interfejs BIOS-u.

Każda sekcja ma swoją własną unikalny identyfikator– bardzo długi ciąg znaków. Można nazwać zaletę GPT w porównaniu do przestarzałego standardu:

  • brak ograniczeń co do objętości sekcji. Dokładniej, wartość maksymalna nadal istnieje – ale nie uda się jej osiągnąć wcześniej niż za kilka dekad;
  • nieograniczona liczba sekcji– ogólnie do 264, do 128 dla systemu operacyjnego Windows.

Na dysku obsługującym standard MBR dane partycji i rozruchu znajdują się w tym samym miejscu. Jeśli ta część dysku ulegnie uszkodzeniu, użytkownik komputera PC stanie przed szeregiem problemów.

Kolejną różnicą pomiędzy GPT jest przechowywanie cyklicznego kodu redundancji, który pozwala kontrolować bezpieczeństwo danych.

Uszkodzenie informacji powoduje natychmiastową próbę jej przywrócenia.

Korzystając z MBR, o problemie możesz dowiedzieć się po tym, jak system przestał się uruchamiać i zniknęły jego partycje.

Wśród wad standardu warto zwrócić uwagę na brak wsparcia dla poprzednich technologii - . I chociaż rozpoznaje go system operacyjny z przestarzałym interfejsem, prawdopodobieństwo jego załadowania jest minimalne. Ponadto przy korzystaniu z tej opcji nie można przypisać nazw wszystkim dyskom, a także partycjom, a odzyskiwanie danych nie zawsze jest możliwe ze względu na ograniczenia w liczbie i lokalizacji zduplikowanych tabel.

Zgodność

Próba skonfigurowania dysku GPT przy użyciu technologii opartych wyłącznie na MBR donikąd nie doprowadzi– w ten sposób wersja ochronna głównego rekordu rozruchowego zapobiega przypadkowemu nadpisaniu i partycjonowaniu zgodnie ze starym standardem.

Systemy Windows uruchamiają się z dysków oznaczonych technologią GPT tylko na urządzeniach obsługujących interfejs UEFI – czyli na laptopach i komputerach PC z systemem Windows od Vista do 10.

Jeśli oprogramowanie płyty głównej zawiera , partycje zostaną odczytane, ale najprawdopodobniej nie nastąpi rozruch.

Chociaż te same systemy operacyjne mogą współpracować z dyskami GPT jako miejscem przechowywania informacji.

Powinieneś wiedzieć: Standard GPT jest obsługiwany także przez inne systemy operacyjne, w tym Linux. Na komputerach Apple ta technologia zastąpiła starą tablicę partycji APT.


Porównanie standardów

Aby ocenić podobieństwa i różnice między obydwoma standardami, ich możliwościami operacyjnymi, napędami i interfejsem startowym, warto stworzyć małą tabelę porównawczą.

Dzięki temu znacznie łatwiej jest podjąć decyzję jakiego standardu partycji użyć dla swojego komputera.

Tabela 1. Charakterystyka porównawcza MBR i GPT
Standard MBR GPT
Praca z oprogramowaniem sprzętowym Z BIOSem i UEFITylko z UEFI
Obsługa systemu Windows Wszystkie wersje, począwszy od pierwszejTylko 64-bitowe wersje Windows 7 i Vista, wszystkie warianty Windows 8 i 10
Czytaj i pisz Dowolne platformyWszystkie systemy operacyjne Windows od Vista i nowszych + XP Professional 64-bit
Liczba partycji na jednym dysku Nie więcej niż 4Do 264
Maksymalny rozmiar partycji 2,2 TB9,4 x 109 TB
Wbudowany multibooter NieobecnyJeść

Problemy pracy z nowym standardem i ich rozwiązania

Istnienie dwóch standardów może prowadzić do pewnych problemów. Zwłaszcza jeśli komputer nie pozwala na ładowanie w inny sposób niż przy użyciu dysku twardego.

Sytuację można naprawić, przechodząc na, co nie pozwala na pracę z nowym standardem - a przy próbie uruchomienia na ekranie pojawia się błąd wskazujący na obecność stylu partycji GPT.

Rozwiązanie problemu nie jest takie trudne - aby to zrobić, musisz wziąć zwykły dysk rozruchowy z systemem operacyjnym Windows i wykonaj następujące czynności:

  • Rozpocznij uruchamianie z dysku;
  • dostać się tam do momentu wybrania sekcji, gdzie pojawia się problem;
  • Uruchom konsolę(jednocześnie naciśnij Shift i F10);
  • Zaczynaj za pomocą specjalnego narzędzia, wpisując polecenie discpart.

Po uruchomieniu programu należy wpisać „list disc”, co spowoduje wyświetlenie na ekranie listy ponumerowanych dysków.

Teraz wystarczy wpisać „clean” w wierszu poleceń, usunąć niepotrzebne informacje i przystąpić do konwersji standardów.

Aby dysk GPT został przekonwertowany do starszego formatu, należy wpisać polecenie konwersji mbr, które pozwala na pracę z dyskiem i zainstalowanie na nim dowolnej platformy.

To samo narzędzie zapewnia pracę z partycjami.

Na przykład wprowadzenie polecenia „utwórz podstawowy rozmiar partycji = X” tworzy partycję o rozmiarze X GB, „format fs=ntfs label=”System” szybki” wykonuje formatowanie do NTFS, a „aktywny” pozwala partycji stać się aktywną.

wnioski

Podejmując decyzję, którego standardu użyć, GPT czy MBR, powinieneś określić, który interfejs rozruchowy jest używany i jaki rozmiar dysku twardego znajduje się w komputerze.

Jeśli masz oprogramowanie układowe BIOS, praca z GPT będzie niemożliwa. W przypadku bardziej nowoczesnego komputera wyposażonego w wręcz przeciwnie, nie należy wybierać MBR.

Stosunkowo nowe płyty główne wypuszczone w ostatnich latach mają już zainstalowany interfejs UEFI, co oznacza, że ​​z GPT nie będzie problemów.

Jednak rozmiary dysków nieznacznie wzrosnąć– niewielu kupujących wybiera komputery z dyskami twardymi większymi niż 2 TB, a ponadto potrzebują partycji o wielkości 2,2 terabajta.

Z tego powodu Nie ma jeszcze żadnych szczególnych powodów, dla których przeciętny użytkownik miałby wybierać ten standard– ale dla serwera będzie to doskonała opcja.

Wideo: