Nie można uzyskać menu GRUB-a po przekroczeniu limitu czasu (lub odejść)

18

Używam Ubuntu 12.04.

Nie mogę przez całe życie sprawić, by menu GRUB (z opcjami) zniknęło.

Chciałbym, aby automatycznie uruchomił się w pierwszej opcji. Edytowałem / etc / default / grub, aby wyglądało to tak:

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Następnie uruchomiłem sudo update-grub . Potem zdałem sobie sprawę, że mam grub 2, więc uruchomiłem sudo update-grub2 (oba wyglądają, jakby pomyślnie utworzyły plik grub.cfg .

Ponownie uruchamiam komputer, a on wraca do menu grub i po prostu siedzi tam, aż dokonuję wyboru. Nie jest to pożądane, jeśli nastąpi zanik zasilania ... :-)

Próbowałem również ponownie zainstalować grub przy użyciu sudo grub-install / dev / sda - również nie powiodło się

Eric
źródło
Czy przypadkiem masz inną partycję, na którą zainstalowałeś Ubuntu po skonfigurowaniu bieżącej partycji, na której chcesz teraz automatycznie uruchamiać się?
fabricator4
Nie jestem pewien, co masz na myśli, jestem trochę nowy w Linuksie. Zainstalowałem wcześniejszą instalację Ubuntu, ale nie zaktualizowałem. Czysta instalacja. Mogłem zepsuć coś partycjonalnie ... to możliwe, jakieś pomysły na to naprawić?
Eric
sudo update-grubi sudo update-grub2uruchamia to samo polecenie. Więc nie martw się o tę część.
saji89 18.10.12
Proszę opublikować wyniki za cat /boot/grub/grub.cfg pośrednictwem pastebin i udostępnić link tutaj. Ma to na celu wyświetlenie faktycznego grub.cfgwygenerowania.
saji89
Oto pastebin: pastebin.com/xxe2rLhg z grub.cfg. Dzięki za wszelką pomoc!
Eric

Odpowiedzi:

23

Jak wskazują inne odpowiedzi, możesz być ofiarą sytuacji braku zapisu . /boot/grub/grub.cfgRęczna edycja powinna być wykluczona, ponieważ jest generowana automatycznie. Inną sugerowaną opcją jest edycja pliku, /etc/grub.d/00_headerale może on poprosić użytkownika o interwencję w sprawie aktualizacji.

Najłatwiejszym rozwiązaniem jest zdefiniowanie nieudokumentowanej GRUB_RECORDFAIL_TIMEOUT zmiennej w /etc/default/grub. Na przykład:

GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT

Edytować

Zobacz tę odpowiedź, aby uzyskać więcej informacji.

C2H5OH
źródło
1
Dziękuję bardzo, właśnie tego szukałem!
Avio
1
Po wprowadzeniu zmiany uruchom także, update-grubaby wygenerować zaktualizowany /boot/grub/grub.cfgplik
Colt
Nie zabijaj funkcjonalności recordfail! Chcesz wydłużyć limit czasu, jeśli wystąpił błąd uruchamiania. Aby ręcznie jasne, wszystko czego potrzebujesz to użytkownika @ sniffski odpowiedź: grub-editenv create. Jednak może być jakiś inny powód, dla którego warto recordfailsię ustawić ...
Cameron Tacklind,
6

Posługiwać się:

grub-editenv create

Spowoduje to wyczyszczenie pliku środowiska grub i powinno zostać uruchomione wyraźnie następnym razem.

sniffski
źródło
Dziękuję bardzo za udostępnienie. To działało przez SSH, co sprawiło, że mój dzień utknął na grubym serwerze bezgłowym.
Geppettvs D'Constanzo
1
grub-editenv - unset recordfaildziała również i nie wpływa na inne środowiska, które mogą być ustawione
Cameron Tacklind,
2

zmień na GRUB_TIMEOUT=10zero

To jest mój plik konfiguracyjny:

GRUB_DEFAULT="Ubuntu, with Linux 3.2.0-30-generic-pae"
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

Najpierw wpisz nazwę systemu operacyjnego, który chcesz uruchomić bezpośrednio. Mój to Ubuntu. Więc napiszesz to jak wGRUB_DEFAULT="Ubuntu, with Linux x.x.x-xx-generic-pae"

następnie użyłem 1 sekundy w, GRUB_TIMEOUT=aby dać mi 1 sekundę przed wybraniem domyślnego systemu operacyjnego (jeśli muszę uruchomić system operacyjny na inny system operacyjny, na przykład Xubuntu)

jak GRUB_CMDLINE_LINUX_DEFAULT=""po wyjęciu quite splashpokaże Ci teksty zamiast logo Ubuntu podczas procesu uruchamiania (I jak to w ten sposób: P)


Istnieje inne rozwiązanie:

Istnieje program o nazwie boot-repair, który pomaga w konfiguracji z GUI.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

jak widać z obrazka. jest pole o nazwie Unhide boot menu. Po prostu odznacz pole i naciśnij appy. Możesz uzyskać do niego dostęp, klikając strzałkę opcji zaawansowanych.

zainstalować naprawę rozruchu

sudo add-apt-repository ppa:yannubuntu/boot-repair

sudo apt-get update

sudo apt-get install -y boot-repair

a następnie uruchom boot-reapiralbo z terminala, albo z deski rozdzielczej.


Trzecie rozwiązanie:

możesz użyć łatwej w obsłudze aplikacji GUI o nazwie grub-customizer, aby ułatwić sobie życie. Jak sama nazwa wskazuje, możesz zrobić znacznie więcej niż tylko zmieniać kolejność pozycji menu Grub.

Możesz go zainstalować:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

wprowadź opis zdjęcia tutaj

jak widać z menu, istnieje show menuopcja. Odczep i sprawdź, czy to działa

Suhaib
źródło
Brak zmiany. : - / Myślałem, że GRUB_DEFAULT powinien być numerem # zgodnie z listą w menu? Zmiana GRUB_TIMEOUT na 0 nie pomogła.
Eric
@Eric możesz użyć 2 sposobów: jeśli znasz miejsce swojego systemu operacyjnego na liście grub, możesz użyć numeru. Ale dla mnie mam 4 dystrybucje Linuksa i 1 Windows plus memTest i odzyskiwanie. Więc trudno mi zapamiętać ich miejsca :) tylko dla pewności (wiem, że mogłeś to zrobić, ale dla pewności: P). Czy uruchomiłeś grub-updatepo zmianie wartości?
Suhaib,
Uruchomiłem grub-update po zmianie wartości. : - /
Eric,
Zainstalowałem i użyłem podanej przez ciebie aplikacji do naprawy rozruchu, działa ona przy pierwszym ponownym uruchomieniu. Następnie menu GRUB powraca i pozostaje tam, dopóki nie nacisnę żadnego klawisza. Dziękuję za całą pomoc, naprawdę to doceniam. Nie jestem pewien, dokąd się stąd udać ...
Eric,
@Eric ok Znalazłem trzecie rozwiązanie, sprawdź to
Suhaib,
2

GRUB_HIDDEN_TIMEOUTi GRUB_HIDDEN_TIMEOUT_QUIETopcje są przestarzałe. Skomentuj to.

Aby pominąć menu i pokazać je tylko podczas trzymania ESC, dodaj:

GRUB_TIMEOUT_STYLE='countdown'
GRUB_TIMEOUT=1

Próba /etc/default/grub

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_TIMEOUT_STYLE=countdown
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

„GRUB_TIMEOUT_STYLE” : Jeśli ta opcja jest ustawiona na „odliczanie” lub „ukryta”, to przed wyświetleniem menu GRUB będzie czekać na upływ czasu ustawionego przez „GRUB_TIMEOUT”. Jeśli ESC zostanie naciśnięty w tym czasie, to wyświetlenie menu i czekać na wejście.

Gayan Weerakutti
źródło
to powinien , ale robi to pokazuje standardowe menu na 1 sekundę. Przynajmniej na zupełnie nowym 16.04
frnhr
1

Mógłbym rozwiązać ten problem, dodając następujący wiersz /etc/default/grub

GRUB_DISABLE_OS_PROBER=true

... a następnie biegnie sudo update-grub.

Objaśnienie: Plik /boot/grub/grub.cfgjest generowany przez uruchomienie update-grubprzy użyciu plików w /etc/grub.di /etc/default/grub. Dlatego nie należy edytować grub.cfg, ale pomocne może być ustalenie, dlaczego ustawiony jest limit czasu. Wyszukaj linie zaczynające się od, set timeout=a następnie wyszukaj kolejną linię zaczynającą się od ### END /etc/grub.d/ .... Może to dać wskazówki, który skrypt ustawia limit czasu. W moim przypadku za przekroczenie limitu czasu odpowiedzialny był skrypt os-prober. Okazuje się, że istnieje ustalony na 10 sekund limit czasu, w /etc/grup.d/30_os-proberktórym nie jest ustawiony GRUB_TIMEOUT. Możesz albo wyłączyć os-prober, GRUB_DISABLE_OS_PROBER=truealbo edytować, /etc/grup.d/30_os-proberlub użyć, GRUB_OS_PROBER_SKIP_LISTaby pominąć niektóre partycje dysku twardego (30_os-prober jest używany, gdy gdzieś znajduje się inny system operacyjny). Zobacz szczegółowe pytania i odpowiedzi. Jak zauważyli inni, innym powodem może być brak zapisu w tym przypadku GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT.

lędźwiowy
źródło
0

Miałem problem z tym, że menu GRUB pojawiało się zawsze po tym, jak użyłem AUFS (unionfs) do odczytu systemu plików root. Musiałem fizycznie nacisnąć klawisz Enter na serwerze po każdym uruchomieniu. Postępowałem zgodnie z instrukcjami tutaj: wyłącz menu Grub 2 . Ponieważ nie miałem żadnych problemów.

Edytuj plik /boot/grub/grub.cfg i zmień:

if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi

Do

if [ ${recordfail} = 1 ]; then
  set timeout=1
else
  set timeout=10
fi
Fabio Vaz
źródło
Przed i po w twoim rozwiązaniu są dokładnie takie same.
RawwrBag,
set timeout=-1to nie to samo co set timeout=1. Pierwsza z nich to „poczekaj na zawsze”, a druga to „poczekaj jedną sekundę”.
Jeff McJunkin
0

Moje Ubuntu zawsze miało limit czasu 30 sekund, albo ustawiłbym wartość, albo nie. Oto jak dowiedziałem się, że brak zapisu był brakujący .

1. Sprawdź rzeczywisty skrypt grub /boot/grub/grub.cfg

IMHO, najlepszym sposobem na sprawdzenie, co zrobi Grub, jest otwarcie /boot/grub/grub.cfg. Jest to skrypt generowany automatycznie przy grub-mkconfigużyciu szablonów /etc/grub.di ustawień z /etc/default/grub.

Wokół linii 109 zobaczysz coś takiego:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=30 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

W moim przypadku przy pomocy tego wygenerowanego skryptu mogłem dowiedzieć się, że recordfailzmienna nie była ustawiona.

2. Jeśli recordfailzmienna nie jest ustawiona, ustaw ją

Otwórz /etc/default/grubw swoim ulubionym edytorze tekstu (np. Vim), a następnie ustaw zmienną GRUB_RECORDFAIL_TIMEOUTna podaną wartość, na przykład 5 sekund.

Twój plik konfiguracyjny powinien wyglądać następująco:

GRUB_DEFAULT=0
GRUB_TIMEOUT=3
GRUB_TIMEOUT_STYLE=hidden
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_RECORDFAIL_TIMEOUT=5

3. Zaktualizuj konfigurację do uruchomienia update-grub

Ostatnim krokiem jest aktualizacja konfiguracji do uruchomienia update-grub. Na razie GRUB2 użyje ustawionego limitu czasu. To polecenie zregeneruje /boot/grub.cfgplik.

4. Sprawdź wygenerowany wynik skryptu

Ponownie otwórz /boot/grub.cfgi sprawdź wynik wokół linii 109:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=5 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

Zauważ, że wartość w wierszu 109 wynosi teraz 5 zamiast 30 jak poprzednio.

KeyMaker00
źródło