Ich bin grad nochmal an der Thematik dran um den Grund für das Verhalten zu analysieren... Wollte mein dual Boot System von -1 auf 5 setzen da ich Windows kaum bis gar nicht mehr brauche... Dabei fiel mir folgendes auf und da ist auch der Unterschied Linux mint zu allen anderen Distros.
xxxxxxxx@xxxxxxxxx:~$ sudo cat /boot/grub/grub.cfg | grep timeout
set timeout=30
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
set timeout=5
set timeout=30
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
set timeout=10
Display More
Irgendwoher bezieht er noch andere Werte. set timeout=5 kommt von mir. Aber da steht noch der Mint Standard mit 30 mit drin und dann auch noch mehrfach.
Einen konnte ich schon mal Identifizieren. 30_os-prober setzt einen Timeout von 10
xxxxxxxx@xxxxxxxxx:~$ ls /etc/grub.d/
00_header 05_debian_theme 10_linux 10_linux_zfs 20_linux_xen 25_bli 30_os-prober 30_uefi-firmware 35_fwupd 40_custom 41_custom README
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/05_debian_theme
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/10_linux
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/10_linux_zfs
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/20_linux_xen
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/25_bli
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/30_os-prober
adjust_timeout () {
set timeout_style=menu
if [ "\${timeout}" = 0 ]; then
set timeout=10
adjust_timeout
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/30_uefi-firmware
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/35_fwupd
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/40_custom
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/41_custom
Display More
Die Header hatte ich noch vergessen und da steckt der ware Übeltäter wie mir scheint
xxxxxxxx@xxxxxxxxx:~$ grep timeout /etc/grub.d/00_header
make_timeout ()
set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
timeout="${2}"
timeout="${1}"
# No hidden timeout, so treat as GRUB_TIMEOUT_STYLE=menu
timeout="${2}"
if [ x\$feature_timeout_style = xy ] ; then
set timeout_style=${style}
set timeout=${timeout}
# Fallback normal timeout code in case the timeout_style feature is
set timeout=${timeout}
# Fallback hidden-timeout code in case the timeout_style feature is
elif sleep${verbose} --interruptible ${timeout} ; then
set timeout=0
set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
if [ x\$feature_timeout_style = xy ] ; then
set timeout_style=menu
make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_STYLE_BUTTON}"
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}"
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}"
Display More
Ok, oder auch nicht... Eine genauere Analyse der Datei zeigt if <-> else Anweisungen ala:
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
EOF
make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_STYLE_BUTTON}"
echo else
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}"
echo fi
else
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}"
fi
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ] && [ "x$GRUB_BUTTON_CMOS_CLEAN" = "xyes" ]; then
cat <<EOF
cmosclean $GRUB_BUTTON_CMOS_ADDRESS
EOF
fi
Display More
Das sollte also soweit ok sein... Aber woher kommen dann die ganzen set timeout einträge?
Ok, die Analyse zusammen mit chatGPT zeigt, dass der Fehler wohl von meinem Dateisystem (BTRFS) und EFI kommt.
Aussage chatGPT:
Wenn recordfail_broken=1 (→ also recordfail kann nicht gespeichert werden, z. B. weil du btrfs nutzt), wird dieser zusätzliche Timeout-Block eingefügt:
if [ $grub_platform = efi ]; then
set timeout=30
...
fi
Nun ist die Frage, wie löst man das sauber auf?
Ok. Folgende Lösung:
Da bei Dual Boot, EFI-Systemen und BTRFS oder einer Kombination daraus immer ein recordfail_broken=1 gesetzt wird (Meines erachtens ein Bug im grub 00_header oder der verarbeitung dahinter) und ich nicht vorhatte, grub "umzuprogrammieren" 😉 hier nun ein einfacher Weg die Zeit zu erzwingen.
sudo nano /etc/default/grub
GRUB_RECORDFAIL_TIMEOUT=5
Dies ans Ende setzen. Warum und weshalb wirkt das?
Durch recordfail werden Einstellungen immer mit timeout=30 überschrieben. Es sei denn wir geben etwas anderes vor. Mit GRUB_RECORDFAIL_TIMEOUT=5 überschreiben wir den Standardwert bei recordfail mit Timeout=5, die Zeit muss natürlich den Bedürfnissen angepasst werden. Wenn kein Timer gewünscht ist also gewohnt -1
Am Ende wie gewohnt die Bootconfig schreiben mit
sudo update-grub