Strona 1 z 1

Naprawa programu rozruchowego Grub

: 09 października 2011, 11:04
autor: marcin1982
Witam.

Poniżej przedstawię poradnik dotyczący naprawy uszkodzonej instalacji Gruba w wersji 0.97 oraz Gruba 2 (1.99). Do naprawy bootloadera możemy użyć dowolnej dystrybucji linuksa typu live cd, np. SystemRescueCD, dostępnej tutaj:
http://www.sysresccd.org/Main_Page .
Operacje wykonujemy w domyślnym dla tej dystrybucji trybie tekstowym (w razie potrzeby środowisko graficzne może zostać uruchomione komendą startx).

I Środowisko "chroot".

Pierwszym krokiem po uruchomieniu systemu live cd jest zalogowanie się do uszkodzonego systemu zainstalowanego na dysku twardym komputera przy wykorzystaniu jądra systemu uruchomionego w trybie live cd (środowisko chroot). W tym celu wykonujemy następujące operacje:

Kod: Zaznacz cały

mount /dev/sdaX /media

Kod: Zaznacz cały

mount -o bind /proc /media/proc

Kod: Zaznacz cały

mount -o bind /sys /media/sys

Kod: Zaznacz cały

mount -o bind /dev /media/dev

Kod: Zaznacz cały

mount -o bind /dev/pts /media/dev/pts
X – numer partycji linuksa montowanej w punkcie „ / ” - (root - główny system plików). Jeśli katalog /boot jest montowany na partycji innej niż główny system plików, także musimy go zamontować:

Kod: Zaznacz cały

mount /dev/sdaY /media/boot
Ostatnim krokiem jest zalogowanie się do systemu na dysku twardym ze wskazaniem, której powłoki chcemy użyć jako domyślnej:

Kod: Zaznacz cały

chroot /media /bin/bash
II Naprawa programu rozruchowego.

1. Naprawa Grub 0.97.

Poniżej przedstawię sposób naprawy Grub za pomocą wbudowanej powłoki programu. Rodzaje błędów wraz z ich opisem, z jakimi możemy się spotkać wskutek nieudanego startu systemu dla Grub 0.97 można znaleźć np. tutaj:
http://www.gnu.org/software/grub/manual ... ge2-errors .

Uruchamiamy program grub poleceniem:

Kod: Zaznacz cały

grub

Program powinien zgłosić się ze swoim znakiem zachęty:

Kod: Zaznacz cały

grub>

Następnie ustalamy położenie pliku stage1 wydając komendę:

Kod: Zaznacz cały

find /boot/grub/stage1
Otrzymany numer partycji np. (hd0,4) wskazujemy programowi jako urządzenie „root”:

Kod: Zaznacz cały

root (hd0,4)
i na koniec instalujemy Gruba w MBR pierwszego dysku twardego:

Kod: Zaznacz cały

setup (hd0)
Opuszczamy powłokę programu poleceniem:

Kod: Zaznacz cały

quit
oraz restartujemy komputer.

Powyższa metoda będzie skuteczna, jeśli pliki w katalogu /boot/grub istnieją i nie są uszkodzone, a uszkodzeniu uległ tylko MBR (np. po nadpisaniu MBR przez program rozruchowy innego systemu operacyjnego). W przypadku niepowodzenia tej metody wykonujemy pełną instalację Grub poleceniem:

Kod: Zaznacz cały

grub-install /dev/sda
Jeśli mamy wątpliwości czy plik /boot/grub/menu.lst jest poprawny lub w przypadku, gdy zawiera błędne dane np. z powodu zmian w układzie partycji (zmiana UUID), generujemy nowy plik poleceniem:

Kod: Zaznacz cały

update-grub
Na koniec opuszczamy środowisko chroot:

Kod: Zaznacz cały

umount /media/dev/
umount /media/sys
umount /media/proc
umount /media
Po tej operacji uruchamiamy linuksa z dysku twardego.

2. Naprawa Grub 2 (1.99-*).

Po zalogowaniu się do niestartującego systemu na dysku twardym przy wykorzystaniu środowiska chroot (punkt I) wykonujemy następującą komendę:

Kod: Zaznacz cały

grub-install /dev/sda
Instalacja powinna zakończyć się komunikatem:

Kod: Zaznacz cały

Installation finished. No error reported.
W razie wystąpienia błędów należy użyć opcji --recheck powodującej ponowne wyszukiwanie urządzeń startowych mogących zawierać system operacyjny:

Kod: Zaznacz cały

grub-install –-recheck /dev/sda
Aby wykluczyć ewentualne problemy wynikające z nieaktualnego pliku /boot/grub/grub.cfg (np. zmiana UUID partycji systemowej) należy go uaktualnić poleceniem:

Kod: Zaznacz cały

update-grub
Wynik komendy powinien wyglądać podobnie do poniższego:

Kod: Zaznacz cały

Generating grub.cfg ... 
Found background image: /usr/share/images/desktop-base/desktop-grub.png 
Found linux image: /boot/vmlinuz-3.0.0-1-486 
Found initrd image: /boot/initrd.img-3.0.0-1-486 
done
W przypadku Debiana oraz innych dystrybucji wykorzystujących narzędzie dpkg do wykonania wyżej opisanych czynności można użyć polecenia:

Kod: Zaznacz cały

dpkg-reconfigure grub-pc
Po tych operacjach opuszczamy środowisko chroot oraz uruchamiamy linuksa z dysku twardego.

III Ręczne uruchomienie zadanego systemu operacyjnego przy pomocy wbudowanej powłoki programu Grub.

W celu uruchomienia powłoki programu Grub, w momencie gdy wyświetlany jest ekran startowy programu należy wcisnąć klawisz Shift lub Esc (zatrzymanie odliczania), a następnie klawisz c. Program powinien zgłosić się z następującym znakiem zachęty:

Kod: Zaznacz cały

grub >
Oczywiście po nieudanym uruchomieniu danego systemu operacyjnego możemy zostać od razu przeniesieni do powłoki programu (np. w przypadku braku pliku /boot/grub/grub.cfg lub /boot/grub/menu.lst).

1. Grub 0.97.

Ustalamy położenie pliku stage1 przy użyciu komendy:

Kod: Zaznacz cały

find /boot/grub/stage1
Otrzymany numer partycji np. (hd0,8) wskazujemy programowi jako urządzenie „root”:

Kod: Zaznacz cały

root (hd0,8)
Następnie wprowadzamy nazwę jądra, które chcemy uruchomić przy pomocy komendy:

Kod: Zaznacz cały

kernel /boot/vmlinuz-3.0.0-1-486 root=/dev/sda9 ro [Enter]
Listę plików obecnych w katalogu /boot, których możemy użyć dostarczy nam polecenie:

Kod: Zaznacz cały

kernel /boot/vmlinuz[TAB]
lub polecenie:

Kod: Zaznacz cały

kernel /boot/[TAB]
wraz z jednokrotnym naciśnięciem klawisza Tab w oznaczonym miejscu. Przy określeniu partycji root należy pamiętać o tym, że Grub 0.97 liczy partycje od zera, więc partycja (hd0,8) oznacza urządzenie blokowe /dev/sda9. Po określeniu urządzenia root można dodać niezbędne opcje jądra.
Kolejnym krokiem jest wskazanie programowi, który obraz initrd.img ma zostać użyty:

Kod: Zaznacz cały

initrd /boot/initrd.img-3.0.0-1-486[Enter]
Podobnie jak w przypadku polecenia „kernel” - listę dostępnych plików uzyskamy poleceniem:

Kod: Zaznacz cały

initrd /boot/initrd[TAB]
lub:

Kod: Zaznacz cały

initrd /boot/[TAB]
Numery pliku jądra oraz pliku initrd.img muszą być zgodne.
Na koniec uruchamiamy wybrany system poleceniem:

Kod: Zaznacz cały

boot
2. Grub 2.

Jeśli nie znamy numeru partycji „root” w prosty sposób określimy go lokalizując np. plik /boot/grub/grub.cfg lub inny znajdujący się w głównym systemie plików np.plik /etc/fstab:

Kod: Zaznacz cały

search.file /boot/grub/grub.cfg
lub:

Kod: Zaznacz cały

search.file /etc/fstab
Otrzymany wynik np. postaci : (hd0,msdos9) wskazujemy programowi jako urządzenie „root” komendą:

Kod: Zaznacz cały

set root=(hd0,msdos9)
Kolejnym krokiem jest wskazanie programowi, które jądro linuksa ma być uruchomione:

Kod: Zaznacz cały

linux /boot/vmlinuz-3.0.0-1-486 root=/dev/sda9 ro
oraz który korespondujący z jądrem plik initrd.img ma zostać użyty:

Kod: Zaznacz cały

initrd /boot/initrd.img-3.0.0-1-486
Ostatnim krokiem jest uruchomienie wybranego systemu poleceniem:

Kod: Zaznacz cały

boot
Przydatne linki:
1. Podręcznik porogramu Grub 0.97:
http://www.gnu.org/software/grub/manual/legacy/
2. Podręcznik programu Grub 2:
http://www.gnu.org/software/grub/manual/html_node/ .