之前在本机有fedora 29的系统,但是由于错误安装,把windows10 启动安装到 linux 所在的硬盘中,导致原来的 efi中的grub启动被破坏,不能进入到linux中;我首先通过磁盘精灵,把efi中启动文件拷贝到现有的windows安装盘中,重新启动后成功从新的efi分区进入windows; 然后开始进行恢复fedora系统;这时候,有两种办法,一种是重新安装 linux; 另外一种方法就是重新修复grub引导;因为对linux比较了解,我选择了后者;首先参考了几篇已经实践的博客;

Fedora 29 引导修复:

  • 创建修复环境:

    • 制作live cd 或者 启动盘;
    • 启动进入live os
    • sudo -i
  • 创建系统chroot环境:
    • mkdir -p /mnt/fedora
    • mount /dev/fedora/root /mnt/fedora
    • mount /dev/sda2 /mnt/fedora/boot (挂载boot, 如果boot 分区单独分区的话)
    • mount -t proc proc /mnt/fedora/proc
    • mount -o bind /dev /mnt/fedora/dev
    • mount -o bind /sys /mnt/fedora/sys
    • mount -t devpts devpts /mnt/fedora/dev/pts
    • mount -t efivarfs efivarfs /mnt/fedora/sys/firmware/efi/efivars
    • chroot /mnt/fedora
  • 更新修复的环境并安装grub2:
    • yum makecache
    • dnf install grub2-efi grub2-efi-x64-modules shim (安装系统为 64位)
    • grub2-install --recheck /dev/sda1 (sda1 为efi 分区)
    • exit (退出chroot, 好像我在里面使用 grub2-mkconfig 一直阻塞)
  • 自动生成grub.cfg,用于启动,默认生成的文件肯能启动不成功,建议手动装载linux内核:
    • mount /dev/sda2 /boot (启动分区 sda2)
    • mkdir /mnt/efi
    • mount /dev/sda1 /mnt/efi (efi分区 sda1)
    • grub2-mkconfig -o /mnt/efi/EFI/fedora/grub.cfg(efi启动时,可以索引到其他磁盘上的系统,比如windows10 系统等)

    • grub2-mkconfig -o /boot/grub2/grub.cfg

  • grub2 手动引导加载linux内核:参考 Using the GRUB2 boot prompt
    • insmod part_gpt
    • insmod ext2
    • insmod lvm
    • insmod xfs
    • ls
    • set root=(hd0,gpt2)
    • linux (hd0,gpt1)/vmlinuz-5.0.0-1.fc16.i686 root=/dev/dm-2 rhgb quiet selinux=0 (此处参数可以参考)
    • initrd (hd0,gpt1)/initramfs-5.0.0-1.fc16.i686.img (此处参考书可以参考)
    • boot(重新启动)
    • grub2-mkconfig -o /boot/grub2/grub.cfg 进入系统后,重新修复引导;
    • 当然也可以在之前自动生成的启动项的基础上修改;在grub2 启动时使用 e 快捷键进入修改界面,并使用ctrl+x执行修改结果;
  • 清理现场:
    • reboot;至此,重启并拔掉live usb,使用efi模式引导修复的系统,完成启动;
    • 注意:此时windows efi的引导还在,只是被grub2覆盖了, 先启动grub2;当然我们可以使用磁盘精灵;将windows efi 拷贝到另外一个单独的分区;
    • 启动后需要重新创建 grub2 cfg;使用上述 grub2-mkconfig 命令,在 /boot/efi/EFI/fedora/grub.cfg 和 /boot/grub2/grub.cfg 两个位置覆盖更新;
  • 最后,祝您使用愉快!此教程总结自实际修复过程中,如果您有问题,欢迎留言咨询;我最后是在自动生成的项目的基础上,结合手动修改引导成功的;

如果你对linux的启动机制,以及mbr,efi 等不是很了解;建议还是重新安装系统为好,防止把现有的windows系统搞坏;当前很多的pc机,都是基于冯诺依曼结构设计,计算机的中心是存储;所以要保护好磁盘上的分区数据不被破坏;重新划分磁盘的时候,也要多加小心;

保持更新,转载请注明出处:https://www.cnblogs.com/xuyaowen/p/grub-rebuild-after-installed-windows.html ;更多内容请关注cnblogs.com/xuyaowen;

参考链接:

windows10 双系统安装后,grub2 引导修复(亲自实验);grub2 命令行 手动加载内核;fedora 29 系统grub2引导修复;的更多相关文章

  1. win10 ubuntu双系统安装后无法引导进入ubuntu

    之前按照先装windows后装ubuntu的方式装的系统,都可以引导到ubuntu,无论是将ubuntu挂在到/boot在windows用easy BCD建立ubuntu引导,还是将ubuntu挂在到 ...

  2. 物理机安装Kali Linux + Windows10双系统安装教程

    转自 https://www.linuxidc.com/Linux/2018-08/153429.htm 一.镜像下载: 根据需求下载自己需要的版本 从官网下载kali 2018.2 的安装包:htt ...

  3. Ubuntu18.04 + Windows10 双系统安装

    此处忽略Windows10安装!!! 准备 安装环境 OS:Windows10 CPU:Intel(R) Core(TM) i5-10600KF CPU @ 4.10GHz 4.10 GHz GPU: ...

  4. windows和ubuntu下git commit提交后如何保存和退出,回到命令行

    问题一: windows下git commit后会进入vim界面,不知道怎么操作 解决办法: 1.输入小写字母i,此时进入编辑模式,可以输入你想输入的内容 2.按下esc键,此时退出编辑模式,输入英文 ...

  5. ajax局部刷新后,如何让局部中的百度分享重新加载

    我这个人不怎么喜欢说太多话,看几个图你们就懂了 Ajax前 Ajax之后 原因分析 解决方法 收工 百度分享是集成了众多主流第三方网站分享和收藏按钮的工具. 通过百度分享轻松将主流第三方网站的分享按钮 ...

  6. windows10 命令行修复系统引导

    文章介绍的方法适用于拥有一个刻录有原版win10安装镜像的用户 下载地址:https://www.microsoft.com/zh-cn/software-download/windows10 首先进 ...

  7. Day003_linux基础_系统启动过程及系统安装后优化

    Linux系统启动过程: 打开电源开关开机 BIOS自检 MBR引导 grub内核菜单选择 加载内核kernel 运行init进程,系统初始化 然后读取/etc/inittab 配置文件,当前系统所在 ...

  8. 引导加载程序之争: LILO 和 GRUB

    在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序.通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU ...

  9. (3)打造简单OS-MBR引导区转移加载简单程序(突破512限制)

    在第一节<(1)汇编写入引导区,虚拟机启动步骤>中讲解到一个简单屏幕显示一川字符串,第二节讲到BIOS启动过程! 第一节中基本原理就是将那个汇编代码用nasm汇编器进行汇编成二进制,然后把 ...

随机推荐

  1. JAVA中字符串常见操作

    String str1="hello,world";String str2="Hello,World"; 1.字符串的比较:例,System.out.print ...

  2. 转载 C#中DataTable中的Compute方法使用收集

    原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...

  3. Git实战指南----跟着haibiscuit学Git(第二篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  4. DBCP2的使用例子和源码详解(不包括JNDI和JTA支持的使用)

    目录 简介 使用例子 需求 工程环境 主要步骤 创建项目 引入依赖 编写jdbc.prperties 获取连接池和获取连接 编写测试类 配置文件详解 数据库连接参数 连接池数据基本参数 连接检查参数 ...

  5. 一条数据的HBase之旅,简明HBase入门教程3:适用场景

    [摘要] 这篇文章继HBase数据模型之后,介绍HBase的适用场景,以及与一些关键场景有关的周边技术生态,最后给出了本文的示例数据 华为云上的NoSQL数据库服务CloudTable,基于Apach ...

  6. Snack3 一个新的微型JSON框架

    Snack3 一个新的微型JSON框架 一个作品,一般表达作者的一个想法.因为大家想法不同,所有作品会有区别.就做技术而言,因为有很多有区别的框架,所以大家可以选择的框架很丰富. snack3.基于j ...

  7. 二叉树的建立&&前中后遍历(递归实现)&&层次遍历

    下面代码包含了二叉树的建立过程,以及三种遍历方法了递归实现,代码中还利用队列实现了层次遍历. import java.util.LinkedList; import java.util.Queue; ...

  8. 为什么说 Java 中只有值传递?

    对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂. ...

  9. luogu P2740 [USACO4.2]草地排水Drainage Ditches |网络流

    题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没 ...

  10. es6 babel 安装以及使用

    1,安装好node(需要使用npm包管理工具) 2,在本地项目路径下npm init,格式化成功后会在项目下生成一个配置文件package.json 3,本地安装bable npm install - ...