Alternatywna lokalizacja dla tabeli wprowadzania partycji GPT


0

Nagłówek GPT (zwykle w LBA 1) ma PartitionEntryLBApole (patrz 5.3.2 Nagłówek GPT w specyfikacji). W różnych źródłach (takich jak wpis GPT w Wikipedii) znajduje się język opisujący to pole, które mówi, że powinno wskazywać LBA 2.

Specyfikacja mówi: „Główna tablica wprowadzania partycji GPT musi znajdować się za głównym nagłówkiem GPT i kończyć się przed pierwszą możliwą do użycia kartą LBA”.

W tym kontekście wydaje się, że istnieje pewien pokój wiggle związany z „po”. Nie musi to oznaczać natychmiast po - pierwszy wpis partycji może oznaczać pewną liczbę LBA po nagłówku i nadal spełniać te wytyczne w specyfikacji.

Korzystam z wbudowanego procesora, który szuka tabeli wektorów 4k w drugim sektorze karty pamięci (np. SD). Nie mogę więc umieścić tam wpisów partycji GPT. Chciałbym więc zapisać wpisy partycji GPT po tej tabeli (przesunięcie 5k bajtów przy założeniu sektorów 512-bajtowych). Myślę, że jest to uzasadnione, ale nie sprawdziłem żadnych standardowych narzędzi do partycjonowania GPT (np. Parted na Linuksie), aby sprawdzić, czy / jak może być obsługiwane. Ani to, czy standardowe programy ładujące (np. U-boot) nie będą w stanie znaleźć tabeli wpisów partycji w takiej lokalizacji.

Tak więc jestem zainteresowany usłyszeniem o praktycznych doświadczeniach z nietypowymi lokalizacjami tabeli wprowadzania partycji GPT (tj. Nie w LBA 2 dla podstawowej kopii tabeli) z różnymi narzędziami do partycjonowania i modułami ładującymi. Preferuję bsd / linux, ale interesuje mnie także inne środowiska (nawet anegdoty na temat niektórych komercyjnych systemów operacyjnych).

To trochę otwarte zapytanie. Mówiąc nieco dokładniej, czy są znane przypadki awarii z nietypowymi lokalizacjami tablicy wpisów partycji GPT i istniejącymi narzędziami do partycjonowania i / lub modułami ładującymi?

Możesz przejść do specyfikacji UEFI tutaj: http://www.uefi.org/specifications . Patrzyłem najpóźniej (wersja 2.4, errata C).

Nie mam jeszcze członkostwa w UEFI ( http://www.uefi.org/join ), więc nie mam tam dostępu do forum ( http://www.uefi.org/FWOSForum ).

ps Wydaje się, że istnieje jeszcze silniejszy wymóg (?), aby główny nagłówek GPT znajdował się na LBA 1, mimo że StartingLBAw PMBR znajduje się pole (na LBA 0). Spec ma konkretnie oznaczać, że StartingLBApole nie powinno być LBA 1. Ale po co o pole, jeśli musi być w LBA 1? Dlaczego nie pozwolić nagłówkowi GPT na LBA 10, jeśli wymaga tego sytuacja? Nie jest to konieczne w moim obecnym przypadku użycia, a pytania są nieco retoryczne na tym forum (prawdopodobnie lepiej zadane na oficjalnych forach UEFI).


Myślę, że mogę używać procesora podobnego do twojego. Byłem w stanie zmodyfikować U-Boot, aby „poprawnie” używał przesunięcia pozycji partycji, aby pozostawić wymagany region niezmodyfikowany. Nie widziałem też domyślnie żadnych narzędzi obsługujących używanie tego pola, co jest uciążliwe, ale zapobiega ukąszeniu przez inne narzędzia, które go nie obsługują.
oscode

Odpowiedzi:


0

Mógłbym przysiąc, że widziałem coś takiego w niektórych hybrydowych obrazach ISO (takich, które są używane w dystrybucjach Linuksa, aby można je było nagrać na CD-R lub zapisać na dysku flash USB bez przetwarzania końcowego); Jednak właśnie sprawdziłem kilka i wydaje się, że nie robią tego. Może nie pamiętam poprawnie, a może po prostu nie sprawdziłem właściwych. Nie widzę też nic na ten temat na isohybridstronie podręcznika - ale nie jestem pewien, czy jest to najczęściej używane do tworzenia tych obrazów. Mimo to możesz pójść tym tropem dalej niż ja ....

FWIW, jestem autorem fdisk GPT. Minęło sporo czasu, odkąd musiałem dotknąć odpowiedniego kodu, ale szybka recenzja sugeruje, że powinien to zrobić fdisk GPTodczytać dysk, na którym podstawowa tablica partycji nie zaczyna się od LBA 2; jednak fdisk GPT nie obsługuje zmiany tej lokalizacji i nie mogę obiecać, że zapisa tabelę z powrotem w oryginalnej lokalizacji, nawet jeśli uda się odczytać taki dysk. Możesz go zhakować, aby uruchomić tę tabelę w innym miejscu do celów eksperymentalnych. W rzeczywistości po prostu spróbowałem, ale w kodzie jest wiele miejsc, które używają zakodowanych na stałe wartości „1” lub „2” do wypełnienia wartości LBA, i nie znalazłem ich wszystkich w mojej początkowej próba, więc skończyło się na napisaniu nagłówka na środku tablicy partycji, co oczywiście nie było ładne. Jeśli chcesz spróbować, spójrz na gpt.ccplik. Zacznij od szukania gdzie partitionEntriesLBAi firstUsableLBAsą ustawione - ale niektóre z odpowiednich stałych są również w wywołaniach funkcji.

Co do lokalizacji głównego nagłówka GPT, wątpię, czy mógłbyś to zmienić. Ochronny MBR sam w sobie nie jest częścią struktur danych GPT; jego celem jest identyfikacja dysku jako dysku GPT i powstrzymanie nieświadomych narzędzi GPT przed zsunięciem się z dyskiem, a nie określenie, gdzie zaczynają się struktury danych GPT. StartingLBAPole istnieje, ponieważ jest częścią struktury danych MBR, a nie dlatego, GPT używa go do niczego. Przypuszczam, że możliwe jest, że niektóre narzędzia wykorzystają punkt początkowy partycji ochronnej MBR jako wskaźnik do głównego nagłówka, ale wątpię, czy większość by to zrobiła. Z pewnością fdisk GPT nie; na stałe koduje LBA 1 jako lokalizację głównego nagłówka.

Jeśli masz więcej pytań na ten temat, możesz opublikować post na liście mailingowej edk2-devel. Spotyka się tam wielu programistów EFI i możliwe, że niektórzy znają precedensy tego, co próbujesz zrobić, lub znają alternatywne sposoby osiągnięcia twojego celu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.