前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >grub2的学习笔记

grub2的学习笔记

作者头像
qsjs
发布2020-06-09 10:45:02
2.2K0
发布2020-06-09 10:45:02
举报
grub2安装之后的文件分布:

grub2的rpm package含有很多的img, mod, lst 文件(默认路径是/usr/lib/grub/i386-pc/,可以通过对应的rpm -ql PACKAGENAME来查看), 在执行grub2-install之后,img文件分布如下:

boot.img 文件被写入到MBR中,因为MBR的大小是512字节,所以boot.img总是512字节大小; 但是写入到MBR的内容和boot.img的内容并不完全相同, MBR的内容是boot.img经过转换后的内容;因为MBR中的内容除了包含code, 还有磁盘的分区信息

core.img: 而grub2的rpm package 中的diskboot.img 以及kernel.img , 在grub2-install的时候被结合成为core.img, 同时还会 把一些 模块的代码以及 ”加载模块的代码“ 也加入到core.img中. 所以core.img 并不是grub rpm package的文件,而是grub安装时候生成的文件. 这个文件生成之后不能简单的存放到/boot分区,因为在系统启动的时候,运行到core 之前只有MBR中的512-64=448字节的代码,无法识别/boot分区, 所以 这个core.img 是需要 hard-code 到磁盘中的。grub 开发团队的建议是:将这个core.img的内容嵌入到 MBR 和第一个分区之间,第一个分区必须是第31KB(第63个扇区)之后开始,一般的磁盘都是从1M处开始创建分区. 所以正常的默认分区一般都没有问题, 也就是说,如果我们要手动安装grub2, 那么安装到的设备最好选择相应的disk , 而不要选择分区,这时候是以embeded的方式hard-code core.img的代码。当选择安装grub2到分区的时候,就会把core.img 安装到分区的第一个block,这时候是以block-chain的方式查找到core.img的,但是因为分区的block被文件系统管理,所以有可能被文件系统移动,因此安装到文件系统不是很可靠,也是因为这个原因,当安装到分区的时候经常会遇到提示:grub2-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

mod文件: grub2安装之后,会有很多的模块文件(.mod) 被copy 到/boot/grub2/i386-pc 下面,这些mod文件主要是提供给grub使用的,比如normal.mod 文件如果丢失,那么grub 就无法正常完成引导过程。再比如 我们遇到过grub的命令行模式下,需要的命令(例如reboot, boot 等)找不到,这是因为相应的mod 没有被grub加载,此时,可以使用手动方式进行加载,然后就可以使用相应的命令了,手动加载grub mod文件的命令为: insmod MODULE_FILE_PATH . 加载之后,就可以使用了,需要注意的是: 像insmod 这样的命令不需要加载module就可以使用,还有rmmod命令也无需加载module就可以直接使用,然而还有一些命令是需要加载对应的module, 并且module之间是有依赖的,这里就不做过多介绍,知道有这么回事就可以 下面介绍几个常用的命令以及mod : insmod MODULE_FILE_PATH #用于手动加载module. lsmod #显示加载的module rmmod MODULE_NAME #用于从内存中删除已经loaded 的module. normal.mod #这个模块是grub实现正常引导所必须存在的. 其提供的命令就是:normal. 我们在grub下经常使用normal这个命令来让系统回到正常的引导状态. help.mod #顾名思义,就是提供帮助信息的,用法:help COMMMAND_NAME. boot.mod #支持grub下的boot 命令,执行该命令会提示要设置kernel, 必须首先设置 linux 的参数值,然后是initrd 的参数值,如何记住linux 和initrd 这两个命令呢?其实不需要,通过help 命令就可以知道了reboot.mod #支持grub下的reboot命令

grub2的安装命令:

grub2-install 命令用来安装grub到指定的设备上,要在各种环境中使用号grub2-install这个命令,首先需要知道grub2-install 都做了什么事情: A. grub2-install 会查找可用的module, 默认是查找 /usr/lib/grub/i386-pc 这个目录,这些module 会被copy 到/boot/grub2/i386-pc 下,如果grub的这些module 不在默认路径下,那么就可以通过 --directory 参数来指定Module以及image的路径, 除非默认的找不到才需要设置,否则一般都用默认的路径。 B. grub2-install 安装grub的时候,会copy grub需要的module 到/boot 分区的相应路径下,所以在修复模式安装grub的时候,可能需要指定 --boot-directory,或者要安装grub到其他的device, 也需要指定这个参数 。 C. grub安装的时候,还支持一个 --root-directory 的参数,这个参数不在”man grub2-install"的帮助文档中,个人对这个参数的理解是: 没有指定--boot-directory的情况下,--root-directory参数的值才有意义 ,当没有指定--boot-directory,但是指定了--root-directory,那么会在--root-directory指定的目录下创建boot 子目录, 作为--boot-directory 来使用. 这个--root-directory 和系统引导时候的root 没有任何关系. D. 如果重装grub,通常可能希望重新创建device map 关系,这时候可以用参数:--recheck来实现,这个参数的作用是:如果有必要,删除存在的device map, 然后创建一个新的,比如我们把grub 安装到了一个新的device 上可能就需要这么做。 E. 强制进行grub的安装,即便发现有问题. 这时候可以用参数 --force F. grub2-install 在执行的时候,还会调用其他的grub相关的命令,这些参数一般不需要更改. 这里就不介绍了.

grub2的配置文件:

grub2的配置文件在/boot/grub2/grub.cfg, 这个配置文件是系统引导时候会读取的,如果这个文件缺失,那么会导致引导失败. 但是,打开这个文件,可以看到如下的提示, 所以这个文件是自动生成的(基于/etc/default/grub 以及 /etc/grub.d下的脚本文件),不要去手动编辑这个grub.cfg文件.

代码语言:javascript
复制
[root@localhost grub2]# head grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1
[root@localhost grub2]#

既然不让编辑上述的grub.cfg文件,那么要修改grub的配置,要去哪里更改呢? 到/etc/default/grub 这个文件里面添加自定义的grub配置项. 更改完成之后,可以用 grub2-mkconfig -o /boot/grub2/grub.cfg 把自定义的变更apply 到grub的配置文件中就可以了. 该配置文件的语法格式非常简单,就是key=value的方式书写的文本文件,关于所支持的key以及可能的value值,请参考官方链接:https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html#Simple-configuration 根据grub.cfg的提示,我们自然也可以通过编写shell脚本来实现自定义的grub配置,这个属于比较高级的了,鄙人不才,还不清楚如何弄.

grub.cfg 虽然是自动生成的,但是有一个 grub2-script-check 命令可以用来检查grub.cfg 文件的语法是否有错误,虽然这个命令不常用,但是如果你手动改动了grub.cfg这个文件,还是有必要检查下语法是否有错.

以上就是grub的学习笔记,希望也能帮到你哦!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • grub2安装之后的文件分布:
  • grub2的安装命令:
  • grub2的配置文件:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档