grub的配置文件及命令
## 一、GRUB2配置
### 1.主要配置文件
* /boot/grub/grub.cfg -即使是root也不要编辑它,它在每次update-grub后自动生成
* /etc/default/grub - 改变引导菜单外观的主要配置文件
* /etc/grub.d/ - 各种用于生成grub.cfg的脚本文件,每次update-grub时会执行里面的文件
### 2. 通过/etc/default/grub文件生成grub.cfg
grub-mkconfig是根据/etc/default/grub文件来创建配置文件的。该文件中定义的是grub的全局宏,修改内置的宏可以快速生成grub配置文件。实际上在/etc/grub.d/目录下还有一些grub配置脚本,这些shell脚本读取一些脚本配置文件(如/etc/default/grub),根据指定的逻辑生成grub配置文件。
在/etc/default/grub中,使用"key=vaule"的格式,key全部为大小字母,如果vaule部分包含了空格或其他特殊字符,则需要使用引号包围;完全没有必要直接改/boot/grub/grub.cfg或者/etc/grub.d/下的文件
更多关于GRUB可以参考这个官方文档 `https://help.ubuntu.com/community/Grub2`
以下是常见的GRUB配置全局宏:
```c
# 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菜单出现时发出鸣音提醒,户无法看到屏幕特别有用,默认关闭
```
## 二、 GRUB工具命令
| 命令 | 说明 |
| :--------------: | :----------------------------------------------------------------------------------------------------------------------------------------- |
| grub-install | 生成 Grub 的配置文件(通常是 /boot/grub/grub.cfg),根据系统中已安装的操作系统和内核生成引导菜单。它会扫描系统中的可引导文件并生成菜单项。 |
| grub-mkconfig | 生成 Grub 的配置文件(通常是 /boot/grub/grub.cfg),根据系统中已安装的操作系统和内核生成引导菜单。它会扫描系统中的可引导文件并生成菜单项。 |
| grub-editenv | 用于编辑 Grub 的环境变量。这些环境变量包括默认启动项、引导选项和其他配置参数。 |
| grub-mkrelpath | 生成相对路径,特别是在配置多重引导时使用。它可用于生成可用于配置文件中的相对路径 |
| grub-mkimage | 生成 Grub 的镜像文件。镜像文件是包含 Grub 模块和配置文件的单个文件,可用于在无法直接访问文件系统的情况下引导系统。 |
| grub-reboot | 设置下一次引导时要使用的默认引导项。使用该命令,您可以设置系统下一次启动时自动选择的引导项。 |
| grub-set-default | 设置默认的引导项。它允许您将特定的引导项设置为默认选项,以便在引导时自动选择该项。 |
| grub-probe | 用于探测系统中的设备和文件系统。它可以识别硬盘、分区和文件系统类型。 |
| update-grub | 用于更新 Grub 的配置文件并重新生成引导菜单。它会扫描系统中已安装的操作系统和内核,并根据配置文件的规则重新生成 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写进设备的第一个扇区。
## 三、 定制GRUB的步骤
1. 修改/etc/default/grub文件(Ubuntu16等系统修改该配置文件)
```bash
vim /etc/default/grub
增加或者修改已有GRUB参数设置,例如 GRUB_TIMEOUT="10"
保存退出
```
2、执行命令 `sudo update-grub`, 更新/boot/grub/grub.cfg文件中,然后生效
## 四、efi和grub2相关配置文件及命令
### 1.配置文件目录
/etc/grub2/目录下 /etc/default/grub
### 2.更新引导项目
根据配置文件目录下的顺序更新启动项,命令:
`# grub2-mkconfig -o /boot/grub2/grub.cfg`
-o 选项为输出到那个文件
efi下的/boot/efi/EFI/centos/grub.cfg文件一般调用/boot/grub2/grub.cfg这个文件
类debian发行版,一般用这个命令: `# update-grub2`
### 3.更换默认启动项
命令:
`# grub2-set-default 2`
一般从0开始
### 4.安装
`# grub-install --efi-directory=/boot/efi/ --boot-directory=/boot/ --removable /dev/sda`
几个需要说明的地方:
> `--efi-directory=/boot/efi/`这个位置的问题,如果efi分区是单独挂载的,就直接写这个目录就可以了,不用加efi,它会在这个目录下建立EFI的目录,写入相关文件。 `--boot-directory=/boot/`这个不用加grub2,它会自己生成grub2目录,写入相关文件 `--removable`如果是移动设备,一定要加这个选项
### 5.常用命令
* 启动常用的grub命令
```
root (hd0,2) #设置某块分区为根目录
kernel /vmlinuz #加载linux kernel
initrd /initrd.gz #加载驱动,或者虚拟rootfs
boot #启动加载的kernel
```
* 查找文件 `find --set-root --ignore-floppies --ignore-cd /usr/bin/cp #查找/usr/bin/cp文件,并将分区设为根目录,忽略软盘和cd`
* 加载iso
```
root (hdx,x) #设置根目录
map --mem /xx.iso (0xff) #映射iso文件到模拟cdrom 0xff
map --hook #映射钩子
chainloader (0xff) #链接到映射的CDROM
boot #启动
```
grub命名规则,(hd32)为第一仿真cd/dvd设备,等同于0xa0,(hd33)为二仿真cd/dvd设备,0xff为最后一个。grub中将0xa0以上都认做cdrom。 `map --mem` 用于仿真不连续的存放的iso文件,不加则必须连续存放,碎片整理后再存放iso一般才会连续。 另外grub不支持大的iso,如果iso不支持则提示:inviladorupsupported executableformat。
### 6.添加efi启动项
在安装程序不完善的时候,有时候会存在没有启动项的问题,这个时候就要用efibootmgr管理UEFI启动项。
`# efibootmgr` 这个命令会显示所有已经添加的启动项,BootOrder后会显示启动顺序。
`# efibootmgr -c -w -L "BootOptionName" -d /dev/sda -p 1 -l \\EFI\\UOS\\grubx64.efi`
BootOptionName是你启动项的名字,修改为自己的 -d修改那个硬盘 -p分区位置,默认为1 -l是启动efi文件的路径,注意是\\而不是// 这样就添加了EFI启动项,刚添加的启动项的顺序排第一个
`# efibootmgr -b 0013 -B` 删除编号为0013的启动项
`# efibootmgr -o 0012,0010,000f` 修改启动顺序。 这个命令没有认真研究,有空再说吧。
### 7.需要注意的地方
```
grub背景图片的问题,最近用gimp做了个图片设为grub2启动背景图片,grub2提示错误,最后发现是图片的问题。
```
- 共 0 条回复
- 需要登录 后方可回复, 如果你还没有账号请点击这里注册。
wiseAI
✨ 梦初醒 茅塞开
- 不经他人苦,莫劝他人善。
- 能量足,心态稳,温和坚定可以忍。
- 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
- 要么忙于生存,要么赶紧去死!
- 内心强大到混蛋,比什么都好!
- 规范流程比制定制度更重要!
-
立志需要高远,但不能急功近利;
行动需要迅速,却不可贪图速成。 - 不要强求人品,要设计高效的机制。
-
你弱的时候,身边都是鸡零狗碎;
你强的时候,身边都是风和日丽。 - 机制比人品更可靠,契约比感情更可靠。
- 合作不意味着没有冲突,却是控制冲突的最好方法。
- 误解是人生常态,理解本是稀缺的例外。
- 成功和不成功之间,只差一次坚持!
- 祁连卧北雪,大漠壮雄关。
- 利益顺序,过程公开,机会均等,付出回报。
