Jak ustawić limit czasu GRUB na 0 na Ubuntu 18.04

11

Próbowałem zaktualizować plik konfiguracyjny grub do limitu czasu do wartości 0, więc system operacyjny uruchamia się szybko. Zmodyfikowałem /etc/default/grubplik konfiguracyjny na moim Ubuntu 18.04, a następnie uruchomiłem:

sudo update-grub

i to nie zadziałało. Prowadziłem także:

sudo grub-mkconfig
sudo update-grub

ale nie działały.

Dużo szukałem w Internecie, aby rozwiązać ten problem, ale wszyscy przewodnicy mówią o uruchomieniu polecenia update-grub, aby zaktualizować gruba przez /etc/default/grubplik konfiguracyjny. Nie wiem, czy Ubuntu 18.04 obsługuje pliki grub w inny sposób, ale nie mogę zaktualizować grub za pomocą moich parametrów.

To jest mój /etc/default/grubplik:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

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

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Bob91
źródło
3
Edytuj swoje pytanie i dołącz zmodyfikowany plik konfiguracyjny grub. W przeciwnym razie staramy się zgadnąć, co zrobiłeś.
Marmur Organiczny
Czy masz zainstalowane inne dystrybucje (podwójny rozruch)?
mook765
to nie działało, oznacza to, że mój limit czasu GRUB-a jest nadal ustawiony na 10 sekund, jak domyślnie @Melebius
Bob91
Mam okna w tym samym ssd i inne dystrybucje zainstalowane na innym dysku twardym, ale w zeszłym miesiącu miałem fedora 27 (zamiast Ubuntu 18) i działało, kiedy zmieniłem plik konfiguracyjny grub, więc myślę, że inne dystrybucje nie są przyczyną takie zachowanie @ mook765
Bob91
1
Czy możesz uruchomić Boot-Info i edytować swoje pytanie, aby dołączyć link do wynikowego dziennika informacyjnego? Dzięki.
David Foerster,

Odpowiedzi:

13

W /boot/grub/grub.cfgpliku występuje warunek, prawie na końcu pliku, który ustawia limit czasu na 10, jeśli limit czasu jest ustawiony na 0. Innymi słowy, jeśli ustawisz limit czasu na 0 w swoim pliku, /etc/default/gruba następnie zaktualizujesz grub, powyższy warunek zresetuj go do 10 sekund.

if [ "${timeout}" = 0 ]; then
     set timeout=10
fi

Jednak /boot/grub/grub.cfgplik jest tylko do odczytu i nie mogę usunąć tego warunku. Wykonałem kilka testów z różnymi wartościami limitu czasu w /etc/default/grub. Próbowałem z 1ms (0,001), 0,1s i 1s i odkryłem, że wartości poniżej 1 (jak 0,1 i 0,001) działają w ten sam sposób i prawie jak limit czasu ustawiony na 0.

Bob91
źródło
work in the same way and almost like timeoutto dlatego, że matematyka w bash obsługuje tylko liczby całkowite. Najkrótszy limit czasu, który zrobiłby różnicę, to 1.
Marcin Orłowski,
6

W moim przypadku problem polegał na tym, że mój system nie obsługiwał „Recordfail”, co spowodowało dodanie osobnego bloku do pliku grub.cfg, który domyślnie przekroczy 30 sekund. Odpowiedni kod w /etc/grub.d/00_header:

if [ "$recordfail_broken" = 1 ]; then
  cat << EOF
if lsefi; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
  if [ x\$feature_timeout_style = xy ] ; then
    set timeout_style=menu
  fi
fi
EOF

Poprawka polega po prostu na dodaniu wartości GRUB_RECORDFAIL_TIMEOUTin /etc/default/grubi update-grubponownym uruchomieniu . Na przykład:

GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

# Adjusted timeout for system which doesn't support recordfail
GRUB_RECORDFAIL_TIMEOUT=2

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
Alex Malinovich
źródło
3

Tak jak inne odpowiedzi mówią, niekomentuj GRUB_HIDDEN_TIMEOUTi uciekaj update-grub. Następnie skomentuj

if [ "${timeout}" = 0 ]; then
  set timeout=10
fi

sekcja w /boot/grub/grub.cfg. W vimie możesz po prostu zastąpić właściwość tylko do odczytu wykrzyknikiem :x!. Lub możesz biegać

sudo chmod +w /boot/grub/grub.cfg
sudo vim /boot/grub/grub.cfg
sudo chmod -w /boot/grub/grub.cfg

tymczasowo mieć uprawnienia do zapisu podczas edycji pliku.

asantas93
źródło
3
Masz rację, ale myślę, że za każdym razem, gdy aktualizujesz grub (ręcznie lub gdy jest jakaś aktualizacja OS), /boot/grub/grub.cfgzostanie odtworzony z powyższym warunkiem.
Bob91
2
To prawda, że ​​plik został nadpisany podczas aktualizacji, czego ostatnio doświadczyłem.
asantas93
1

Możesz ustawić GRUB_TIMEOUTna 0.

Wartość limitu czasu nadpisywania części jest zapisana w ajust_timeoutfunkcji na górze /etc/grub.d/30_os-prober.

ajust_timeout () {
...
if [ "\${timeout}" = 0]; then
  set timeout=10
fi
...
}

Możesz więc ustawić wartość, edytując plik i komentując if-block.

Gość
źródło
1

Możesz ustawić GRUB_TIMEOUTna -1.

Dawny:GRUB_TIMEOUT="-1"

Giceu Cassiano
źródło
„GRUB_TIMEOUT” Uruchom domyślny wpis tyle sekund po wyświetleniu menu, chyba że zostanie naciśnięty klawisz. Domyślnie jest to „5”. Ustaw na „0”, aby uruchomić natychmiast bez wyświetlania menu, lub na „-1”, aby czekać bez końca. z poleceniainfo -f grub -n 'Simple configuration
Vijay,
1

Odkomentuj GRUB_HIDDEN_TIMEOUT=0i uruchom update-grubponownie.

hiigaran
źródło
to nie działa
Bob91
GRUB_HIDDEN_TIMEOUT = -1
kuhajeyan
1
GRUB_HIDDEN_TIMEOUT=-1pracował na Ubuntu 18.10.
Manish Raj,
0

Możemy po prostu dodać linię

set timeout=0

aby /etc/grub.d/40_customsprawiają, że plik wykonywalny z

chmod +x /etc/grub.d/40_custom

i biegnij

sudo update-grub

aby wygenerować nowy /boot/grub/grub.cfgplik. set timeout-Polecenie dodaliśmy jest ostatnią set timeout-polecenie w /boot/grub/grub.cfgteraz, to się liczy.

mook765
źródło
-1

Rozwiązaniem jest dodanie

GRUB_RECORDFAIL_TIMEOUT=0

do /etc/default/grub.

Wszystkie inne rozwiązania zostaną zresetowane po aktualizacjach grub.

Pilot 6
źródło