computer_knowledge_notes/Software/grub.md

81 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### 安装grub
```shell
sudo mount /dev/sda1 /mnt
sudo grub-install --target=x86_64-efi --efi-directory=/mnt
sudo update-grub
```
#### 简单配置
1. `grub-mkconfig`可以用来生成grub.cfg文件。但是功能有限。
2. /etc/default/grub文件控制`grub-mkconfig`命令的操作。
- **GRUB_DEFAULT**定义菜单入口从0开始。
- **GRUB_HIDDEN_TIMEOUT**:定义在显示菜单之前等待的时间。
- **GRUB_TIMEOUT**:菜单等待时间,-1则会一直等待。
- **GRUB_DISTRIBUTOR**由grub的分发者定义的标识名用以输出更多的菜单条目信息。
- **GRUB_TERMINAL**为GRUB_TERMINAL_INPUT和GRUB_TERMINAL_OUTPUT赋相同的值。指定终端输入和输出的设备。其值取决于特定平台但一般会包含`console`本地终端、`serial`串口终端,默认为本地终端。
- **GRUB_CMDLINE_LINUX**添加到菜单入口的LINUX内核命令行参数
- **GRUB_CMDLINE_LINUX_DEFAULT**除非将GRUB_DISABLE_RECOVERY设置为`true`否则每个内核都会生成两个入口默认入口和覆盖模式。此命令的作用就是在GRUB_CMDLINE_LINUX后只在默认模式下添加命令行参数。
3. 编辑/etc/grub.d文件夹中的文件或创建/boot/grub/custom.cfg可以进行更灵活的配置。
4. 直接修改grub.cfg文件是不建议的。
#### 命令
```
boot # 启动已加载的操作系统。
set [envvar=value] # 将环境变量envvar的值设置为value如不给定参数则列出当前的环境变量
unset envvar # 释放环境变量envvar
lsmod # 列出已加载的模块
insmod # 调用指定的模块
linux # 装载指定的内核文件,并传递内核启动参数。
initrd # 只能紧跟在linux命令之后为指定的内核传递init ramdisk路径。
search # 通过文件(--file)、卷标(--label)、UUID(--fs-uuid)来搜索设备。
ls [args] # 如不给定参数则列出所有grub可见的设备如给定的参数是一个分区则显示该分区的信息如给定的参数是一个绝对路径则显示该路径下的所有文件。
```
#### 内置变量
```
cmdpath # core.img所在目录的绝对路径该绝对路径要包含设备名称
default # 默认的菜单项。可使用菜单的titile, id 或 数值顺序。
timeout # 设置菜单等待时间。如为0则直接启动default指定的菜单如为-1则永久等待手动选项。
fallback # 如默认菜单项启动失败,则使用该变量指定的菜单项启动。
prefix # grub目录的绝对路径这样才可以从该目录下加载各文件和模块
root # 指定根设备的名称
```
#### 使系统开机进入纯命令模式
1. 编辑/etc/default/grub
注释掉GRUB_CMDLINE_LINUX_DEFAULT使显示详细的启动过程。
修改GRUB_CMDLINE_LINUX为"text"
取消对GRUB_TERMINAL的注释
2. 使用`sudo update-grub`命令使生效
3. 使用`sudo systemctl set-default mlti-user.target`命令,创建符号链接/etc/systemd/system/default.target其链接的源文件是/lib/systemd/system/multi-user.target。
4. 重启登陆
#### 从命令模式转到图形模式
1. 编辑/etc/default/grub
取消对GRUB_CMDLINE_LINUX_DEFAULT的注释。
修改GRUB_CMDLINE_LINUX为""
注释掉GRUB_TERMINAL
2. 使用`sudo update-grub`命令使生效
3. 使用`sudo systemctl set-default graphical.target`命令,创建符号链接/etc/systemd/system/default.target其链接的源文件是/lib/systemd/system/graphical.target。
4. 重启登陆