วิธีการตั้งค่าการหมดเวลาของ GRUB เป็น 0 บน Ubuntu 18.04


11

ฉันพยายามอัปเดตไฟล์กำหนดค่า grub เป็นไทม์เอาท์เป็น 0 ดังนั้นระบบปฏิบัติการจึงเริ่มต้นอย่างรวดเร็ว ฉันแก้ไข/etc/default/grubไฟล์การกำหนดค่าบน Ubuntu 18.04 ของฉันแล้ววิ่งไป:

sudo update-grub

และมันไม่ทำงาน ฉันก็วิ่ง:

sudo grub-mkconfig
sudo update-grub

แต่พวกเขาไม่ทำงาน

ฉันค้นหาข้อมูลจำนวนมากบนเว็บเพื่อแก้ไขปัญหานี้ แต่คำแนะนำทั้งหมดบอกให้เรียกใช้คำสั่ง update-grub เพื่ออัปเดต grub ด้วย/etc/default/grubไฟล์ config ฉันไม่รู้ว่าเป็น Ubuntu 18.04 ที่จัดการไฟล์ด้วงด้วยวิธีอื่นหรือไม่ แต่ฉันไม่สามารถอัพเดตด้วงด้วยพารามิเตอร์ของฉันได้

นี่คือ/etc/default/grubไฟล์ของฉัน:

# 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"

3
โปรดแก้ไขคำถามของคุณและรวมไฟล์ปรับแต่งด้วงของคุณไว้ด้วย มิฉะนั้นเราแค่พยายามเดาว่าคุณทำอะไร
หินอ่อนอินทรีย์

คุณติดตั้งดิสทริบิวชันอื่น ๆ (ดูอัลบูต) หรือไม่
mook765

ไม่ได้หมายความว่าการหมดเวลาด้วงของฉันยังคงตั้งไว้ที่ 10 วินาทีตามค่าเริ่มต้น @Melebius
Bob91

ฉันมี windows ใน ssd เดียวกันและ distros อื่น ๆ ที่ติดตั้งบน hdd อื่น ๆ แต่เมื่อเดือนที่แล้วฉันมี fedora 27 (แทนที่จะเป็น Ubuntu 18) และมันทำงานเมื่อฉันเปลี่ยนไฟล์ config grub ดังนั้นฉันคิดว่า distros อื่นไม่ใช่สาเหตุของ พฤติกรรมนี้ @ mook765
Bob91

1
คุณช่วยกรุณาเรียกใช้Boot-Infoและแก้ไขคำถามของคุณเพื่อรวมลิงค์ไปยังบันทึกข้อมูลที่ได้หรือไม่ ขอบคุณ
David Foerster

คำตอบ:


13

ใน/boot/grub/grub.cfgไฟล์มีเงื่อนไขเกือบท้ายไฟล์ที่ตั้งค่าการหมดเวลาเป็น 10 หากการหมดเวลาถูกตั้งค่าเป็น 0 ในคำอื่น ๆ ถ้าคุณตั้งค่าการหมดเวลาเป็น 0 ในของคุณ/etc/default/grubแล้วปรับปรุงด้วงเงื่อนไขข้างต้น รีเซ็ตเป็น 10 วินาที

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

อย่างไรก็ตาม/boot/grub/grub.cfgเป็นไฟล์แบบอ่านอย่างเดียวและฉันไม่สามารถลบเงื่อนไขนั้นได้ /etc/default/grubฉันทำทดสอบบางอย่างที่มีค่าที่แตกต่างกันของการหมดเวลาใน ฉันลองกับ 1ms (0.001), 0.1s และ 1s และฉันพบว่าค่าที่ต่ำกว่า 1 (เช่น 0.1 และ 0.001) ทำงานในลักษณะเดียวกันและเกือบหมดเวลาเหมือนตั้งเป็น 0


work in the same way and almost like timeoutนั่นเป็นเพราะคณิตศาสตร์ใน bash รองรับจำนวนเต็มเท่านั้น 1หมดเวลาที่สั้นที่สุดที่จะสร้างความแตกต่างคือ
Marcin Orlowski

6

ในกรณีของฉันปัญหาคือว่าระบบของฉันไม่สนับสนุน "recordfail" ซึ่งทำให้บล็อกแยกเพื่อเพิ่มใน grub.cfg ซึ่งเริ่มต้นการหมดเวลา 30 วินาที รหัสที่เกี่ยวข้องใน/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

การแก้ไขเป็นเพียงการเพิ่มค่าสำหรับGRUB_RECORDFAIL_TIMEOUTใน/etc/default/grubและทำงานupdate-grubอีกครั้ง ตัวอย่างเช่น:

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"

3

เช่นเดียวกับคำตอบอื่น ๆ พูด uncomment และเรียกใช้GRUB_HIDDEN_TIMEOUT update-grubจากนั้นออกความคิดเห็น

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

/boot/grub/grub.cfgส่วนใน :x!ในกลุ่มคุณก็สามารถแทนที่คุณสมบัติอ่านอย่างเดียวที่มีเครื่องหมายอัศเจรีย์ หรือคุณสามารถเรียกใช้

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

เพื่อให้มีสิทธิ์เขียนชั่วคราวในขณะที่แก้ไขไฟล์


3
คุณพูดถูก แต่ฉันคิดว่าทุกครั้งที่คุณอัปเดตด้วง (ด้วยตนเองหรือเมื่อมีการอัพเกรดระบบปฏิบัติการใด ๆ ) ระบบ/boot/grub/grub.cfgจะสร้างใหม่ตามเงื่อนไขด้านบน
Bob91

2
นั่นเป็นความจริงไฟล์ถูกเขียนทับเมื่อมีการอัพเดตอย่างที่ฉันเคยประสบมา
asantas93

1

คุณสามารถตั้งค่าการGRUB_TIMEOUT0

ส่วนการเขียนทับค่าหมดเวลาเขียนในฟังก์ชั่นในด้านบนของajust_timeout/etc/grub.d/30_os-prober

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

ดังนั้นคุณสามารถตั้งค่าได้โดยแก้ไขไฟล์และใส่เครื่องหมายความคิดเห็น if-block


1

คุณสามารถตั้งค่าการGRUB_TIMEOUT-1

Ex:GRUB_TIMEOUT="-1"


'GRUB_TIMEOUT' บูตรายการเริ่มต้นนี้ในไม่กี่วินาทีหลังจากเมนูปรากฏขึ้นเว้นแต่ว่ากดปุ่ม ค่าเริ่มต้นคือ '5' ตั้งค่าเป็น '0' เพื่อบูตทันทีโดยไม่แสดงเมนูหรือเป็น '-1' เพื่อรออย่างไม่มีกำหนด จากคำสั่งinfo -f grub -n 'Simple configuration
วีเจย์


0

เราสามารถเพิ่มบรรทัดได้

set timeout=0

เพื่อ/etc/grub.d/40_customทำให้ไฟล์ปฏิบัติการด้วย

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

และเรียกใช้

sudo update-grub

เพื่อสร้าง/boot/grub/grub.cfgไฟล์ใหม่ set timeoutคำสั่งเราได้เพิ่มล่าสุดเป็นset timeoutคำสั่งใน/boot/grub/grub.cfgตอนนี้ว่าเป็นสิ่งที่นับ


-1

ทางออกคือการเพิ่ม

GRUB_RECORDFAIL_TIMEOUT=0

/etc/default/grubไปยัง

โซลูชั่นอื่น ๆ ทั้งหมดจะถูกรีเซ็ตเมื่ออัพเดตด้วง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.