ไม่สามารถรับเมนูด้วงเพื่อหมดเวลา (หรือหายไป)


18

ฉันใช้ Ubuntu 12.04

ฉันไม่สามารถใช้ชีวิตของฉันได้เมนูด้วง (พร้อมตัวเลือก) ที่จะหายไป

ฉันต้องการให้บูทอัตโนมัติเป็นตัวเลือกแรก ฉันได้แก้ไข/ etc / default / grubเพื่อให้เป็นดังนี้:

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

หลังจากนี้ฉันวิ่งsudo ปรับปรุงด้วง จากนั้นฉันก็รู้ว่าฉันมีด้วง 2 ดังนั้นฉันจึงรันsudo update-grub2 (ทั้งคู่ทำให้ดูเหมือนว่าพวกเขาสร้างไฟล์grub.cfg ได้สำเร็จ

ฉันรีสตาร์ทคอมพิวเตอร์และกลับไปที่เมนูด้วงและนั่งอยู่ที่นั่นจนกว่าฉันจะทำการเลือก สิ่งนี้ไม่เป็นที่ต้องการหากพลังดับลง ... :-)

ฉันยังลองติดตั้งด้วงใหม่โดยใช้sudo grub-install / dev / sda - ยังไม่สำเร็จอีกด้วย


คุณมีพาร์ติชั่นอื่นที่คุณติดตั้ง Ubuntu ไว้หรือไม่หลังจากติดตั้งพาร์ติชั่นปัจจุบันที่คุณต้องการบูทโดยอัตโนมัติ?
fabricator4

ฉันไม่แน่ใจว่าคุณหมายถึงอะไรฉันยังใหม่กับลินุกซ์ ฉันติดตั้งผ่านการติดตั้ง Ubuntu ก่อนหน้านี้ แต่ฉันไม่ได้อัพเกรด ทำความสะอาดติดตั้ง ฉันอาจทำให้พาร์ทิชันฉลาดขึ้น ... เป็นไปได้ความคิดใด ๆ ในการแก้ไขหรือไม่
Eric

sudo update-grubและsudo update-grub2รันคำสั่งเดียวกัน ดังนั้นไม่ต้องกังวลกับส่วนนั้น
saji89

กรุณาโพสต์ผลลัพธ์ของcat /boot/grub/grub.cfg ผ่าน pastebin และแชร์ลิงค์ที่นี่ นี้คือการดูที่เกิดขึ้นจริงgrub.cfgที่สร้างขึ้น
saji89

นี่คือ pastebin: pastebin.com/xxe2rLhgของ grub.cfg ขอบคุณสำหรับความช่วยเหลือของคุณ!
Eric

คำตอบ:


23

ในฐานะที่เป็นคำตอบอื่น ๆ ชี้ให้เห็นคุณอาจจะเป็นเหยื่อของrecordfailสถานการณ์ การแก้ไข/boot/grub/grub.cfgด้วยตนเองควรเป็นไปตามที่สร้างขึ้นโดยอัตโนมัติ อีกข้อเสนอแนะที่เห็นรอบคือการแก้ไข/etc/grub.d/00_headerแต่ก็สามารถแจ้งให้ผู้ใช้ในการปรับปรุง

ทางออกที่ง่ายที่สุดคือการกำหนดที่ไม่มีเอกสาร ตัวแปรในGRUB_RECORDFAIL_TIMEOUT /etc/default/grubตัวอย่างเช่น:

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

แก้ไข

ดูคำตอบนี้สำหรับรายละเอียดเพิ่มเติม


1
ขอบคุณมากนี่คือสิ่งที่ฉันกำลังมองหา!
Avio

1
หลังจากทำการเปลี่ยนแปลงแล้วupdate-grubให้เรียกใช้เพื่อสร้าง/boot/grub/grub.cfgไฟล์ที่อัปเดต
Colt

อย่าฆ่าฟังก์ชั่นของrecordfail! คุณต้องการการหมดเวลานานขึ้นหากมีการบูทล้มเหลว การที่ชัดเจนด้วยตนเองทั้งหมดที่คุณต้องการคือคำตอบของ @ grub-editenv createsniffski: อย่างไรก็ตามอาจมีเหตุผลอื่นที่recordfailกำลังถูกกำหนด ...
Cameron Tacklind

6

ใช้:

grub-editenv create

นี่จะล้างไฟล์สภาพแวดล้อมด้วงและควรบูตอย่างชัดเจนในครั้งต่อไป


ขอบคุณมากสำหรับการแบ่งปัน สิ่งนี้ทำงานผ่าน SSH ซึ่งทำให้วันของฉันติดอยู่กับเซิร์ฟเวอร์หัวขาดด้วง
Geppettvs D'Constanzo

1
grub-editenv - unset recordfailทำงานได้ดีและไม่ส่งผลกระทบต่อ envs อื่น ๆ ที่อาจถูกตั้งไว้
Cameron Tacklind

2

เปลี่ยนGRUB_TIMEOUT=10เป็นศูนย์

นี่คือไฟล์การกำหนดค่าของฉัน:

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

ก่อนอื่นให้เขียนชื่อของระบบปฏิบัติการที่คุณต้องการจะบู๊ตโดยตรง ของฉันคืออูบุนตู ดังนั้นคุณจะเขียนมันเหมือนในGRUB_DEFAULT="Ubuntu, with Linux x.x.x-xx-generic-pae"

จากนั้นฉันใช้เวลา 1 วินาทีในการGRUB_TIMEOUT=ให้ฉัน 1 วินาทีก่อนที่จะเลือกระบบปฏิบัติการเริ่มต้น (ถ้าฉันต้องการบูตไปยังระบบปฏิบัติการอื่นเช่น Xubuntu)

ส่วนGRUB_CMDLINE_LINUX_DEFAULT=""ถ้าคุณลบquite splashมันจะแสดงข้อความแทนโลโก้ Ubuntu ระหว่างกระบวนการบูท (ฉันชอบวิธีนี้: P)


มีวิธีแก้ไขปัญหาอื่น:

มีโปรแกรมที่เรียกว่าboot-repairซึ่งช่วยในการกำหนดค่าด้วย GUI

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นจากภาพ Unhide boot menuมีช่องที่เรียกว่า เพียงแค่ยกเลิกการเลือกกล่องแล้วกดแอป คุณสามารถเข้าถึงสิ่งนี้ได้โดยคลิกที่ลูกศรตัวเลือกขั้นสูง

เพื่อติดตั้งการซ่อมแซมการบูต

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

sudo apt-get update

sudo apt-get install -y boot-repair

จากนั้นเรียกใช้boot-reapirจากเทอร์มินัลหรือจากเส้นประ


วิธีที่ 3:

คุณสามารถใช้แอพ GUI ที่ใช้งานง่ายที่เรียกว่า grub-customizer เพื่อทำให้ชีวิตของคุณง่ายขึ้น ตามชื่อที่แนะนำคุณสามารถทำได้มากกว่าเพียงแค่จัดลำดับรายการเมนูด้วงด้วยซ้ำ

คุณสามารถติดตั้งได้โดย:

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

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นจากเมนูมีshow menuตัวเลือก Unhceck และดูว่ามันใช้งานได้หรือไม่


ไม่มีการเปลี่ยนแปลง. : - / ฉันคิดว่า GRUB_DEFAULT ควรเป็นตัวเลข # ตามรายการในเมนูหรือไม่ การเปลี่ยน GRUB_TIMEOUT เป็น 0 ไม่ได้ช่วยอะไร
Eric

@Eric คุณสามารถใช้ 2 วิธี: หากคุณรู้จักสถานที่ของระบบปฏิบัติการของคุณในรายการด้วงคุณสามารถใช้ตัวเลขได้ แต่สำหรับฉันฉันมี distros Linux 4 ตัวและ Windows 1 บวก memTest และการกู้คืน ดังนั้นมันจึงยากสำหรับฉันที่จะจดจำสถานที่ของพวกเขา :) เพียงเพื่อให้แน่ใจ (ฉันรู้ว่าคุณอาจจะทำมัน แต่เพื่อให้แน่ใจว่า: P) คุณเรียกใช้grub-updateหลังจากเปลี่ยนค่าหรือไม่
Suhaib

ฉันรันการอัพเดตด้วงหลังจากเปลี่ยนค่า : - /
Eric

ฉันติดตั้งและใช้แอพซ่อมแซมการบูตที่คุณให้มามันใช้งานได้ในการรีบูตครั้งแรก หลังจากนั้นเมนู GRUB จะกลับมาและอยู่ที่นั่นจนกว่าฉันจะกดปุ่ม ขอบคุณสำหรับความช่วยเหลือของคุณฉันขอขอบคุณจริงๆ ไม่แน่ใจว่าจะไปจากที่นี่ ...
เอริค

ok @ Eric ผมพบว่าวิธีการแก้ปัญหาที่ 3 ตรวจสอบ
Suhaib

2

GRUB_HIDDEN_TIMEOUTและGRUB_HIDDEN_TIMEOUT_QUIETตัวเลือกจะเลิก ดังนั้นออกความเห็นเหล่านั้น

หากต้องการข้ามเมนูและแสดงเมื่อกดค้างไว้ESCให้เพิ่ม:

GRUB_TIMEOUT_STYLE='countdown'
GRUB_TIMEOUT=1

ตัวอย่าง /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' : หากตัวเลือกนี้ถูกตั้งค่าเป็น 'countdown' หรือ 'hidden' ก่อนที่จะ แสดงเมนู GRUB จะรอการหมดเวลาที่กำหนดโดย 'GRUB_TIMEOUT' เพื่อหมดอายุ หากกด ESCในช่วงเวลานั้นจะแสดงเมนูและรออินพุต


มันควรแต่สิ่งที่มันทำคือแสดงเมนูมาตรฐานเป็นเวลา 1 วินาที อย่างน้อยในแบรนด์ใหม่ 16.04
frnhr

1

ฉันสามารถแก้ไขปัญหานั้นได้โดยเพิ่มบรรทัดต่อไปนี้ /etc/default/grub

GRUB_DISABLE_OS_PROBER=true

... sudo update-grubและแล้วการทำงาน

คำอธิบาย:ไฟล์ที่/boot/grub/grub.cfgถูกสร้างขึ้นโดยการเรียกupdate-grubใช้ไฟล์ในและ/etc/grub.d /etc/default/grubดังนั้นคุณไม่ควรแก้ไขgrub.cfgแต่จะมีประโยชน์ในการค้นหาสาเหตุที่การหมดเวลาถูกตั้งค่า ค้นหาสำหรับสายที่เริ่มต้นด้วยแล้วค้นหาบรรทัดถัดไปเริ่มต้นด้วยset timeout= ### END /etc/grub.d/ ...สิ่งนี้อาจให้คำแนะนำซึ่งสคริปต์จะตั้งค่าการหมดเวลา ในกรณีของฉันสคริปต์ os-prober รับผิดชอบการหมดเวลา ปรากฎว่ามี 10s hardcoded หมดเวลาในซึ่งไม่ได้ถูกกำหนดโดย/etc/grup.d/30_os-prober GRUB_TIMEOUTคุณสามารถปิดการใช้งาน os-prober โดยGRUB_DISABLE_OS_PROBER=trueหรือแก้ไข/etc/grup.d/30_os-proberหรือใช้GRUB_OS_PROBER_SKIP_LISTเพื่อข้ามพาร์ทิชันฮาร์ดดิสก์บางส่วนของคุณ (30_os-prober จะใช้เมื่อพบระบบปฏิบัติการอื่นที่อื่น) ดูคำถาม & คำตอบนี้สำหรับรายละเอียด. ในขณะที่คนอื่นชี้ให้เห็นเหตุผลอื่นอาจเป็นบันทึกในชุดกรณีGRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUTนี้


0

ฉันมีปัญหาที่เมนูด้วงปรากฏขึ้นเสมอหลังจากฉันใช้ AUFS (unionfs) เพื่อวางระบบไฟล์รูทแบบอ่านอย่างเดียว ฉันต้องกดปุ่ม Enter ที่เซิร์ฟเวอร์หลังจากบูตทุกครั้ง ผมทำตามคำแนะนำที่นี่: ปิดการใช้งานด้วง 2 เมนู ตั้งแต่ฉันไม่มีปัญหาเลย

แก้ไข /boot/grub/grub.cfg และเปลี่ยน:

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

ถึง

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

ก่อนและหลังในโซลูชันของคุณเหมือนกันทุกประการ
RawwrBag

set timeout=-1set timeout=1ไม่ได้เป็นเช่นเดียวกับ อดีตคือ "รอตลอดไป" และหลังคือ "รอหนึ่งวินาที"
Jeff McJunkin

0

Ubuntu ของฉันใช้เวลา 30 วินาทีในการตั้งค่าหรือไม่ นี่คือวิธีการหลังจากที่ฉันได้พบว่าrecordfail เป็นค่าที่หายไป

1. ตรวจสอบสคริปต์ด้วงที่แท้จริง /boot/grub/grub.cfg

IMHO /boot/grub/grub.cfgวิธีที่ดีที่สุดในการตรวจสอบสิ่งที่ด้วงจะทำคือการเปิด มันเป็นสคริปต์ที่สร้างขึ้นโดยอัตโนมัติโดยgrub-mkconfigใช้แม่แบบจากและการตั้งค่าจาก/etc/grub.d/etc/default/grub

รอบ ๆ บรรทัดที่ 109 คุณจะเห็นสิ่งต่อไปนี้:

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

ในกรณีของฉันด้วยความช่วยเหลือของสคริปต์ที่สร้างขึ้นฉันสามารถค้นหาว่าrecordfailตัวแปรไม่ได้ถูกตั้งค่า

2. หากrecordfailตัวแปรไม่ได้รับการตั้งค่าให้ตั้งค่า

เปิด/etc/default/grubในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ (เช่นเสียงเรียกเข้า) จากนั้นตั้งค่าตัวแปรGRUB_RECORDFAIL_TIMEOUTเป็นค่าที่กำหนดเช่น 5 วินาที

ไฟล์กำหนดค่าของคุณควรมีลักษณะดังนี้:

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. อัพเดตการกำหนดค่าเพื่อให้ทำงานได้ update-grub

update-grubขั้นตอนสุดท้ายให้อัปเดตการตั้งค่าการทำงานด้วย สำหรับตอนนี้ GRUB2 จะใช้การหมดเวลาที่ตั้งไว้ คำสั่งนี้จะสร้าง/boot/grub.cfgไฟล์ใหม่

4. ตรวจสอบผลลัพธ์สคริปต์ที่สร้างขึ้น

เปิดอีกครั้ง/boot/grub.cfgและตรวจสอบผลลัพธ์รอบบรรทัด 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

โปรดทราบว่าค่าที่บรรทัดที่ 109 ตอนนี้เป็น 5 แทน 30 เหมือนก่อน

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