Zbiór błędów Gruba

Hartwig Brandl  Przegląd wątku
Ioannis Aslanidis  Redaktor
Sven Vermeulen  Redaktor
Mateusz Kotyrba  Tłumaczenie

Zaktualizowano 13 stycznia 2008

1.  Uwagi wstępne

Podziękowania

Ogromne podziękowania należą się Earthwingowi, penetrode, loyaltonone, pilla , airheada , nephrosa , yamakawy i tych wszystkich, którzy pomogli w tworzeniu oryginalnego wątku.

Ostrzeżenie

Załączone rozwiązania są tylko przykładowe. Należy zmienić numery partycji na odpowiadające podziałowi dysków w komputerze. Autorzy niniejszego dokumentu nie ponoszą odpowiedzialności za ewentualne konsekwencje wywołane korzystaniem z rozwiązań w nim zawartych.

2.  Grub loading, please wait...

Sytuacja

Listing 2.1: Wyjście Gruba

Grub loading stage 1.5
Grub loading, please wait...

Po tym komunikacie system zatrzymuje się. Kiedy uruchamiamy system za pomocą dyskietki z Grubem, problem znika.

Rozwiązanie

Według The_Bella możemy zmienić porządek ładowania systemu w BIOS-ie.

Należy ustawić BIOS tak, aby nie uruchamiał systemu najpierw z dyskietki.

penetrode pisał, że może to być również spowodowane złym ustawieniem CFLAGS. Obecny ebuild Gruba filtruje flagę -fstack-protector, jednak jeśli nic nie pomoże, wtedy można skompilować Gruba ponownie z podstawowymi flagami CFLAGS.

Listing 2.2: Używanie podstawowych flag CFLAGS do ponownej kompilacji Gruba

# CFLAGS="-O2 -march=i686 -fomit-frame-pointer -pipe" emerge grub

3.  Błąd Gruba numer 12

Sytuacja

Listing 3.1: Wyjście Gruba

12 : Invalid device requested.

Ten błąd jest zwracany jeśli składnia nazw urządzeń jest poprawna, ale wystąpił inny, niezdefiniowany błąd, np. użytkownik pominął jakiś wpis.

Rozwiązanie

Należy sprawdzić czy po zainstalowaniu Gruba do sektora rozruchowego, zostały wykonane poniższe polecenie w jego powłoce..

Listing 3.2: Polecenia interaktywnej instalacji

grub> root (hd0,0)
grub> setup (hd0)

Wpis (hd0,0) powinniśmy zastąpić naszą partycją rozruchową, a (hd0) wybranym dyskiem twardym. Należy pamiętać, że (hd0) zainstaluje bootloadera w głównym sektorze rozruchowym (MBR) pierwszego dysku czyli dysku ustawionego jako primary master.

4.  Błąd Gruba numer 15

Sytuacja

Ten błąd występuje w dwóch różnych przypadkach. Podczas wstępnej konfiguracji (instalując Gruba do głównego sektora rozruchowego) lub po załadowaniu systemu i próbie uruchomienia Linuksa (lub innej pozycji).

Listing 4.1: Wyjście Gruba - wstępna konfiguracja

grub> root (hd0,0)
 Filesystem type is xfs, partition type 0x83

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15: File not found

Listing 4.2: Wyjście Gruba - ładowanie wpisu

Booting 'gentoo Linux'

root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
kernel (hd0,0)/boot/kernel-2.4.20 root=/dev/hda3 vga=792

Error 15: File not found
Press any key to continue...

Rozwiązanie - wstępna konfiguracja

Ten błąd jest zwracany jeśli podana nazwa pliku nie może być znaleziona, ale wszystko inne (takie jak informacje o dyskach i partycjach) jest poprawne.

Często ten błąd informuje o brakującym pliku obrazu jądra. Należy się upewnić, że plik, do którego Grub się odnosi, istnieje na partycji rozruchowej.

Aby dowiedzieć się o dokładnej nazwie obrazu jądra należy załadować system z płyty instalacyjnej i zamontować partycję głównego systemu plików i partycję rozruchową (jeśli taką mamy). Potem chrootujemy się do naszego Gentoo, a następnie wyświetlamy pliki, aby zobaczyć jakie mamy dostępne obrazy jądra:

Listing 4.3: Weryfikacja istnienia obrazu jądra

# cd /boot
# ls

To polecenie wyświetli wszystkie obrazy jądra, które mamy na partycji rozruchowej. Jeśli brakuje nam obrazu jądra, wtedy należy ponownie skompilować jądro (za pomocą genkernela lub ręcznie):

Listing 4.4: Ponowna kompilacja jądra

# cd /usr/src/linux/
# make menuconfig (konfigurujemy jądro, jeśli trzeba)
# make

Po czym skopiować obraz na partycję rozruchową:

Listing 4.5: Kopiowanie jądra

# cp /usr/src/linux/arch/i386/boot/bzImage /boot

Powinniśmy się upewnić czy nazwa obrazu jądra jest dokładnie taka sama jak w pliku grub.conf. Musimy również sprawdzić czy linia kernel w grub.conf odnosi sie do odpowiedniej partycji (jawnie lub niejawnie).

Innym powodem tego problemu może być nakazanie BIOS-owi, aby ignorował dysk na którym mamy stage Gruba lub obraz jądra. Ponadto partycja, na której znajdują się etapy GRUB-a, nie może korzystać programowego RAID-5 (lub innej tego typu techniki).

Rozwiązanie - ładowanie wpisu

Najpierw należy zweryfikować, że polecenia root oraz setup są poprawne.

Jeśli jesteśmy pewni, że są poprawne, to jest możliwe, że używamy wadliwej wersji Gruba (0.93.20031222). Wówczas należy uaktualnić drzewo portage lub zamaskować tę wersję Gruba:

Listing 4.6: Maskowanie Gruba

(Należy to wykonać będąc w środowisku chroot)
# echo "=sys-boot/grub-0.93.20031222" >> /etc/portage/package.mask
# emerge grub -p

Możemy również użyć skryptu grub-install, który jest zalecany przez autorów Gruba:

Listing 4.7: Używanie grub-install

(parametr --root-directory jest konieczny jeśli używamy osobnej
partycji rozruchowej, w przeciwnym wypadku możemy go pominąć)
# grub-install --root-directory=/boot /dev/hda

Jeśli to wszystko zawiedzie, to nasza partycja rozruchowa może być uszkodzona. Należy sprawdzić tę partycję w poszukiwaniu błędów:

Listing 4.8: Sprawdzanie partycji w poszukiwaniu błędów

(Należy się upewnić, że partycja rozruchowa, w tym przypadku /dev/hda1, nie jest zamontowana)
# fsck -y /dev/hda1

5.  Błąd Gruba numer 17

Sytuacja

Listing 5.1: Wyjście Gruba

root (hd0,0)
filesystem type unknown partition type 0x7

Error 17 : Cannot mount selected partition

Rozwiązanie

Ten błąd jest zwracany, jeśli żądana partycja istnieje, ale Grub nie może rozpoznać typu systemu plików.

Należy być pewnym ustawień root(x,y) w pliku grub.conf.

Jeśli próbujemy także ładować system Windows, należy się upewnić, że plik grub.conf zawiera linie root (hdX,Y) (lub rootnoverify (hdX,Y)) i chainloader (hdX,Y)+1.

6.  Błąd Gruba numer 18

Sytuacja

Listing 6.1: Wyjście Gruba

kernel (hd1,4)/bzImage root=/dev/hdb7

Error 18: Selected cylinder exceeds max supported by BIOS

Rozwiązanie

Ten błąd jest zwracany podczas odczytu adresu bloku liniowego poza obszarem dysku, który przetłumaczył BIOS. Zwykle się to zdarza, gdy dysk jest większy niż BIOS może obsłużyć (512MB dla dysków (E)IDE na starszych komputerach lub 8GB ogólnie).

Należy uaktualnić BIOS i/lub przesunąć partycję rozruchową na początek dysku (lub przynajmniej postarać się, aby była w okolicach początku dysku).

7.  GRUB GRUB GRUB GRUB GRUB ...

Sytuacja

Listing 7.1: Wyjście Gruba

GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB
  GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB GRUB
...

Rozwiązanie

Według airheada może to być spowodowane przez zmuszenie BIOS-u do automatycznego wykrywania twardych dysków. Należy ustawić wpis w BIOS-ie na User Type HDD.

Inną możliwością jest posiadanie Gruba zainstalowanego w MBR i podczas jego ponownej instalacji (dla przykładu z powodu zmian na dysku twardym), użycie złych poleceń setup i root.

8.  Probing devices to guess BIOS drives. This may take a long time.

Sytuacja

Podczas instalacji Gruba, system zawiesza się po wyświetleniu następującego komunikatu:

Listing 8.1: Wyjście Gruba

# grub

Probing devices to guess BIOS drives. This may take a long time.

Rozwiązanie

Jak się okazuje jest to spowodowane egzotyczną konfiguracją dysków, taką jak np. dysków ultra i non-ultra DMA podpiętych na jednym kablu.

9.  Podczas instalacji Gruba system się zawiesza

Sytuacja

Podczas instalacji Gruba, system się zawiesza:

Listing 9.1: Wyjście Gruba

# grub
(Na tym etapie instalacja się zawiesza)

Rozwiązanie

Jeśli nie posiadamy stacji dyskietek, należy użyć parametru --no-floppy.

Listing 9.2: Instalacja Gruba z użyciem parametru --no-floppy

# grub --no-floppy

10.  Uncompressing Linux... Ok, booting the kernel

Sytuacja

System się zawiesza po wyświetleniu następującej linii:

Listing 10.1: Wyjście Linuksa

Uncompressing Linux... Ok, booting the kernel.

Rozwiązanie

Ściśle mówiąc, to nie jest błąd Gruba. Jedną z możliwości jest to, że ACPI nie działa poprawnie, ale jest włączone w jądrze. Należy wyłączyć tą opcję w BIOS-ie lub w jądrze.

11.  Grub pokazuje tylko znak zachęty

Sytuacja

Podczas ładowania systemu, pojawia się powłoka Gruba zamiast listy wpisów, które zdefiniowaliśmy w pliku grub.conf.

Rozwiązanie

Należy zamontować partycję rozruchową i zweryfikować czy istnieje plik grub/grub.conf.

Listing 11.1: Montowanie i weryfikacja

# mount /dev/hda1 /mnt/gentoo/boot
# cat /mnt/gentoo/boot/grub/grub.conf

Należy się także upewnić, że istnieje dowiązanie symboliczne menu.lst:

Listing 11.2: Weryfikacja dowiązania symbolicznego

# ls -l /mnt/gentoo/boot/grub/menu.lst
lrwxrwxrwx  1 root root 9 Mar  7 14:00 /mnt/gentoo/boot/grub/menu.lst ->
grub.conf

Jeśli nie, to tworzymy ponownie dowiązanie symboliczne:

Listing 11.3: Ponowne tworzenie dowiązania symbolicznego menu.lst

# cd /mnt/gentoo/boot/grub
# ln -snf grub.conf menu.lst

Po czym instalujemy ponownie Gruba:

Listing 11.4: Ponowna instalacja Gruba

(Należy uruchomić wewnątrz środowiska chroot)
# grub-install --root-directory=/boot /dev/hda

12.  Could Not Find Device For /boot/boot: Not Found Or Not a Block Device

Sytuacja

Kiedy wykonujemy polecenie grub-install podczas instalacji Gruba, otrzymujemy następujący błąd:

Listing 12.1: Wyjście Gruba

# grub-install --root-directory=/boot /dev/hda
Could not find device for /boot/boot: not found or not a block device

Rozwiązanie

Należy wykonać poniższe polecenie:

Listing 12.2: Uaktualnianie pliku mtab

# grep -v rootfs /proc/mounts > /etc/mtab

13.  System uruchamia się ponownie po wciśnięciu klawisza Enter w menu Gruba

Sytuacja

Po wciśnięciu klawisza Enter w menu Gruba podczas ładowania systemu, komputer ponownie się uruchamia.

Rozwiązanie

Należy wyłączyć wsparcie dla bufora ramki w jądrze. Jeśli to nie pomoże, należy wyłączyć w jądrze APM i ACPI.

14.  Po wciśnięciu klawisza Enter w menu Gruba, ekran staje się czarny

Sytuacja

Po wciśnięciu klawisza Enter w menu Gruba podczas ładowania systemu, ekran staje się czarny, ale system reaguje (dla przykładu diodę numlock można włączać i wyłączać).

Rozwiązanie

Należy wyłączyć bufor ramki (zwykle pomaga usunięcie vga=XYZ w pliku grub.conf) i sprawdzić architekturę procesora w jądrze.

15.  Brakujący obraz splasha

Sytuacja

Podczas ładowania systemu nie widać splasha Gentoo.

Rozwiązanie

Po pierwsze należy się upewnić czy istnieje plik splasha do którego się odnosimy w grub.conf. Jeśli istnieje należy sprawdzić ebuild Gruba. Możliwe, że w wersji której używamy łatka dla splasha jest zakomentowana.

16.  Ładowanie Windowsa z drugiego dysku zawodzi

Sytuacja

Po wybraniu wpisu Windowsa, system odmawia rozruchu bez jakiejkolwiek przyczyny.

Rozwiązanie

cyrillic poinformował nas, że można użyć polecenia "map", które odwzoruje dyski twarde w różnej kolejności, zmieniając wpis systemu Windows w pliku grub.conf jak poniżej:

Listing 16.1: Mapowanie dysków

title Windows XP
  map (hd0) (hd1)
  map (hd1) (hd0)
  chainloader (hd1,0)+1

17.  Grub wyświetla błąd podczas instalacji

Sytuacja

Sytuacja opisana poniżej jest tylko istotna dla wersji Grub-0.95.x w momencie instalacji Gruba do sektora rozruchowego.

Listing 17.1: Instalacja Gruba

grub> root (hd0,0)

grub> setup (hd0)

Segmentation fault

Rozwiązanie

Jest to znany błąd i został usunięty w wersji 0.96. Wersje 0.94 r1 oraz 0.94 r2 także powinny działać poprawnie. Jeśli to również zawiedzie, wtedy możemy wykonać emerge programu grub-static, który obecnie jest stabilny na amd64, ale wciąż nie został oznaczony jako stabilny na x86 (~x86). Dodatkowe informacje można uzyskać przy błędzie #79378.