linux--grub介绍与设置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38880380/article/details/99528290

1 介绍

1.1 GNU GRUB

GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序. GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数.
GNU GRUB的前身为Grand Unified Bootloader。它主要用于类Unix系统;同大多Linux发行版一样,GNU系统也采用GNU GRUB作为它的启动器。Solaris从10 1/06版开始在x86系统上也采用GNU GRUB作为启动器。

1.2 grub Legacy和grub 2

  • 目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy ,从 1.x 开始的就称为 GRUB 2
  • 目前 GRUB Legacy 已经停止开发了,只是出于一个修复漏洞的状态,不再增加新的功能了,所有的开发都转移到 GURB 2 之上了
  • GRUB 2 是源自于一个名为 PUPA 的项目,目的是建立下一代的 boot loader
  • GRUB 2 几乎是从零开始开始开发的,它和 GRUB Legacy 不同的地方有很多,例如支持 scripts、国际化语言、动态加载模块、带有 resuce 模式等等,这些都是 GRUB Legacy 所没有的
  • 虽然grub2是重写的grub,但是他借鉴了grub的一些特征,grub2改进如下:
  • 引导配置文件采用新名字grub.cfg,新的语法,加入许多新的命令
  • grub.cfg 是用grub-mkconfig自动产生的,由update-grub维护,在执行update-grub之前修改的配置都不会 生效,这样可以容易的应对内核升级这样情况。
  • grub2中的分区号不再是以0开始,而是以1开始。
  • 配置文件是不可写的,而是修改文件后用命令自动更新
  • grub2有更可靠的方法在磁盘上有多系统时发现文件和目标内核,可以用命令发现系统设备号或者UUID。
  • 更多的文件系统支持,如ext4 hfs ntfs
  • grub2可以直接从lvm和raid读取文件
  • 在grub中的stage1 stage1.5 stage2已经被取消
  • grub2引入很多设备模块,允许core镜像更小
  • 支持脚本,包括简单的语法
  • 在启动时没有选择菜单的话,按住shift即可强制显示菜单
  • 可以使用grub-install -v来查看系统的grub版本

1.3 主要配置文件

  • /boot/grub/grub.cfg - 即使是root也不要编辑它,它在每次update-grub后自动生成
  • /etc/default/grub - 改变引导菜单外观的主要配置文件
  • /etc/grub.d/ - 各种用于生成grub.cfg的脚本文件,每次update-grub时会执行里面的文件

1.3.1 /etc/default/grub

  • 此文件包含menu.list的前半部分内容,以及每行内核配置后面追加的配置, 在更新时会合并到grub.cfg中
    在这里插入图片描述

1.3.2 定制自己的/etc/default/grub配置文件, 如下所示

# If you change this file, run 'update-grub' afterwards to update

GRUB_DEFAULT=0
#设置默认启动项,按menuentry顺序如果要默认从第四个菜单项启动,数字改为3,若改为 saved,则默认为上次启动项

GRUB_TIMEOUT="10"
#设置进入默认启动项的等候时间,默认值10秒,按自己需要修改,单位为秒改改为零和负值为无限等待操作

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` #获得发行版名称(比如Ubuntu, Debian

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#选择启动的环境,“quiet splash”为图像界面,“text”为文本界面

#GRUB_CMDLINE_LINUX="noresume" 
#手动添加内核启动参数,比如 acpi=off noapic 等可在这里添加
# 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
#设定图形介面分辨率,如不使用默认。把前面#去掉,把分辨率改为800x600或1024x768

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
#取消注释以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux内核

# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"
#定是否创建修复模式菜单项,前面有#注释(建立修复模式).前面没有#注释(不建立修复模式

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1" #当GRUB菜单出现时发出鸣音提醒,户无法看到屏幕特别有用,默认关闭

1.3.3 修改默认启动系统

sudo gedit /etc/default/grub
修改文件中的GRUB_DEFAULT=0
GRUB_DEFAULT=0 (0默认启动第1项,如果你的win是第5项,把这个0改为4) 保存文件后终端输入:

1.3.4 修改默认分辨率

修改文件中的 #GRUB_GFXMODE=640x480
把前面#去掉,把分辨率改为800x600或1024x768

1.3.5 修复损坏的grub引导

  • 法一
备份sda 的grub
dd if=/dev/sda of=./mbr.bak bs=512 count=1 
这样子是把你现有的分区跟引导信息保存下来了。找个linux的live进入linux,然后把刚才的mbr.bak还原回去
dd if=./mbr.bak of=/dev/sda  bs=446 count=1
  • 法二
    重装Grub

1.3.6 grub.cfg详解

set default=0
#默认为0
insmod jpeg
#添加jpg支持,如要使用png或tga文件做背景,加上 insmod png或insmod tga
insmod ext2
#除了用作启动的分区外,其他分区格式可在menu底下再添加
set root=(hd0,7)
#设定root分区
search --no-floppy --fs-uuid --set f255285a-5ad4-4eb8-93f5-4f767190d3b3
#设定uuid=****的分区为root,和上句重复,可删除
# 以下为终端配置
if loadfont /usr/share/grub/unicode.pf2 ; then
#设置终端字体,unicode.pf2支持中文显示
set gfxmode=640x480
#设置分辨率,默认为 640x480,可用800x600,1024x768,建议跟你想设定的图片大小一致
insmod gfxterm
#插入模块 gfxterm,支持中文显 示,它还支持 24 位图像
insmod vbe
#插入 vbe 模块,GRUB 2 引入很多模块的东西,要使用它,需要在这里加入
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
#设置 GRUB 2 终端为 gfxterm
fi
fi
set timeout=10
background_image (hd0,7)/boot/images/1.jpg
#设置背景图片
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=cyan/black
#这两行为 Debian 下的菜单颜色设置,如果默认的话,你会发现背景完全被蓝色挡住了,你需要修改 blue 为 black,这样背景就会出现 
### END /etc/grub.d/05_debian_theme ###

# 10_linux 为自动添加的当前root分区linux引导项
### BEGIN /etc/grub.d/10_linux ###
#菜单项,要包括 menuentry 双引号" " 和大括号 { }才完整,否则不显示菜单
menuentry "Ubuntu, Linux 2.6.31-9-386" {
insmod ext2
set root=(hd0,7)
search --no-floppy --fs-uuid --set f255285a-5ad4-4eb8-93f5-4f767190d3b3
#这句与set root=(hd0,7)重复,可删除
linux	/boot/vmlinuz-2.6.31-9-386 root=UUID=f255285a-5ad4-4eb8-93f5-4f767190d3b3 ro quite splash
#不喜欢看到一长串的, roo=UUID=***可用root=/dev/sda7代替
initrd	/boot/initrd.img-2.6.31-9-386
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
linux16	/boot/memtest86+.bin
}
### END /etc/grub.d/20_memtest86+ ###

# 自动添加存在于其他分区的系统引导项
### BEGIN /etc/grub.d/30_os-prober ###
#windows 启动菜单
menuentry "Windows Vista (loader) (on /dev/sda1)" {
insmod ntfs
#windows格式为ntfs,或为fat32改为 insmod fat 
set root=(hd0,1)
search --no-floppy --fs-uuid --set ece067d2e067a196
#可删除
#grub2比较先进的地方就是如果发现windows启动是通过ntldr 引导的,定为2000/xp/2003,会在这加上 drivemap -s (hd0) ${root} ,作用相当于grub的map,可正常启动非第一硬盘的xp/2003系统。
chainloader +1 
}
# 查找到其他分区上的linux系统并自动添加 
menuentry "Ubuntu karmic (development branch) (9.10) (on /dev/sda3)" {
insmod ext2
set root=(hd0,3)
search --no-floppy --fs-uuid --set 4d893970-0685-44ed-86b3-1de45b2db84a
linux /boot/vmlinuz-2.6.31-9-generic root=/dev/sda3
initrd /boot/initrd.img-2.6.31-9-generic
}
#若存在macos会自动在这里添加。
### END /etc/grub.d/30_os-prober ###
# 以下为手动添加的菜单项
### BEGIN /etc/grub.d/40_custom ###
menuentry "CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
### END /etc/grub.d/40_custom ###

1.4 grub工具命令

在这里插入图片描述

  • grub-install完成如下工作
    (1)安装grub到设备中,如果需要会创建/boot/grub目录
    (2)把.mod、.lst、*.img从 /usr/lib/grub/i386-pc/ 目录复制到/boot/grub目录下,他会覆盖已有文件
    (3)调用grub_probe扫描计算机并收集磁盘和分区信息
    (4)调用grub_mkimage构建一个新的new.img
    (5)调用grub_setup把grub的boot.img写入MBR中,把core.img写进设备的第一个扇区。

2 开机跳过grub设置

3 开机进入grub设置

如果系统配置需要修改,有时需要进入单用户模式,该情况下,如果启动时,长按shift不能进入grub,需要修改如下配置。

  • 修改/etc/default/grub文件
vim /etc/default/grub
找到 GRUB_HIDDEN_TIMEOUT=0 这行,使用#注释掉,变成 #GRUB_HIDDEN_TIMEOUT=0 
保存退出
sudo update-grub
  • 若不行,重新安装
sudo update-grub 
sudo grub-install /dev/sda 
sudo reboot #重启
  • /etc/default/grub文件介绍
    GRUB_TIMEOUT=10(默认是为10秒的)意思是等待10秒钟,设置为负数为一直等待操作
    启动的时候就会显示grub菜单了,如果10秒内不选择,则会自动进入系统
  • 进入grub快捷键
    shift

参考

1、UBUNTU 系统开机没有grub启动项
2、Ubuntu不显示grub怎么办?
3、grub无法进入
4、Ubuntu,grub2的配置文件grub.cfg详解
5、Ubuntu下grub配置详解
6、GRUB Documentation
7、GRUB2配置文件"grub.cfg"详解(GRUB2实战手册)–金步国

猜你喜欢

转载自blog.csdn.net/qq_38880380/article/details/99528290