GRUB: długie ładowanie i niedziałający automatyczny wybór
: 26 października 2009, 21:17
Mam dwa problemy z GRUB-em.
1. Długie ładowanie: GRUB-a, jądra, initrd
GRUB ładuje się długo pokazując na ekranie takie napisy:
Potem pojawia się menu (problem z którym opisany jest poniżej – w pkt. 2) i po wciśnięciu klawisza ENTER równie długie: ustawianie partycji, ładowanie jądra, initrd.
Ciekawe jest to, że jeśli komputer nie jest uruchamiany "z wyłączenia", a restartowany (tzn. wcześniej uruchomiony był jakiś system operacyjny – sprawdzałem to z moim aktualnym Debianem oraz dodatkowo z Knoppiksem i MenuetOS), to GRUB, jądro i initrd ładują się szybko. Czyli tak jakby systemy te zmieniały jakieś parametry, których nie ustawia BIOS (podobny problem miałem kiedyś z myszą USB: w Linuksie działała tylko wtedy, gdy przez Linuksem uruchomiony był Windows 98). Nie znam się, ale może chodzi o coś z geometrią dysku.
Wersja GRUB-a według dpkg: 0.97-47lenny2.
System to Debian Lenny/Sid (instalowany około rok temu – wtedy Lenny jeszcze był klasyfikowany jako wersja testowa). Instalowany był na dysku Seagate Barracuda ATA IV (80 GB) w komputerze z procesorem Athlon 500 MHz. Potem dysk został przełożony do innego komputera – z procesorem Pentium III 800 MHz. Problem z długim ładowaniem istniał już od samego początku – czyli jeszcze na komputerze z Athlonem.
Filmik pokazujący ładowanie: GRUB-a, jądra, initrd; potem uruchamianie się systemu: http://www.youtube.com/watch?v=NqDy1OBRB88. Filmik nagrany był na poprzednim komputerze (z Athlonem).
Na obecnym komputerze czas ładowania jest trochę krótszy (może dlatego, że procesor jest o 300 MHz szybszy), ale pod warunkiem, że czuwam przy klawiaturze – jeśli bym nie nacisnął ENTER, to czas ten wynosiłby nieskończoność… I to jest drugi problem z GRUBem – opisany w pkt. 2.
Jeszcze jedna ciekawa/dziwna rzecz: MBR i plik /boot/grub/stage1 mają inną zawartość. Nie znam się, ale wydaje mi się, że powinny być takie same (z wyjątkiem oczywiście fragmentu, w którym znajduje się tablica partycji).
Pierwsze 446 bajtów dysku:
Plik /boot/grub/stage1 (512 bajtów):
W MBR widać tak jakby pozostałości LILO. Wydaje mi się to dziwne. Co prawda miałem kiedyś LILO, ale było to bardzo dawno temu (jak jeszcze używałem różne Redhaty, Auroksy, Mandrejki). Potem chyba nawet był windowsowy program rozruchowy.
Może właśnie te strzępy LILO powodują tak długie ładowanie się stage1.5?
2. Problem z niedziałającym odliczaniem i automatycznym uruchomieniem wybranej pozycji.
Drugi problem to niedziałające uruchamiania domyślnej pozycji. Odliczanie mam ustawione na 3 sekundy.
Poniżej listy systemów pokazuje się napis: i nic się nie dzieje. Muszę za każdym razem naciskać ENTER, żeby uruchomić system. Jest to bardziej uciążliwe niż długie ładowanie i na rozwiązaniu tego problemu zależy mi bardziej.
Zrobiłem mały test. GRUB ładuje podany system, tylko wtedy, gdy plik /boot/grub/menu.lst ma następującą – chyba najmniejszą możliwą – treść:
Wystarczy jednak zmienić ją na następującą: i już muszę naciskać ENTER, by uruchomić system.
Czyli wystarczy, że parametr timeout ma wartość inną niż 0 i już przestaje działać. Czy to jest jakiś błąd GRUB-a związany z "parsowananiem" pliku konfiguracyjnego, czy może jakiś problem sprzętowy u mnie: w BIOS-ie, procesorze, płycie głównej?
A może wynika to z pozostałości po LILO, o których pisałem wcześniej?
Jeszcze mała historyjka związana z plikami /boot/grub/*stage*. Kilka miesięcy temu dysk twardy upadł z wysokości około 30 cm na podłogę (nie wiem, czy wtedy pracował, ale po kłopotach, które z tego wynikają, przypuszczam, że tak). Po tym GRUB się nie ładował (nie pamiętam numeru błędu) i zepsuł się system plików (który naprawiłem poprzez reiserfsck --rebuild-tree). GRUB-a naprawiłem kopiując pliki stage1, reiserfs_stage1_5, stage2 z innego systemu (nie pamiętam już, czy był to Knoppix czy Ubuntu), a stare zostawiłem zmieniając ich nazwę, bo myślałem, że znajdowały się na uszkodzonych sektorach dysku.
Potem pomyślałem, że może te pliki (pochodzące z innego systemu) są niekompatybilne z częścią GRUB-a zapisaną w MBR, więc przekopiowałem je z paczki grub_0.97-47lenny2_i386.deb. Dodatkowo (bo wydaje mi się, że ta część zapisana w MBR nie szuka stage1.5 po nazwie pliku lecz po sektorze) wykonałem grub-install, żeby nowe położenie na dysku tego pliku zostało zapisane do MBR. Po tym jądro nie uruchamiało się, tylko wypisywało komunikat, żeby dodać parametr edd=off. Dodałem to na stałe do menu.lst i teraz się ładuje.
Według Wikipedii EDD to: Enhanced Disk Drive, aka INT13h Extensions, information provided by a computer BIOS to the operating system. Czyli chyba jednak coś z BIOS-em… Tylko dziwne, że wcześniej działało.
1. Długie ładowanie: GRUB-a, jądra, initrd
GRUB ładuje się długo pokazując na ekranie takie napisy:
Kod: Zaznacz cały
GRUB Loading stage1.5.
GRUB loading, please wait...
Ciekawe jest to, że jeśli komputer nie jest uruchamiany "z wyłączenia", a restartowany (tzn. wcześniej uruchomiony był jakiś system operacyjny – sprawdzałem to z moim aktualnym Debianem oraz dodatkowo z Knoppiksem i MenuetOS), to GRUB, jądro i initrd ładują się szybko. Czyli tak jakby systemy te zmieniały jakieś parametry, których nie ustawia BIOS (podobny problem miałem kiedyś z myszą USB: w Linuksie działała tylko wtedy, gdy przez Linuksem uruchomiony był Windows 98). Nie znam się, ale może chodzi o coś z geometrią dysku.
Wersja GRUB-a według dpkg: 0.97-47lenny2.
System to Debian Lenny/Sid (instalowany około rok temu – wtedy Lenny jeszcze był klasyfikowany jako wersja testowa). Instalowany był na dysku Seagate Barracuda ATA IV (80 GB) w komputerze z procesorem Athlon 500 MHz. Potem dysk został przełożony do innego komputera – z procesorem Pentium III 800 MHz. Problem z długim ładowaniem istniał już od samego początku – czyli jeszcze na komputerze z Athlonem.
Filmik pokazujący ładowanie: GRUB-a, jądra, initrd; potem uruchamianie się systemu: http://www.youtube.com/watch?v=NqDy1OBRB88. Filmik nagrany był na poprzednim komputerze (z Athlonem).
Na obecnym komputerze czas ładowania jest trochę krótszy (może dlatego, że procesor jest o 300 MHz szybszy), ale pod warunkiem, że czuwam przy klawiaturze – jeśli bym nie nacisnął ENTER, to czas ten wynosiłby nieskończoność… I to jest drugi problem z GRUBem – opisany w pkt. 2.
Jeszcze jedna ciekawa/dziwna rzecz: MBR i plik /boot/grub/stage1 mają inną zawartość. Nie znam się, ale wydaje mi się, że powinny być takie same (z wyjątkiem oczywiście fragmentu, w którym znajduje się tablica partycji).
Pierwsze 446 bajtów dysku:
Kod: Zaznacz cały
00000000: EB 48 90 01 B5 01 4C 49 4C 4F 16 06 9A 64 0E 48 |.H....LILO...d.H|
00000010: 00 00 00 00 AE DC 0D 48 C4 31 EE 2D 01 00 80 60 |.......H.1.-...`|
00000020: 3F 77 EA 00 B8 C0 07 8E D0 BC 00 08 FB 52 53 06 |?w...........RS.|
00000030: 56 FC 8E D8 31 ED 60 B8 00 12 B3 36 CD 10 03 02 |V...1.`....6....|
00000040: FF 00 00 20 01 00 00 00 00 02 FA 90 90 F6 C2 80 |... ............|
00000050: 75 02 B2 80 EA 59 7C 00 00 31 C0 8E D8 8E D0 BC |u....Y|..1......|
00000060: 00 20 FB A0 40 7C 3C FF 74 02 88 C2 52 BE 7F 7D |. ..@|<.t...R..}|
00000070: E8 34 01 F6 C2 80 74 54 B4 41 BB AA 55 CD 13 5A |.4....tT.A..U..Z|
00000080: 52 72 49 81 FB 55 AA 75 43 A0 41 7C 84 C0 75 05 |RrI..U.uC.A|..u.|
00000090: 83 E1 01 74 37 66 8B 4C 10 BE 05 7C C6 44 FF 01 |...t7f.L...|.D..|
000000A0: 66 8B 1E 44 7C C7 04 10 00 C7 44 02 01 00 66 89 |f..D|.....D...f.|
000000B0: 5C 08 C7 44 06 00 70 66 31 C0 89 44 04 66 89 44 |\..D..pf1..D.f.D|
000000C0: 0C B4 42 CD 13 72 05 BB 00 70 EB 7D B4 08 CD 13 |..B..r...p.}....|
000000D0: 73 0A F6 C2 80 0F 84 EA 00 E9 8D 00 BE 05 7C C6 |s.............|.|
000000E0: 44 FF 00 66 31 C0 88 F0 40 66 89 44 04 31 D2 88 |D..f1...@f.D.1..|
000000F0: CA C1 E2 02 88 E8 88 F4 40 89 44 08 31 C0 88 D0 |........@.D.1...|
00000100: C0 E8 02 66 89 04 66 A1 44 7C 66 31 D2 66 F7 34 |...f..f.D|f1.f.4|
00000110: 88 54 0A 66 31 D2 66 F7 74 04 88 54 0B 89 44 0C |.T.f1.f.t..T..D.|
00000120: 3B 44 08 7D 3C 8A 54 0D C0 E2 06 8A 4C 0A FE C1 |;D.}<.T.....L...|
00000130: 08 D1 8A 6C 0C 5A 8A 74 0B BB 00 70 8E C3 31 DB |...l.Z.t...p..1.|
00000140: B8 01 02 CD 13 72 2A 8C C3 8E 06 48 7C 60 1E B9 |.....r*....H|`..|
00000150: 00 01 8E DB 31 F6 31 FF FC F3 A5 1F 61 FF 26 42 |....1.1.....a.&B|
00000160: 7C BE 85 7D E8 40 00 EB 0E BE 8A 7D E8 38 00 EB ||..}.@.....}.8..|
00000170: 06 BE 94 7D E8 30 00 BE 99 7D E8 2A 00 EB FE 47 |...}.0...}.*...G|
00000180: 52 55 42 20 00 47 65 6F 6D 00 48 61 72 64 20 44 |RUB .Geom.Hard D|
00000190: 69 73 6B 00 52 65 61 64 00 20 45 72 72 6F 72 00 |isk.Read. Error.|
000001A0: BB 01 00 B4 0E CD 10 AC 3C 00 75 F4 C3 00 00 00 |........<.u.....|
000001B0: 00 00 00 00 00 00 00 00 C4 31 EE 2D CF C9 |.........1.-.. |
Kod: Zaznacz cały
00000000: EB 48 90 00 00 00 00 00 00 00 00 00 00 00 00 00 |.H..............|
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 02 |................|
00000040: FF 00 00 80 01 00 00 00 00 08 FA EB 07 F6 C2 80 |................|
00000050: 75 02 B2 80 EA 59 7C 00 00 31 C0 8E D8 8E D0 BC |u....Y|..1......|
00000060: 00 20 FB A0 40 7C 3C FF 74 02 88 C2 52 BE 7F 7D |. ..@|<.t...R..}|
00000070: E8 34 01 F6 C2 80 74 54 B4 41 BB AA 55 CD 13 5A |.4....tT.A..U..Z|
00000080: 52 72 49 81 FB 55 AA 75 43 A0 41 7C 84 C0 75 05 |RrI..U.uC.A|..u.|
00000090: 83 E1 01 74 37 66 8B 4C 10 BE 05 7C C6 44 FF 01 |...t7f.L...|.D..|
000000A0: 66 8B 1E 44 7C C7 04 10 00 C7 44 02 01 00 66 89 |f..D|.....D...f.|
000000B0: 5C 08 C7 44 06 00 70 66 31 C0 89 44 04 66 89 44 |\..D..pf1..D.f.D|
000000C0: 0C B4 42 CD 13 72 05 BB 00 70 EB 7D B4 08 CD 13 |..B..r...p.}....|
000000D0: 73 0A F6 C2 80 0F 84 EA 00 E9 8D 00 BE 05 7C C6 |s.............|.|
000000E0: 44 FF 00 66 31 C0 88 F0 40 66 89 44 04 31 D2 88 |D..f1...@f.D.1..|
000000F0: CA C1 E2 02 88 E8 88 F4 40 89 44 08 31 C0 88 D0 |........@.D.1...|
00000100: C0 E8 02 66 89 04 66 A1 44 7C 66 31 D2 66 F7 34 |...f..f.D|f1.f.4|
00000110: 88 54 0A 66 31 D2 66 F7 74 04 88 54 0B 89 44 0C |.T.f1.f.t..T..D.|
00000120: 3B 44 08 7D 3C 8A 54 0D C0 E2 06 8A 4C 0A FE C1 |;D.}<.T.....L...|
00000130: 08 D1 8A 6C 0C 5A 8A 74 0B BB 00 70 8E C3 31 DB |...l.Z.t...p..1.|
00000140: B8 01 02 CD 13 72 2A 8C C3 8E 06 48 7C 60 1E B9 |.....r*....H|`..|
00000150: 00 01 8E DB 31 F6 31 FF FC F3 A5 1F 61 FF 26 42 |....1.1.....a.&B|
00000160: 7C BE 85 7D E8 40 00 EB 0E BE 8A 7D E8 38 00 EB ||..}.@.....}.8..|
00000170: 06 BE 94 7D E8 30 00 BE 99 7D E8 2A 00 EB FE 47 |...}.0...}.*...G|
00000180: 52 55 42 20 00 47 65 6F 6D 00 48 61 72 64 20 44 |RUB .Geom.Hard D|
00000190: 69 73 6B 00 52 65 61 64 00 20 45 72 72 6F 72 00 |isk.Read. Error.|
000001A0: BB 01 00 B4 0E CD 10 AC 3C 00 75 F4 C3 00 00 00 |........<.u.....|
000001B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 12 |..............$.|
000001C0: 0F 09 00 BE BD 7D 31 C0 CD 13 46 8A 0C 80 F9 00 |.....}1...F.....|
000001D0: 75 0F BE DA 7D E8 CF FF EB 9D 46 6C 6F 70 70 79 |u...}.....Floppy|
000001E0: 00 BB 00 70 B8 01 02 B5 00 B6 00 CD 13 72 D7 B6 |...p.........r..|
000001F0: 01 B5 4F E9 E6 FE 00 00 00 00 00 00 00 00 55 AA |..O...........U.|
Może właśnie te strzępy LILO powodują tak długie ładowanie się stage1.5?
2. Problem z niedziałającym odliczaniem i automatycznym uruchomieniem wybranej pozycji.
Drugi problem to niedziałające uruchamiania domyślnej pozycji. Odliczanie mam ustawione na 3 sekundy.
Poniżej listy systemów pokazuje się napis:
Kod: Zaznacz cały
The highlighted entry will be booted automatically in 3 seconds.
Zrobiłem mały test. GRUB ładuje podany system, tylko wtedy, gdy plik /boot/grub/menu.lst ma następującą – chyba najmniejszą możliwą – treść:
Kod: Zaznacz cały
default 0
timeout 0
title Debian GNU/Linux, kernel 2.6.26-1-686
kernel (hd0,2)/boot/vmlinuz-2.6.26-1-686 root=/dev/hda3 ro edd=off
initrd (hd0,2)/boot/initrd.img-2.6.26-1-686
Kod: Zaznacz cały
default 0
timeout 1
title Debian GNU/Linux, kernel 2.6.26-1-686
kernel (hd0,2)/boot/vmlinuz-2.6.26-1-686 root=/dev/hda3 ro edd=off
initrd (hd0,2)/boot/initrd.img-2.6.26-1-686
Czyli wystarczy, że parametr timeout ma wartość inną niż 0 i już przestaje działać. Czy to jest jakiś błąd GRUB-a związany z "parsowananiem" pliku konfiguracyjnego, czy może jakiś problem sprzętowy u mnie: w BIOS-ie, procesorze, płycie głównej?
A może wynika to z pozostałości po LILO, o których pisałem wcześniej?
Jeszcze mała historyjka związana z plikami /boot/grub/*stage*. Kilka miesięcy temu dysk twardy upadł z wysokości około 30 cm na podłogę (nie wiem, czy wtedy pracował, ale po kłopotach, które z tego wynikają, przypuszczam, że tak). Po tym GRUB się nie ładował (nie pamiętam numeru błędu) i zepsuł się system plików (który naprawiłem poprzez reiserfsck --rebuild-tree). GRUB-a naprawiłem kopiując pliki stage1, reiserfs_stage1_5, stage2 z innego systemu (nie pamiętam już, czy był to Knoppix czy Ubuntu), a stare zostawiłem zmieniając ich nazwę, bo myślałem, że znajdowały się na uszkodzonych sektorach dysku.
Potem pomyślałem, że może te pliki (pochodzące z innego systemu) są niekompatybilne z częścią GRUB-a zapisaną w MBR, więc przekopiowałem je z paczki grub_0.97-47lenny2_i386.deb. Dodatkowo (bo wydaje mi się, że ta część zapisana w MBR nie szuka stage1.5 po nazwie pliku lecz po sektorze) wykonałem grub-install, żeby nowe położenie na dysku tego pliku zostało zapisane do MBR. Po tym jądro nie uruchamiało się, tylko wypisywało komunikat, żeby dodać parametr edd=off. Dodałem to na stałe do menu.lst i teraz się ładuje.
Według Wikipedii EDD to: Enhanced Disk Drive, aka INT13h Extensions, information provided by a computer BIOS to the operating system. Czyli chyba jednak coś z BIOS-em… Tylko dziwne, że wcześniej działało.