简介

一定要确保你有一个可以引导的光盘或者是 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

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 是什么计算磁盘和分区数,我忘记了,不过,大家就记住新的就好啦。)

配置配置文件

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

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

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

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

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

grub-install /dev/sda

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

创建 GRUB 配置文件

创建 /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,1)

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

GRUB 功能十分强大,它提供了大量的用于从种类繁多的设备和操作系统以及不同的分区类型启动的选项。此外还可以定制溅射屏幕、播放声音或者是鼠标等。

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



本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

❤️技术交流可以 关注公众号:Lucifer三思而后行 ❤️