记一次解决Fedora25上grub2-reboot命令不生效的经历

2023-11-02 20:32

本文主要是介绍记一次解决Fedora25上grub2-reboot命令不生效的经历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gurb2命令不生效

这段时间我一直被一个问题困扰,那就是我使用grub2-reboot命令,明明是执行成功了:

[cshih@SCHEN-TOSHIBAPC ~]$ sudo grub2-reboot 2
[cshih@SCHEN-TOSHIBAPC ~]$ sudo grub2-editenv list
saved_entry=Fedora (4.8.6-300.fc25.x86_64) 25 (Workstation Edition)
next_entry=2
[cshih@SCHEN-TOSHIBAPC ~]$ 

但重启之后就是不按照我的设定引导(应该引导第三条记录)。

从官方文档上看,grub2-rebootgrub2-set-default都是用来指定引导目标的,但与后者最大的区别在于,前者并不改变默认选项,仅仅是在下次启动时换个引导目标,这正是我需要的功能。

备注:grub2-set-default应该也不会生效,虽然没有试过,但我觉得是这样的。

研究过程

,我也尝试了百度和谷歌各种关键字,但可能碰到这个问题的人不多,更不会有人费力气总结出来,所以我一个明确的案例都没看到。

后来,我在一台比较新的机器上,重新尝试了这些操作,没有遇到任何问题。很显然,安装的系统和我的操作是一模一样的,但结果却是不同的,那么问题很可能就出在硬件差异上。加上之前的搜索,让我有了Legacy BIOSUEFI需要区别对待的概念。最终,我才想明白了整个问题。

解决办法

[cheshi@dhcp-14-110 grub2]$ ls -la grubenv 
lrwxrwxrwx. 1 root root 28 Dec  8  2016 grubenv -> /boot/efi/EFI/fedora/grubenv
[cheshi@dhcp-14-110 grub2]$ sudo rm grubenv 
[cheshi@dhcp-14-110 grub2]$ sudo ln -s ../efi/EFI/fedora/grubenv grubenv
[cheshi@dhcp-14-110 grub2]$ ls -la grubenv 
lrwxrwxrwx. 1 root root 25 Jul 21 13:41 grubenv -> ../efi/EFI/fedora/grubenv

说到解决办法,其根本就在于,你要想到grub2支持两种引导方式,即Legacy BIOSUEFI,而我感觉,现在的grub2默认支持的是UEFI而不是传统的Legacy BIOS,所以如果你的机器像我的一样,已有一些年头,你尤其要注意这个问题。

解决这个问题,我用了下面的语句:

[root@SCHEN-TOSHIBAPC ~]# mv /boot/grub2/grubenv /boot/grub2/grubenv.bak 
[root@SCHEN-TOSHIBAPC ~]# cp /boot/grub2/grubenv.bak /boot/grub2/grubenv
[root@SCHEN-TOSHIBAPC ~]# ls -la /boot/grub2/grubenv*
-rw-r--r--. 1 root root 1024 Jul  9 11:01 /boot/grub2/grubenv
lrwxrwxrwx. 1 root root   28 Jun 11  2016 /boot/grub2/grubenv.bak -> /boot/efi/EFI/fedora/grubenv
[root@SCHEN-TOSHIBAPC ~]# 

这样,grub2-reboot命令和整个引导过程就可以正常运作了。

http://fedoraproject.org/wiki/GRUB_2

Note
The above method fails to work on some F20 (and newer) systems due to a missing or improperly linked /boot/grub2/grubenv file. The /boot/grub2/grubenv is symbolic linked to /boot/efi/EFI/fedora/grubenv but /boot is not mounted at the time of booting. So grub2 does not have access to the environment variables. To fix this, change /boot/grub2/grubenv to point to ../efi/EFI/fedora/grubenv instead and your chosen default OS will boot without any problems.

原因分析

我这台老机器的主板怎么也有10年了,所以肯定属于Legacy BIOS的情况。而grub2刚出没几年,所以要说存在兼容性问题,那也是有可能的。

其实/boot/grub2/grubenv是一个指向/boot/efi/EFI/fedora/grubenv的符号链接(软链接)。这使我想到,如果我的系统只支持Legacy BIOS而不支持UEFI那么即便/boot/efi/EFI/fedora/下面的文件配置得再正确,也可能根本用不到。

而当我打开文件一看,更加印证了我的猜测,因为我刚刚运行grub2-reboot 2的结果,就以next_entry=2的形式保存在这个文件中。

那么既然我在引导过程中,读不到被链接的这个文件,那么我就把“符号链接”变成一个真实的文件,这样肯定就能读到了,于是问题也就解决了。

问题回顾

这个问题,我觉得还是因为grub2本身对Legacy BIOS的支持不够完善。不过话说回来,我也不认为它会去完善这个支持,必定用Legacy BIOS的人已经寥寥无几,并且还会越来越少。

这部分人就自求多福吧,但愿自己的技术还可以,足够驾驭这些挑战,不然的话,还是赶紧更新换代自己的设备吧。哈哈!!

reference

https://fedoraproject.org/wiki/GRUB_2
http://blog.csdn.net/silicon_inspecter/article/details/54809958

这篇关于记一次解决Fedora25上grub2-reboot命令不生效的经历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333128

相关文章

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

解决Entity Framework中自增主键的问题

《解决EntityFramework中自增主键的问题》:本文主要介绍解决EntityFramework中自增主键的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Entity Framework中自增主键问题解决办法1解决办法2解决办法3总结Entity Fram

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx