menu

grub

  • date_range 13/12/2020 12:30
    点击量:
    info
    sort
    linux
    label
    linux

文章出自个人博客https://applelin8.github.io/2020/12/13/grub,转载请申明


content


前置知识:你必须知道grub的启动过程以及bios和uefi的相关基础知识,可以参考:《Unified Extensible Firmware Interface Wikipedia》《linux启动过程简介》

format

ls /boot/grub/
fonts  grub.cfg  grubenv  locale  unicode.pf2  x86_64-efi

grub.cfg

grub.cfg:这是grub的启动shell脚本,对于用户来说,是最重要的文件,几乎是用户配置grub的唯一的配置文件。通过这个文件用户可以控制grub加载操作系统的行为,比如添加一个menuentry就是添加一个操作系统启动选项,每个选项中可以指定操作系统内核镜像和initramfs镜像等等。

grub.cfg一般都不会手动编辑的,而是用过grub-mkconfig -o /boot/grub/grub.cfg去生成。

grubenv:预设的一些环境变量可以放到这,是一个文本文件.

grep -wn menuentry grub.cfg

/etc/default/grub

ls /etc/grub.d/
00_header  05_debian_theme  10_linux  20_linux_xen  20_memtest86+  30_os-prober  30_uefi-firmware  40_custom  41_custom  README

set

/etc/default/grub

GRUB_DEFAULT

设定预设的menu entry,可以是数字,或者是menu entry的标头,或是『saved』。

GRUB_DEFAULT="${submenu id}>${menu entry id}"

example

to set

GRUB_DEFAULT="gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87>gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87"

set

sudo sed -e 's/GRUB_DEFAULT/#GRUB_DEFAULT/g' -e '/GRUB_DEFAULT/i\GRUB_DEFAULT=0' -i /etc/default/grub
sudo sed -e '/GRUB_DEFAULT/d' -i /etc/default/grub

sudo sed -e '6i\GRUB_DEFAULT="gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87>gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87"' -i /etc/default/grub

grep -n GRUB_DEFAULT /etc/default/grub
6:GRUB_DEFAULT="gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87>gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87"

sudo update-grub
sudo reboot
uname -r
4.9.151abc

submenu

grep -n "gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87" /boot/grub/grub.cfg 
19:   set default="gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87>gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87"
130:submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87' {

menu entry

grep -n "gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87" /boot/grub/grub.cfg 
19:   set default="gnulinux-advanced-c635a47d-c750-40a1-b647-54f27cacbb87>gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87"
635:	menuentry 'Ubuntu, with Linux 4.9.151abc' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.151abc-advanced-c635a47d-c750-40a1-b647-54f27cacbb87' {

评论:


技术文章推送

手机、电脑实用软件分享

微信搜索公众号: farmer in city
wechat 微信公众号:farmer in city