Jak sprawdzić, na których dyskach grub2 faktycznie zainstalował MBR?


17

Korzystam z systemu Debian / Squeeze (z historią sięgającą przynajmniej Woody'ego), który został uaktualniony do grub2 w ramach aktualizacji Squeeze. Wszystko działa dobrze, ale mam zamiar zepsuć konfigurację dysku.

Obecnie na komputerze działają 2 dyski o pojemności 80 GB z partycjami RAID1-ed /, / home i / boot (jest jeszcze jedna para dysków z „/ data” RAID1-ed / i kilkoma zamianami, na wypadek, gdyby ktoś zastanawiał się, gdzie jest zamiana) , ale ich nie dotykam).

Dodałem 2 dyski SSD 130 GB, podzieliłem je na partycje, aby były co najmniej tak duże, jak partycje na dyskach 80 GB, i zamierzam przejść na nowe dyski SSD, powiększając RAID1, aby je uwzględnić, czekając na synchronizację, a następnie usuwając stary dyski z tablic, więc pozostały tylko dyski SSD (a następnie rozbudowuje systemy plików). Ale wranglowanie na mdadm / ext3 nie jest tym, o co chodzi w tym pytaniu ...

Zostaną mi 2 przestarzałe dyski o pojemności 80 GB (IDE), które chcę usunąć z komputera. Martwię się, że usunięcie ich zabierze ze sobą kluczowy MBR. Jak mogę się upewnić, że komputer jest bootowalny?

Dokładniej:

  • Kiedy zrobiłem aktualizację Squeeze, pamiętam, że został przedstawiony wybór, na których dyskach grub2 powinien zainstalować (poszedłem z domyślną, którą były wszystkie dyski). Jednak dyski SSD nie były w tym czasie w maszynie; Jak mogę to ponownie uruchomić, aby Grub mógł zainstalować na MBR SSD? (Zgaduję, że jest to dpkg-rekonfiguracja jakiegoś pakietu).

  • Jak mogę sprawdzić, na których dyskach grub2 myśli, że jest zainstalowany? Żałuję, że obecnie w katalogu / boot / grub / znajduje się prawie 200 plików! Gdzie patrzeć ? Ponadto wydaje się nieco dziwne, że /boot/grub/device.map.auto wyświetla obecnie tylko 3 dyski (2 z 80 GB, ale tylko jedną z pozostałych par dysków i żaden z dysków SSD). Jak mogę to zaktualizować? ( Aktualizacja: to był czerwony śledź; device.map.auto wydaje się być reliktem sprzed lat; Device.map wyglądało sensownie na aktualizacji grub-mkdevicemap. Myślę, że moja paranoja w tym obszarze pochodzi z BIOS-u starego mobo, który zmienić kolejność urządzeń widzianych przez GRUBa pod wpływem kaprysu).

Wynik: wszystko poszło dobrze i mam teraz dwa stare dyski IDE 80 GB po wyjęciu z pudełka, a także zgrabny i szybki system uruchamiania z dysków SSD RAID1-ed ze wszystkimi systemami plików o rozmiarach do nowych rozmiarów partycji. Innym „brakującym elementem układanki Grub”, którego szukałem, było dpkg-reconfigure grub-pcpytanie, na których dyskach utrzymać MBR. Odpowiedź Aarona rzeczywiście najbardziej mnie uspokoiła, że ​​zadziałało to zgodnie z oczekiwaniami, dlatego też zaakceptowałem tę odpowiedź.

Odpowiedzi:


17

MBR ma 512 bajtów, więc szybki sposób sprawdzenia, czy GRUB tam jest ...

dd if=/dev/sda bs=512 count=1 | xxd

To zrzuca MBR, widzę „GRUB” w moim w bajcie 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Kiedy to robię, drukuje „ GRUB”, a następnie dane ddwyjściowe.

Możesz owinąć to w forpętlę bash lub coś, aby przejść przez więcej dysków. jeśli nie chcesz tego robić ręcznie.


4
Drobny dodatek - ponieważ pozycja GRUBA może się zmieniać z wersji na wersję, można użyć dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. To zwróci pozycję znacznika w sektorze rozruchowym.
Alessandro Santini,

16

Proces rozruchu składa się z kilku kroków (opisuję tradycyjny BIOS komputera):

  1. BIOS odczytuje pierwszy sektor (512 bajtów) dysku rozruchowego.
  2. Kod w tym pierwszym sektorze odczytuje dalsze dane i kod w ustalonym miejscu przez interfejs BIOS. Ten interfejs BIOS udostępnia tylko dwa dyski twarde: dysk 0 jest miejscem, z którego odczytano pierwszy sektor, a dysk 1 to kolejny dysk, którego nie można łatwo przewidzieć, jeśli masz więcej niż dwa. Sektor startowy zawiera bajt wskazujący, na którym dysku twardym znajdują się dalsze dane; to jest dysk zawierający /boot/grub.
  3. Kod załadowany na poprzednim etapie rozumie partycje, systemy plików i inne pojęcia wysokiego poziomu. Dane obejmują lokalizację systemu plików (tj. Ciąg znaków (hd0)/boot/grub), która określa, gdzie znaleźć grub.cfgi dalsze moduły Gruba.
  4. grub.cfg jest wykonywany, zwykle w celu wyświetlenia menu i uruchomienia systemu operacyjnego.

Sektor rozruchowy jest generowany przez grub-setup, zwykle wywoływany przez grub-install. Sektor rozruchowy kończy się na dowolnym dysku określonym w składni Linuksa w wierszu polecenia grub-installlub grub-setup. Możesz sprawdzić, czy masz sektor rozruchowy na dysku, uruchamiając file -s /dev/sda. Ponieważ dodajesz nowy dysk i chcesz z niego uruchomić komputer, musisz uruchomić go grub-installna nowym dysku. Uruchomiony grub-installkilka razy na tym samym dysku jest nieszkodliwe.

Trudna część znajduje się w kroku 2 powyżej. Jeśli to w ogóle możliwe, umieść Grub (tj. /boot/grubKatalog) na dysku rozruchowym BIOS (lub, zbliżając się do tego z drugiej strony, powiedz BIOSowi, aby uruchomił się z dysku, gdzie /boot/grubjest). Tutaj device.mapwchodzi w grę. Upewnij się, że (hd0)jest zamapowany na dysku, który zawiera /boot/grub, a następnie uruchom grub-installna tym dysku.

Jeśli twoje dwa dyski są w konfiguracji programowej RAID-1, będziesz mieć identyczne sektory rozruchowe. Jest to pożądane zachowanie: jeśli jeden dysk będący dyskiem rozruchowym systemu BIOS ulegnie awarii, uruchamianie z drugiego dysku będzie po prostu działać (ponieważ zawierają te same bajty w tych samych odpowiednich lokalizacjach). Jeśli dublujesz tylko niektóre partycje, instalacja sektora rozruchowego wpływa tylko na jeden z dysków. Powinieneś uruchomić grub-installponownie na drugim dysku, po zmianie device.mapna skojarzenie (hd0)z dyskiem zawierającym drugą kopię lustrzaną /boot/grub.

Krok 3 jest dość złożony, ale zwykle działa od razu po wyjęciu z pudełka. W kroku 4 Grub lokalizuje systemy plików według UUID lub szuka nazwanych plików, więc nie musisz się już martwić różnymi sposobami oznaczania dysków.

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.