Không thể nhận menu grub để hết thời gian (hoặc biến mất)


18

Tôi đang chạy Ubuntu 12.04.

Cả đời tôi không thể để menu grub (có tùy chọn) biến mất.

Tôi muốn nó tự động khởi động vào tùy chọn đầu tiên. Tôi đã chỉnh sửa / etc / default / grub để nó trông giống như sau:

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

Sau này, tôi chạy sudo update-grub . Sau đó, tôi nhận ra rằng tôi đã có grub 2, vì vậy tôi đã chạy sudo update-grub2 (cả hai đều trông giống như họ tạo tệp grub.cfg thành công.

Tôi khởi động lại máy tính của mình và nó quay trở lại menu grub và chỉ ngồi đó cho đến khi tôi đưa ra lựa chọn. Điều này là không mong muốn nếu mất điện ... :-)

Tôi cũng đã thử cài đặt lại grub bằng sudo grub-install / dev / sda - cũng không thành công


Bạn có bao giờ có một phân vùng khác mà bạn đã cài đặt Ubuntu sau khi thiết lập phân vùng hiện tại mà bây giờ bạn muốn tự động khởi động không?
chế tạo4

Tôi không chắc ý của bạn là gì, tôi là người mới đối với linux. Tôi đã cài đặt qua bản cài đặt Ubuntu trước đó, nhưng tôi không nâng cấp. Làm sạch cài đặt. Tôi có thể đã tạo ra một cái gì đó khôn ngoan về phân vùng ... điều đó là có thể, có ý tưởng nào về việc sửa nó không?
Eric

sudo update-grubsudo update-grub2chạy cùng một lệnh. Vì vậy, đừng lo lắng về phần đó.
saji89

Xin vui lòng bạn gửi đầu ra của cat /boot/grub/grub.cfg thông qua pastebin và chia sẻ liên kết ở đây. Điều này là để xem thực tế grub.cfgtạo ra.
saji89

Đây là pastebin: pastebin.com/xxe2rLhg của grub.cfg. Cảm ơn tất cả sự giúp đỡ của bạn!
Eric

Câu trả lời:


22

Như câu trả lời khác chỉ ra, bạn có thể là một nạn nhân của recordfail tình huống. Chỉnh sửa /boot/grub/grub.cfgthủ công nên ra khỏi câu hỏi như được tạo tự động. Một đề xuất khác được thấy xung quanh là chỉnh sửa /etc/grub.d/00_headernhưng sau đó nó có thể nhắc nhở người dùng can thiệp vào các bản cập nhật.

Giải pháp đơn giản nhất là xác định biến không có giấy tờ GRUB_RECORDFAIL_TIMEOUT trong /etc/default/grub. Ví dụ:

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

Biên tập

Xem câu trả lời này để biết thêm chi tiết.


Cảm ơn bạn rất nhiều, đây chính xác là những gì tôi đang tìm kiếm!
Avio

Sau khi thực hiện thay đổi, cũng chạy update-grubđể tạo /boot/grub/grub.cfgtệp cập nhật
Colt

Đừng giết chức năng của recordfail! Bạn muốn thời gian chờ lâu hơn nếu khởi động thất bại. Để xóa thủ công, tất cả những gì bạn cần là câu trả lời của @ sniffski : grub-editenv create. Tuy nhiên, có thể có một số lý do khác recordfailđang được đặt ra ...
Cameron Tacklind

6

Sử dụng:

grub-editenv create

Điều này sẽ xóa tệp môi trường grub và sẽ khởi động rõ ràng vào lần tiếp theo.


Cảm ơn bạn rất nhiều vì đã chia sẻ. Điều này hoạt động thông qua SSH, khiến cho một ngày của tôi bị kẹt trên máy chủ không đầu.
Geppettvs D'Constanzo

grub-editenv - unset recordfailhoạt động tốt và không ảnh hưởng đến các env khác có thể được thiết lập
Cameron Tacklind

2

thay đổi GRUB_TIMEOUT=10thành không

Đây là tập tin cấu hình của tôi:

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

Đầu tiên, viết tên của HĐH mà bạn muốn khởi động trực tiếp. Của tôi là Ubuntu. Vì vậy, bạn sẽ viết nó như trongGRUB_DEFAULT="Ubuntu, with Linux x.x.x-xx-generic-pae"

sau đó tôi sử dụng 1 giây GRUB_TIMEOUT=để cho tôi 1 giây trước khi chọn HĐH mặc định (nếu tôi cần khởi động sang HĐH khác, ví dụ Xubfox)

GRUB_CMDLINE_LINUX_DEFAULT=""nếu bạn xóa quite splashnó sẽ hiển thị cho bạn các văn bản thay vì logo Ubuntu trong quá trình khởi động (tôi thích nó theo cách này: P)


Có một giải pháp khác:

Có một chương trình gọi là boot-Repair giúp cấu hình với GUI.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

như bạn có thể thấy từ hình ảnh. Có một hộp gọi là Unhide boot menu. Chỉ cần bỏ chọn hộp và nhấn appy. Bạn có thể truy cập này bằng cách nhấp vào mũi tên tùy chọn nâng cao.

để cài đặt sửa chữa khởi động

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

sudo apt-get update

sudo apt-get install -y boot-repair

và sau đó chạy boot-reapirtừ thiết bị đầu cuối hoặc từ dấu gạch ngang.


Giải pháp thứ 3:

Bạn có thể sử dụng một ứng dụng GUI dễ sử dụng có tên là grub-customizer để làm cho cuộc sống của bạn dễ dàng hơn một chút. Như tên cho thấy, bạn có thể làm nhiều hơn là chỉ sắp xếp lại các mục menu Grub với nó.

Bạn có thể cài đặt nó bằng cách:

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

nhập mô tả hình ảnh ở đây

như bạn có thể thấy từ menu có show menutùy chọn. Unhceck và xem nếu nó hoạt động


Không thay đổi. : - / Tôi nghĩ GRUB_DEFAULT được cho là số # theo danh sách trong menu? Thay đổi GRUB_TIMEOUT thành 0 không giúp được gì.
Eric

@Eric bạn có thể sử dụng 2 cách: nếu bạn biết vị trí của HĐH trong danh sách grub, bạn có thể sử dụng một số. Nhưng đối với tôi, tôi có 4 bản phân phối Linux và 1 Windows cộng với memTest và recovery. Vì vậy, thật khó để tôi ghi nhớ địa điểm của họ :) chỉ để đảm bảo (tôi biết bạn có thể đã làm điều đó nhưng chỉ để đảm bảo: P). Bạn đã chạy grub-updatesau khi thay đổi các giá trị?
Suhaib

Tôi đã chạy grub-update sau khi thay đổi các giá trị. : - /
Eric

Tôi đã cài đặt và sử dụng ứng dụng sửa chữa khởi động mà bạn cung cấp, nó hoạt động trong lần khởi động lại đầu tiên . Sau đó, menu GRUB trở lại và nó nằm ở đó cho đến khi tôi nhấn một phím. Cảm ơn tất cả sự giúp đỡ của bạn, tôi thực sự đánh giá cao nó. Không chắc chắn nơi để đi từ đây ...
Eric

@Eric ok Tôi tìm thấy giải pháp thứ 3 kiểm tra nó
Suhaib

2

GRUB_HIDDEN_TIMEOUTGRUB_HIDDEN_TIMEOUT_QUIETcác tùy chọn không được chấp nhận. Vì vậy, nhận xét ra những người.

Để bỏ qua menu và hiển thị nó khi chỉ giữ ESC, thêm:

GRUB_TIMEOUT_STYLE='countdown'
GRUB_TIMEOUT=1

Mẫu vật /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' : Nếu tùy chọn này được đặt thành 'đếm ngược' hoặc 'ẩn', thì trước khi hiển thị menu, GRUB sẽ đợi thời gian chờ được đặt bởi 'GRUB_TIMEOUT' hết hạn. Nếu ESC được nhấn trong thời gian đó, nó sẽ hiển thị menu và chờ nhập.


nên , nhưng tất cả những gì nó làm là hiển thị menu chuẩn trong 1 giây. Ít nhất là trên một thương hiệu mới 16.04
frnhr

1

Tôi có thể giải quyết vấn đề đó bằng cách thêm dòng sau vào /etc/default/grub

GRUB_DISABLE_OS_PROBER=true

... Và sau đó chạy sudo update-grub.

Giải thích: Tệp /boot/grub/grub.cfgđược tạo bằng cách chạy update-grubbằng các tệp trong /etc/grub.d/etc/default/grub. Do đó, bạn không nên chỉnh sửa grub.cfg, nhưng có thể hữu ích để tìm hiểu lý do tại sao thời gian chờ được đặt. Tìm kiếm các dòng bắt đầu bằng set timeout=và sau đó tìm kiếm các dòng tiếp theo bắt đầu bằng ### END /etc/grub.d/ .... Điều này có thể cho bạn gợi ý kịch bản nào đặt thời gian chờ. Trong trường hợp của tôi, kịch bản os-prober chịu trách nhiệm cho thời gian chờ. Nó chỉ ra rằng có một thời gian chờ mã hóa 10 giây /etc/grup.d/30_os-proberkhông được thiết lập bởi GRUB_TIMEOUT. Bạn có thể vô hiệu hóa os-prober bằng cách GRUB_DISABLE_OS_PROBER=truechỉnh sửa /etc/grup.d/30_os-proberhoặc sử dụng GRUB_OS_PROBER_SKIP_LISTđể bỏ qua một số phân vùng ổ cứng (30_os-prober được sử dụng khi tìm thấy một hệ điều hành khác ở đâu đó). Xem phần hỏi đáp này để biết chi tiết. Như những người khác chỉ ra một lý do khác có thể là bản ghi , trong trường hợp này được đặt GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT.


0

Tôi gặp vấn đề là menu grub luôn xuất hiện sau khi tôi sử dụng AUFS (unionfs) để đặt hệ thống tập tin gốc chỉ đọc. Tôi đã thực sự nhấn phím enter tại máy chủ sau mỗi lần khởi động. Tôi đã làm theo hướng dẫn ở đây: vô hiệu hóa menu grub 2 . Kể từ đó, tôi không có vấn đề gì cả.

Chỉnh sửa /boot/grub/grub.cfg và thay đổi:

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

Đến

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

Trước và sau trong giải pháp của bạn là hoàn toàn giống nhau.
RawwrBag

set timeout=-1không giống như set timeout=1. Cái trước là "chờ mãi" và cái sau là "đợi một giây".
Jeff McJunkin

0

Ubuntu của tôi luôn có thời gian chờ là 30 giây hoặc tôi có thể đặt giá trị hay không. Sau đây là cách tôi phát hiện ra rằng recordfail là giá trị còn thiếu .

1. Xác minh tập lệnh grub thực tế /boot/grub/grub.cfg

IMHO, cách tốt nhất để xác minh những gì Grub sẽ làm, là mở /boot/grub/grub.cfg. Đó là tập lệnh được tạo tự động bằng grub-mkconfigcách sử dụng các mẫu từ/etc/grub.d và cài đặt từ /etc/default/grub.

Xung quanh dòng 109, bạn sẽ thấy một cái gì đó như:

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

Trong trường hợp của tôi với sự trợ giúp của tập lệnh được tạo đó, tôi có thể phát hiện ra rằng recordfailbiến không được đặt.

2. Nếu recordfailbiến không được đặt, đặt nó

Mở /etc/default/grubtrong trình soạn thảo văn bản yêu thích của bạn (ví dụ vim) và sau đó đặt biến GRUB_RECORDFAIL_TIMEOUTthành một giá trị nhất định, ví dụ 5 giây.

Tệp cấu hình của bạn sẽ giống như:

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. Cập nhật cấu hình để chạy với update-grub

Bước cuối cùng, cập nhật cấu hình để chạy với update-grub. Hiện tại, GRUB2 sẽ sử dụng thời gian chờ đã đặt. Lệnh này sẽ tạo lại /boot/grub.cfgtập tin.

4. Xác minh kết quả tập lệnh đã tạo

Một lần nữa, mở /boot/grub.cfgvà kiểm tra kết quả xung quanh dòng 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

Lưu ý rằng giá trị ở dòng 109 bây giờ là 5 thay vì 30 như trước đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.