ตั้งค่าเคอร์เนลเริ่มต้นใน GRUB


49

ฉันจะเลือกเคอร์เนล GRUB2 ที่ควรโหลดเป็นค่าเริ่มต้นได้อย่างไร ฉันเพิ่งติดตั้งเคอร์เนล linux เรียลไทม์และตอนนี้มันโหลดตามค่าเริ่มต้น ฉันต้องการโหลดไฟล์ปกติตามค่าเริ่มต้น

จนถึงตอนนี้ฉันก็แค่เลือก OS เริ่มต้น .. และด้วยเหตุผลบางอย่าง/boot/grub.cfgแล้วฉันคิดว่าฉันต้องการโหลด rt-kernel และใส่ลงในรายการเมนู linux ทั่วไป (ในกรณีของฉัน Linux Linux)


2
grub2-set-default <ชื่อหรือหมายเลข>
taliezin

1
แต่ฉันจะรู้จำนวนได้อย่างไร ตัวเลขในgrub.cfgนั้นสอดคล้องกับระบบปฏิบัติการเท่านั้นไม่ใช่เป็นเมล็ด
TomTom

ในบางกรณีงานนี้: askubuntu.com/questions/216398/ …คุณสามารถค้นหาชื่อเมนูโดยดูจากไฟล์นี้: /boot/grub/grub.cfg
TekOps

คำตอบ:


41

ฉันคิดว่าการกระจายส่วนใหญ่ได้ย้ายเมล็ดเพิ่มเติมเข้าไปในเมนูย่อยตัวเลือกขั้นสูง ณ จุดนี้เนื่องจาก TomTom พบว่าเป็นกรณีของ Arch ของเขา

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

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

เพื่อสรุป:

1) ค้นหา$menuentry_id_option สำหรับเมนูย่อย:

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2) ค้นหา$menuentry_id_optionรายการเมนูสำหรับเคอร์เนลที่คุณต้องการใช้:

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-amd64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3) แสดงความคิดเห็นออกด้วงเริ่มต้นปัจจุบันของคุณใน/etc/default/grubและแทนที่ด้วยเมนูย่อยของ$menuentry_id_optionจากขั้นตอนที่หนึ่งและเคอร์เนลที่เลือกจากขั้นตอนที่สองแยกจากกันโดย$menuentry_id_option>

ในกรณีของฉันแก้ไขGRUB_DEFAULTคือ:

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-amd64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4) อัพเดตด้วงเพื่อทำการเปลี่ยนแปลง สำหรับ Debian แล้วทำได้ดังนี้:

$ sudo update-grub

เสร็จสิ้น ตอนนี้เมื่อคุณบู๊ตเมนูขั้นสูงควรมีเครื่องหมายดอกจันและคุณควรบูทเข้าไปในเคอร์เนลที่เลือก คุณสามารถยืนยันสิ่งนี้ด้วย uname

$ uname -a
Linux NAME 4.18.0-0.bpo.1-amd64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

การเปลี่ยนแปลงนี้เพื่อเคอร์เนลล่าสุดเป็นง่ายๆเป็นการแสดงความคิดเห็นออกบรรทัดใหม่และ uncommenting #GRUB_DEFAULT=0แล้ว update-grubrerunning


31

หลังจากดิ้นรนเป็นเวลา 2 ชั่วโมงฉันพบวิธีที่ง่ายกว่ามากในการบรรลุเป้าหมาย ฉันแค่ RTFM ;)

เพิ่มสองบรรทัดใน / etc / default / grub

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

ทำsudo update-grubรีบูตเข้าเมนูด้วงของคุณและเลือกเมนูหรือรายการเมนูย่อยที่คุณต้องการ ตัวเลือกจะได้รับการบันทึกและครั้งต่อไปที่คอมพิวเตอร์ของคุณจะบูตโดยอัตโนมัติ


2
ยอดเยี่ยม! ง่ายมาก!
Egor Skriptunoff

โอ้ง่ายกว่านี้มาก ขอขอบคุณ.
user207863

21

ดังที่ได้กล่าวไว้ในความคิดเห็นคุณสามารถตั้งค่าเคอร์เนลเริ่มต้นให้บู๊ตโดยใช้grub-set-default Xคำสั่งโดยที่ X คือหมายเลขของเคอร์เนลที่คุณต้องการบูต ในการกระจายบางอย่างที่คุณยังสามารถตั้งค่าหมายเลขนี้โดยการแก้ไข/etc/default/grubไฟล์และการตั้งค่าและจากนั้นทำงานGRUB_DEFAULT=Xupdate-grub

ตัวเลขคือดัชนีไปยังอาร์เรย์ของการตั้งค่าเคอร์เนล / เคอร์เนลที่แสดงในเมนู GRUB ระหว่างการบู๊ตโดยที่ 0 เป็นรายการแรก (บนสุด) โดยปกติแล้วคุณสามารถค้นหาหมายเลขที่ถูกต้องโดยค้นหาmenuentryบรรทัดใน/boot/grub/grub.cfgดังนี้:

grep menuentry /boot/grub/grub.cfg

คุณจะเห็นเคอร์เนลแต่ละตัวในรายการชื่อที่แสดงในเมนูการบูต GRUB อันแรกคือ 0, ที่สองคือ 1 และอื่น ๆ


1
ใน Fedora 21 /boot/grub2/grub.cfgมันเป็น
somethingSomething

3
มันไม่ทำงานสำหรับฉัน เคอร์เนลล่าสุดในการติดตั้งของฉันคือ4.4.0-64-generic (menuentry 0) แต่ฉันต้องการ4.4.0-59-generic (menuentry 9) เพื่อเป็นเคอร์เนลบูตเริ่มต้น ฉันวิ่งgrub-set-default 9แล้วก็grub-updateรีบูท ฉันปล่อยให้บูตด้วงกับเคอร์เนลเริ่มต้นและยังคงรองเท้าที่มี4.4.0-64 ทั่วไป ฉันยังพยายามแก้ไข/etc/default/grubและการตั้งค่าและวิ่งGRUB_DEFAULT=9 grub-updateเมื่อวันที่รีบูตเครื่องไม่มีอะไรเปลี่ยนแปลง, รองเท้าระบบยังคงอยู่กับ4.4.0-64 ทั่วไป บางทีฉันอาจพลาดบางสิ่งบางอย่างใครสามารถช่วยฉันได้ไหม
Dronacharya

สิ่งนี้ไม่ได้ผลสำหรับฉันเช่นกัน ฉันลบเคอร์เนลที่ไม่พึงประสงค์ตามที่อธิบายไว้ที่นี่: askubuntu.com/a/764242/456247
Luis

8

เพียงแค่ทำgrep 'menuentry' /boot/grub/grub.cfgรายการรายการเพิ่มเติมที่ไม่เกี่ยวข้องกับเคอร์เนลหรือเวอร์ชั่นระบบปฏิบัติการจริง ตัวอย่างเช่นมันแสดง

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option

ฉันต้องการเสนอการปรับปรุงเล็กน้อยสำหรับวิธีการค้นหาไฟล์: ใช้ awk

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

ด้วยการร้องคำสั่งและผลลัพธ์ของมันคุณจะเห็นawkรหัสตรงกับเวอร์ชันของระบบปฏิบัติการจริงและให้หมายเลขที่คุณสามารถใช้ใน/etc/default/grubไฟล์

นอกจากนี้ในการแก้ไข ไฟล์ด้วยมือฉันขอแนะนำให้ใช้/etc/default/grub sedในคำสั่งร้องให้แทนที่ X ด้วยหมายเลขที่เหมาะสมที่คุณได้รับจากคำสั่ง awk ด้านบน:

sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; sudo update-grub


2
นี่ไม่ใช่คำตอบ มันอ่านเหมือนความคิดเห็น คำตอบควรพูดว่า "นี่คือวิธีการตั้งค่ารายการเริ่มต้นในด้วง" ไม่ใช่ "ให้ฉันทำภาคผนวกกับคำตอบอื่น" คุณสามารถแก้ไขสิ่งนี้เป็นคำตอบที่เหมาะสม แต่อาจฉลาดกว่าที่จะแสดงความคิดเห็นต่อคำตอบของ jkt123 เกี่ยวกับการใช้ awk แทน grep
Aleksandr Dubinsky

2

jkt123 จะใช้ได้กับการแจกแจงส่วนใหญ่ที่ฉันเดา อย่างไรก็ตามสำหรับ Arch Linux มันใช้งานไม่ได้อย่างน้อยก็ไม่มีแพ็คเกจที่ฉันมีให้

ดัชนีที่คุณสามารถตั้งค่าได้grub-set-defaultนั้นสอดคล้องกับรายการเมนูหลักเท่านั้น ตัวเลือกเคอร์เนลอยู่ในเมนูย่อย ดังนั้นคุณจึงย้ายรายการเคอร์เนลออกจากเมนูย่อยไปที่เมนูหลักหรือคุณวางรายการที่ด้านบนของรายการเมนูย่อยและเลือกเมนูย่อย

เมนูด้วงของฉัน

  • Arch Linux
  • ตัวเลือกขั้นสูงสำหรับ Arch Linux
    • เคอร์เนล 1
    • เคอร์เนล 2
  • ของ windows

เพื่อให้สามารถบูต Kernel 2 คุณต้องสลับกับ Kernel 1 หรือวางไว้นอกเมนูย่อยในระดับเดียวกับ Arch Linux หรือ Windows จากนั้นตั้งค่าหมายเลขเริ่มต้นเป็นหนึ่งในดัชนีเมนูหลัก ตัวอย่างเช่นในเมนูด้านบน "0" บูท "Arch Linux" และ "1" บูทเคอร์เนล 1

ในการเปลี่ยนลำดับชั้นและสลับให้เปิด/boot/grub/grub.cfgและย้ายรายการที่คุณต้องการย้าย รายการอาจมีลักษณะเช่นนี้

menuentry 'ENTRY NAME'
   ... some code ...
}

จากนั้นคุณต้องใช้การเปลี่ยนแปลงของคุณ grub-mkconfigในกรณีของฉันด้วย แต่สิ่งนี้อาจแตกต่างกันไปในแต่ละระบบ


0

เมื่อเร็ว ๆ นี้ CentOS-6.6 grub.conf มีลักษณะเช่นนี้สามารถแก้ไขได้ด้วยตนเองเพื่อเปลี่ยนการเลือกเริ่มต้น:

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

0

ยืด Debian:

แทนที่จะยุ่งกับไฟล์ปรับแต่งสร้างโฟลเดอร์ใน/noot(เรียกสิ่งที่คุณต้องการ) ออกจากเคอร์เนลที่คุณต้องการพร้อมกับการกำหนดค่าที่ตรงกันและไฟล์ระบบใน/bootและย้ายส่วนที่เหลือไปยังโฟลเดอร์ใหม่นี้

update-grubวิ่ง

ตรวจสอบ/bootโฟลเดอร์ที่เคอร์เนลรุ่นของคุณและการกำหนดค่าการจับคู่และไฟล์ระบบยังคงอยู่ที่นั่น (ในกรณีที่คุณคัดลอกบางสิ่งที่คุณไม่ควรมี) และรีบูต

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