GRUB rescue



Ostatnio miałem okazję zmieniać położenie systemów operacyjnych na swoich dyskach twardych. Wszystko przebiegało dość sprawnie, aż do restartu komputera. Okazało się, że mój GRUB przestał współpracować, a na ekranie pojawił się komunikat:

Booting from Hard Disk...
error: file '/boot/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>

Czarny ekran przed zalogowaniem do systemu nigdy nie jest przyjemnym widokiem, ale nie ma co wpadać w panikę. System informuje nas o tym, że nie może odnaleźć danego pliku w danej ścieżce. Stało się tak dlatego, że położenie systemu i niektórych plików po mojej ingerencji uległo zmianie, a nadal przeszukiwane są stare odnośniki. Przedstawię Wam chyba najbardziej trywialną metodę jaka jest bez zmian w konfiguracji systemu, używania Live-CD i/lub używania narzędzi typu Boot-Repair.


Z czym to się je

Mamy przed sobą znak zachęty, wykorzystajmy to co nam oferuje grub rescue. Pierwszą czynnością jest wydanie komenty ls (listowanie dysków/katalogów).

grub rescue> ls
(hd0) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos1)...

W odpowiedzi powinniśmy dostać na ekranie listę dysków (hd) i listę partycji (msdos lub inne) w naszym komputerze. Musimy znaleźć naszą partycję na której znajduje się GRUB. Jest to troche mozolna metoda, ale najprostrza. Dla każdego z dysków wydajemy komendę ls. Jeżeli pamiętacie ile partycji było na dysku z grubem lub gdzie mniej więcej grub leżał to spróbujcie to wykorzystać i zacząć od tej partycji, która Wam się wydaje najbardziej trafna. Jeżeli traficie powinniście dostać listę plików na danej partycji, jeżeli nie komunikat błędu. Jak znajdziemy będzie to wyglądało mniej więcej tak:

grub rescue> ls (hd1,msdos5)
./ ../ var/ boot/ etc/ ...

Jak już mamy szukaną partycje to czas ją oznaczyć jako root'a. W tym celu wydajemy polecenie (dysk i numer partycji z Waszego systemu):

grub rescue> set root=(hd1,msdos5)

Jeżeli gruba mieliśmy także w katalogu root'a to jest z górki, jeżeli nie, to szukamy katalogu /boot/grub lub katalogu /grub na innych partycjach. Ważne by po znależieniu były tam pliki podobne to tego, którego system nie mógł znaleźć przy uruchomieniu systemu. Możemy przeszukiwać katalogi komendą

ls (hd<nr>,msdos<nr>)/boot/grub

lub analogicznie do lokalizacji. Gdy już mamy to wydajemy komendy:

grub rescue> set prefix=(hd1,msdos5)/boot/grub
grub rescue> insmod normal    # jeżeli wyrzuci błąd to oznacza, że musimy szukać dalej
grub rescue> normal           # uruchamia system

Jesteśmy już prawie w domu :)


To jeszcze nie koniec

Możemy zalogować się do systemu, ale po restarcie czeka nas powtórka z rozrywki. Musimy teraz zmienić konfigurację lub idąc prostrzą drogą zainstalować od nowa GRUB'a. Wybieramy lokalizacje dla naszego nowego gruba i go instalujemy. Instalacja zaktualizuje całą konfigurację w naszym systemie automatycznie. Otwieramy konsolę w naszym systemie (linux) i wpisujemy (dysk/partycja w zależności od potrzeb):

grub-install /dev/sda

Od teraz nasz system powinien uruchamiać się już poprawnie. Poniżej zamieszczam kilka komend, które mogą być przydatne w konsoli do ustalenia lokalizacji dla nowej instalacji GRUB'a.
df -h # listuje dyski/partycje
fdisk -l # dokładna struktura dysku i partycji
update-grub # wyszukanie systemów i aktualizacja wpisów w grubie