技术解析

救救孩子吧, Windows10 下安装 Centos8 后,想尽办法,折腾一天,修复不了 Win10 引导。
0
2021-06-16 13:55:46
idczone

昨天用 U 盘安装 Centos8.2,官网下载的系统( http://mirrors.aliyun.com/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-boot.iso ),安装很顺利,但修复 Win10 引导这里死活不成功。

用 grub2-mkconfig 根本找不到 Win10 启动项,但是在磁盘里又能看到 100M 左右的 Windows 的 EFI 分区。 然后尝试了百度+谷歌的各种 grub2 配置方案,比如 set root=(hd0,gpt1),chainloader /EFI/xxx 。 启动项都能找到 Win10,但就是启动不了。

附带说明:

1 执行命令 grub2-mkconfig -o /boot/grub2/grub.cfg 永远只有如下两句话: Generating grub configuration file ... done 我看别人都有 "Found Windos 10 on xxxx",我不管怎么折腾,都没得这句话。

2 装完 centos 后,/boot/efi/EFI/boot/ 目录下只有 centos 文件夹,这好像不正常,你们是还有 /boot/efi/EFI/boot/Boot 和 /boot/efi/EFI/boot/Microsoft 文件夹对吧?

参考教程: https://blog.csdn.net/qq_40058321/article/details/105743701?utm_medium=distribute.pc_relevant.none-task-blog-blogcommendfrommachinelearnpai2-4.add_param_iscf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-blogcommendfrommachinelearnpai2-4.add_param_iscf

就想知道我这到底是哪里出了问题??? 或者让我恢复 Windows10 吧,这系统我不要了~


下个 PE 修复一下

折腾 Arch 的时候 wiki 看到这么一条 需要安装 os-prober 才能发现 windows 。原文链接如下
https://wiki.archlinux.org/index.php/GRUB#MS_Windows

开机时进入 efi boot menu 有 windows 启动项吗?可以按 ESC 或 F12 之类的进入,不同电脑按键不同

刚刚试了,
yum -y install os-prober
grub2-mkconfig -o /boot/grub2/grub.cfg
还是没反应,找不到 win10.

我配置 grub.cfg 文件后有了。刚装完系统没有。
centos 下能做 pe 吗? 不然就另外找台电脑了。

下载一个 PE 系统,里面工具包可修复 windows 开机启动项

重做呗,多大点事?

已经重做三遍了。每次结果都一样。

我说的是 efi boot menu,跟 grub 没关系

安装一个 The rEFInd Boot Manager
让 rEFInd 管理启动项
或者按三楼说的,按 BIOS 的启动快捷键,手动启动 Win 试试

哦哦,不能看到。只有 2 个硬盘启动选项。

先确认下 EFI 分区有没有 win10 的引导文件,不用 GRUB 直接用 refind 也可以

该不会是安装 centos 时格式化 esp 分区了吧?

看下 /etc/grub.d/30_os-prober 有没有执行权限? EFI 分区内容没问题的话,正确挂载然后 os-prober 正常工作的话应该很简单啊。实在不行自己写 40_custom 吧,Google 一下写一个也很简单。

如果你是两个磁盘的话,有一种可能是你的 efi 分区本来就在 centos 安装的盘上。你装 centos 时就已经把引导分区格式化了。你现在看到的那个 efi 分区可能是 centos 创建的。

我记得 WEPE 有系统引导修复功能,当时我把 win10 的整个引导都删了,引导磁盘也删了,最后通过 PE 系统修复好了引导

不如跑虚拟机,还方便很多

开机按 f12 选系统也挺好

https://www.cnblogs.com/seliote/p/9313690.html

uefi 只要 /Microsoft 没动,是永远不可能启动不了,还需要你说的什么所谓的修复的。哪怕你 grub 装一半退了,都能启动 win,要是 uefi 界面看不到 winbootmgr,U 盘随便装个什么系统的引导盘,shell 找 Microsoft 下 efi 肯定能启动。
双系统能出问题,无非就是先装 win10 只给 100M ESP,Linux 又激进,各种新特性,类似 grub 这类启动器都去支持,再加上第一次装机的人,对 os boot 各种一知半解,乱改安装设置,其实这些人仅仅只是想要在启动界面多一个入口那么简单,而结果就是各种野 blog 复制粘贴,一顿操作,连个 install 命令都 auto 不下去。

efi 双系统要区分是一个硬盘一个系统还是一个硬盘两个系统.
如果两个系统在不同的硬盘上,则有两个 efi 分区. linux 系统安装完成, 但引导还没安装时, 去 Windows 的盘里把 Microsoft 的文件夹复制过来再安装引导, 就能发现了. 开机启动顺序选择 linux 的那一块硬盘.
如果两个系统安装在同一硬盘上则安装 linux 时不应该设置新的 efi 分区, 要选 Windows 帮你分割好的那一个. 换句话说要先安装 Windows.
总的来说推荐第一种办法. 混在一起很容易出问题. 另外, windows 更新也可能会动启动引导顺序.

随便找个 pe
bcdboot c:\windows /s h: /f UEFI
c 为 pe 里 Windows 所在分区盘符, h 为 pe 里 efi 分区盘符.

如果你的分区表是 mbr...
那去掉 /f 参数
bcdboot c:\windows /s h:

2 个安全无广告 pe
https://www.itsk.com/
http://www.wepe.com.cn/
或者你用 Windows 镜像启动,然后打开 cmd 也可以.

安装的 grub 是 grub-efi 这个么?
centos 下我不熟悉软件包名字叫啥,在 debian 系软件包名字是 grub-efi,centos 下应该有类似的。献确定安装的是它

只用 windows 去引导 linux 就好了,grub 装 linux 自己的盘上,别用 grub 去引导 windows

折腾一天,连个 uefi 引导的问题都解决不了,你还不先多玩玩虚拟机吗?反正我之前装 windows 、linux 都是两个硬盘装的,一个盘各一个 efi 分区,进入系统后禁用另一个系统盘,后面发现 linux 的内核支持直接从 uefi 引导,索性连 grub 都不要了,有兴趣可以搜索 EFISTUB 看看。

2020 年还玩双系统吗?
要玩之前也多找找资料,熟悉相关步骤,安装的时候选择哪个作为引导分区。
同意楼上的

说句马后炮的话,没事不要折腾双系统,后来你会发现进 Linux 的时候寥寥无几。
还不如搞虚拟机,你的需求 99.9%都能覆盖到。

理论上 EFI 分区在双系统应该有 Microsoft 文件夹( Windows Loader )和 centos ( GRUB 引导)两个文件夹,文件夹外还有个单独的 bootx64.efi 的文件(默认启动)。
EFI 分区可以在 Linux 下用 root 权限挂载进行查看和观察,一般在磁盘的第一个分区(如 /etc/sda1 )。另外配合上 Linux 的 efibootmgr 工具,基本没有解决不了的引导问题。
启动项能找到,却启动不了,反正我感觉你的安装流程破坏了正常引导,一般 Grub 的搜索,我是没有碰到过搜索不到的情况,除非手动在 /etc/default/grub 禁用了(默认是启用 OS probe 的)。首先需要能保证 BIOS 里选择 Windows 能引导,不然 Grub 没法自动搜索引导也正常不过了

另外给个主意,因为不知道你在哪一步破坏了引导,可以先用 live CD 进 Linux 或者用 Windows 下的工具,备份 EFI 分区的 Microsoft 文件夹。Linux 安装完后再放回去也是可以的

上次碰到这问题大概是启动类型被我改成了 legacy

重做吧,我记得 ubuntu 桌面版是专门对 Windows 双系统优化的。
centos 是个 server 系统,这些程序员也许就没考虑过和其他系统并存。

你不会安装引导时选的整个硬盘吧?

讲道理我不懂这个,我遇到这个问题的解决方法是
1. 先在 bios 启动里看有没有 windows 启动项 如果没有就用 U 盘进 PE 修复就有了。
2. 有了以后从这里先进去 windows,然后装个 easy uefi,然后删掉 linux 的启动项,windows 排第一个
3. 最后再用 dg 删掉硬盘上的 linux,如果有必要再重新安装一个或者换一个安全的版本重新安装一个

Dism++

[楼主本人统一回复]
谢谢大家的热心回复,关于安装情况再补充说明下。
1 EFI 双系统是装在一个硬盘里的,我电脑是有两个硬盘,但只有硬盘 1 是 SSD,想着在 SSD 里会快一些,所以就装在一个硬盘里。
2 关于为什么没玩虚拟机。 好几年前用过虚拟机,用起来觉得很卡。所以这次就没考虑。现在综合大家意见来看,可能是因为当时笔记本电脑太渣,而不是虚拟机本身这个方案不好。后面我会重新考虑此方案的。毕竟确实之前没怎么玩过 linux 。
PS: 今晚回去再试试用 pe 修复的方案。

PE 修复是没问题的。。如果 不是 UEFI,PE 修复了 windows 。。还得 找个 live cd 修复 linux 的引导。。。

开机后按 F12,可以看到 centos 启动项和 windows 启动项

[楼主后续反馈]
晚上给 U 盘装了一个 PE,然后 U 盘启动,修复引导,显示“修复成功”,心里一喜。然后重启电脑,启动提示“error:../../grub-core/loader/i386/pc/chainloader.c:213:invalid signature”。
已经在引导配置了加了“insmod ntfs”了。还是提示这个。
这是啥呀???

我很久以前还在玩这些东西的时候(虽然玩的不太深),从来不给双系统各自自带的引导程序作为真引导。
我习惯在磁盘开头弄个分区,装上 grub4dos,里面是自己写的菜单项,还会附带一些 PE 的镜像。
菜单项里一条指向 Windows 系统的 bootmgr,另一条指向 Linux 的 grub2 。
开机进 grub4dos 的菜单,从来不在 bootmgr 或者 grub2 里面选系统。

[磁铁终结]
最后选择用 U 盘重装了 windows 系统,然后过程了也把 centos 删了。
然后按 F11 可以看到 windows 系统了。
ps: 注意设置 BIOS MODE 为 UEFI. 我本来是 UEFI/Legacy,一直启动不了 windows 系统,改成 UEFI 后顺利启动。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服