《Linux From Scratch》第三部分:构建LFS系统 第八章:让LFS系统可引导 - 8.4. 使用 GRUB 设置启动过程

简介:

 8.4.1. 简介

[Warning]

警告

对 GRUB 进行错误的配置可能会导致在没有外置启动设备(某些USB设备,某些 CD-ROM 等)的情况下无法正常的启动。你可能仅仅需要修改当前正在使用的引导器(比如:Grub-Legacy,GRUB2 或 LILO 等)的配置。

一定要确保你有一个可以引导的光盘或者是 U 盘以备不时之需,否则万一电脑真的不能启动谁都救不了你。如果你需要建立可引导的设备,可以按照以下方法操作(跳转到 BLFS 从 libisoburn 软件包安装 xorriso)。
(译者注:其实你手头可以备一个其它发行版的 LiveCD 制作的可引导 U盘,以备不时之需。Ubuntu、Fedora之类的都是上佳之选。)

cd /tmp 
grub-mkrescue --output=grub-img.iso 
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso 

8.4.2. GRUB 命名约定

GRUB 对于硬盘和分区自有一套命名规则(hdN,M),其中 N 是硬盘数,M 是分区号。硬盘数 N 从 0 开始计数,分区数需要区别对待——主分区从 1 开始计数而扩展分区从 5 开始计数。需要注意的是,和早期版本相比,计数方式都有所变化。例如,分区 sda1(hd0,1)sdb3(hd1,3)。Linux 下,并不将 CD-ROM 设备假想为硬盘。例如,就算已有 CD 设备挂载为hdb,第二块硬盘挂载为 hdc,GRUB 依旧将第二块硬盘称为(hd1)
(译者注:为什么这里扩展分区从 5 计数,可以查看 mbr 的相关知识。早期版本的 GRUB 是什么计算磁盘和分区数,我忘记了,不过,大家就记住新的就好啦。)

8.4.3. 配置配置文件

GRUB 会将一些数据写入硬盘的第一个物理扇区。这一部分不属于任何一个操作系统,在启动时,该部分数据激活,然后寻找 Grub 的模块,Grub 模块的默认位置为 /boot/grub/。

一种建议是使用一个独立的小分区(建议大小 100MB)专用于引导信息。那样的话,每一个发行版,不论是 LFS 还是其他的商业发行版,都能访问相同的引导文件而且任何已经启动的系统都能访问它。如果你选择这么做,你需要挂载这个独立分区,移动所有的文件从当前的 /boot 目录(比如说你上一节刚编译的 Linux 内核)到新的分区。你然后要卸载这个新分区,重新挂载它为 /boot。如果你这么做,一定要更新 /etc/fstab。

使用当前的 lfs 分区也没有什么问题,但是在配置多系统启动的时候有些不同。

从以上信息可知,需要确定根分区的磁盘位置(如果使用单独的分区,则需要知道引导分区的磁盘位置),以下假定根分区(或者是磁盘分区)是 sda2

将 GRUB 文件安装到 /boot/grub 然后设置启动扇区:

[Warning]

警告

以下命令将会覆盖已有的引导器。如无需要,请勿运行(比如已经有第三方引导器管理 MBR)。

grub-install /dev/sda

8.4.4. 创建 GRUB 配置文件

[Note]

注意

(译者注:如果实在不知道怎么编写 grub.cfg 文件,或者担心误操作导致系统遭到破坏,可以在宿主系统中安装旧版本的内核,如果有新版本内核也可以直接更新,安装内核的时候它会自动寻找可启动的操作系统,并把它们添加到 fstab 文件中,这样,如果 LFS 配置都正确的话就会找到这个 LFS 系统并添加到 fstab 文件中,重启之后就可以发现 GRUB 菜单中已有 LFS 条目。之后可以再删除这里安装的内核。)

创建 /boot/grub/grub.cfg:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,2)

menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
        linux   /boot/vmlinuz-3.19-lfs-7.7-systemd root=/dev/sda2 ro
}
EOF
[Note]

注意

从 GRUB 的角度看,内核文件相当于一个分区,所以,假如你使用单独的 /boot 分区,请不要在 linux 行添加 /boot。此外,还需要将 root 行指向 /boot 所在的实际分区。

GRUB 功能十分强大,它提供了大量的用于从种类繁多的设备和操作系统以及不同的分区类型启动的选项。此外还可以定制溅射屏幕、播放声音或者是鼠标等。很遗憾的是,这些功能超出本文的范畴,我们一概不予讨论。

[Caution]

慎重

grub-mkconfig 命令可以自动建立配置文件。它使用位于 /etc/grub.d/ 下的一组脚本且将会忽略用户的设置。这些命令主要用于那些非源码编译的发行版,所以不建议 LFS 用户使用此命令。如果你使用商业发行版,你可以试着运行这个命令(运行之前记得备份原来的 grub.cfg文件)。

相关文章
|
4天前
|
Ubuntu 安全 Linux
《Linux 简易速速上手小册》第1章: Linux 系统基础(2024 最新版)
《Linux 简易速速上手小册》第1章: Linux 系统基础(2024 最新版)
36 1
|
11天前
|
资源调度 JavaScript 搜索推荐
Linux系统之部署envlinks极简个人导航页
【4月更文挑战第11天】Linux系统之部署envlinks极简个人导航页
52 2
|
14天前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
72 0
|
14天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
29 0
|
12天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
32 6
|
1天前
|
资源调度 JavaScript Ubuntu
Linux系统之部署briefing视频聊天系统
【4月更文挑战第21天】Linux系统之部署briefing视频聊天系统
26 2
|
2天前
|
Linux Perl
Linux系统替换字符串常用命令
请注意,`sed`命令可以非常强大,可以根据不同的需求使用不同的选项和正则表达式来进行更复杂的字符串替换操作。
16 0
|
7天前
|
运维 网络协议 Unix
18.系统知识-Linux常用命令
18.系统知识-Linux常用命令
|
11天前
|
Linux 数据安全/隐私保护
Linux设置PPPOE
请注意,以上步骤是基本的设置流程。具体步骤可能会因Linux发行版和版本的不同而有所差异,确保按照你所使用的系统来进行设置。如果使用图形界面,也可以在网络设置中配置PPPoE连接。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
20 0
|
14天前
|
安全 Unix Linux
一、linux 常用命令之 linux版本信息 系统管理与设置 持续更新******
一、linux 常用命令之 linux版本信息 系统管理与设置 持续更新******
15 0