前言

去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了简书上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程。由于去年对于写教程还不是熟练,而这一年多的使用过程也遇到了一些问题,所以就准备「Refactoring」这篇文章。

EFI 分区

在教程正式开始之前,先花一点时间说明 EFI 分区的组成和作用。
首先,在你装了 Windows 之后,Windows 在装机过程中会将硬盘划分出一个约 100m 大小的分区,称为 EFI 分区这个分区就是起引导作用的。在资源管理器中是看不到的这个分区的,可以在磁盘管理中看到,管理则需要借助 DG 工具。便于说明,在装好了 Linux 之后,我将 EFI 挂载至 boot 分区截图:

可以看到,该分区包含 3 个文件夹(如果你没有装 Linux 的话,就只有两个),分别是 Boot、Microsoft 和 Manjaro,其中 Boot 文件夹就是 UEFI 引导所必需的文件。
我们继续打开 Microsoft/Boot 文件夹:

这些文件就是启动 Windows 10 所必需的,包含了语言包、字体等,BCD 包含了 Windows 引导开始以后的信息。其中,bootmgfw.efi 是 Windows 默认引导文件

  1. EFI/Boot/bootx64.efi
  2. EFI/Microsoft/Boot/bootmgfw.efi

以上是采用 UEFI 启动 Windows 10 的文件结构,也就是说,当你按下开机按钮的时候,首先 UEFI 找到 EFI 分区的 Boot 文件夹,然后加载 bootx64.efi 文件,读取文件信息,找到 EFI/Microsoft/Boot/bootmgfw.efi,按照 bootmgfw.efi 的要求,加载所需的启动信息,启动 Windows 10。

准备工作

在正式装系统之前,我们还需要做一些准备工作:

关闭 Windows 的快速启动

这个功能的作用是在于关机的时候不完全断电,类似将系统处于「休眠」状态,这样可以让开机更加迅速。但这也就导致了只能使用 Windows 系统。

关闭 BIOS 的 Secure Boot 的功能

在默认情况下,UEFI 固件只会加载那些被签名的引导程序。在缺少 Secure Boot 功能的传统 PC 机上,恶意的后门程序可以加载自身,进而摇身一变伪装成一个引导程序。这样的话,BIOS 就会在启动的时候加载后门程序,这样它就可以躲过操作系统,把自己隐藏得很深。
但是不得不说,这对我们安装 Linux 造成了很大的困扰,也是直接导致我们重启到 Windows 10 后进不去 Linux 的原因。
首先我们要关闭这个功能:进入 BIOS 找到 Secure Boot,选择 disabled,这样就关闭了。当然,有些人进入 BIOS 会发现 Secure Boot 这个选项是灰色的(比如我的就是),这时你需要先给你的 BIOS 设一个密码,然后就能关 Secure Boot 了。

安装 Linux

所有的准备都已经完成,这时就可以准备刻录 U 盘了,不推荐 UltraISO,经亲测,软碟通仅刻录 Ubuntu 能成功,其它绝大多数发行版都会失败。推荐「Rufus」和「USBWriter」,这两个软件都可以。
刻录完成后,重启按 f12,选择从 USB 设备启动,对于绝大多数发行版来说一路回车就行了,只需要注意一点:在选择挂载 boot 位置的时候,一定要挂载在 efi 分区,别的都不行。
重启之后,不出意外的话,你会直接进入 Windows 10,不要担心,这时 Linux 已经安装成功了,我们只需要将引导文件替换一下。

替换引导文件

先用 DG 打开 EFI 分区,你会看到多了一个文件夹,名称取决于你安装的是哪一个发行版。我安装的是 Manjaro Linux,名称就是 Manjaro,打开之后会发现里面有一个名为 grubx64.efi 的文件,这就是启动 Linux 的引导文件。和 Windows 10 的 bootmgfw.efi 类似,我们想要用 grubx64.efi 引导代替掉 bootmgfw.efi,这样就可以用 GRUB 引导了。步骤:

  1. 进入管理员命令行。方法:win + x,再按 a
  2. 输入 bcdedit /set {bootmgr} path \EFI\Manjaro\grubx64.efi。提示操作成功的话,就完成了。

注:经人提醒,如果输入以上命令提示「参数错误」的话,将 {bootmgr} 改为 ‘{bootmgr}’,原因是 PowerShell 和 CMD 语法的差别。

至此,如果你安装的是除 Arch 之外绝大多数发行版,那么接下来就和你没有啥关系了,你已经成功了,好好享受吧!

开机之后会发现进入 GRUB 的引导了,通常会包含至少三个选项(以 Manjaro 举例):Manjaro、Manjaro 高级选项和 Windows Manager。这就代表你已经完美的解决了 Windows 和 Linux 双系统引导的问题。

修复 Windows 引导

这一点是我安装 Arch Llinux 的时候发现的,Arch Linux 安装过程是手动安装的,在编写 GRUB 的时候会扫描不到 Windows Manager 所在的分区(当然可能不是所有人都会遇到),所以在 GRUB 界面可能会看不到 Windows Manager 选项,导致进不去 Windows 10,这里就需要手动编辑 GRUB 信息,我们打开 /boot/grub/grub.cfg 文件,发现里面确实没有 Windows 10 的启动信息,在后面加上:

1menuentry "Microsoft Windows 10" {
2  insmod part_get
3  insmod fat
4  insmod search_fs_uuid
5  insmod chain
6  search --fs-uuid --set=root $hints_string $fs_uuid
7  chainloader /EFI/Microsoft/Boot/bootmgfw.efi
8}

注意

这里的 $hints_string,代表的是终端执行命令:

1sudo grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

后的输出;

$fs_uuid 代表的是:

1sudo grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

的输出。

然后保存。在终端执行命令:sudo grub-mkconfig -o /boot/grub/grub.cfg,就 OK 了。

到此,Arch Linux 和 Windows 10 双系统也配置完毕了。

附加问题

在使用这一年多的时间,遇到了以下的几个问题:

  1. 在 Windows 10 进行了一个大更新后,会发现 GRUB 引导界面没有了,还是直接进入了 Windows 10,这时只需要按照 替换引导文件 的方法重新输入一遍命令就行。
  2. 使用 Linux 某个发行版一段时间之后,难免会想尝试一下另一个发行版。这时请务必将之前的发型版的引导文件删除,否则可能会出现无论怎么设置都无法进入 GRUB 的情况。例如:我之前用的是 Ubuntu,我现在换成了 Manjaro,我就需要用 DG 删除 EFI 分区的 Ubuntu 文件夹。
  3. 在我使用 Manjaro 更新了一次 Linux 的内核后,进不去 Windows 10 了,这个时候千万不要直接修复 Windows 10 引导,这会格式化 EFI 分区,只需要按上面 修复 Windows 引导 的方法编辑一下 GRUB 就可以了。

最后:祝使用愉快。

本文标题: Linux 与 Windows 10 用 GRUB 引导教程
最后更新:2018 年 02 月 05 日 - 10:02
本文链接:https://blog.itswincer.com/posts/ad42f575/
本文采用:署名-非商业性使用-禁止演绎 4.0 国际 协议进行许可,阅读 相关说明

Linux与Windows 10用grub引导教程的更多相关文章

  1. [转]使用Ubuntu Live CD修复Grub引导教程

    这个教程的方法我用过了,能够解决了我的问题. 这篇文章主要介绍了使用Ubuntu Live CD修复Grub引导教程,本文以 Ubuntu Live CD 修复 Grub 引导为例,需要的朋友可以参考 ...

  2. 安装 Linux 与 Windows 10 双系统,你需要了解的一切

    该选Windows 10还是Linux Mint?鱼与熊掌当然可以兼得,但咱们得掌握点小技巧才能顺利搞定. Windows 10绝不是唯一一款值得我们安装在自己计算机之上的免费操作系统.Linux只靠 ...

  3. Windows 10 IoT Serials 2 - Windows 10 IoT RTM 升级教程

    7月29日,微软推出了Windows 10 for PC的正式版,其版本号是Build 10240.近两天官方说已经有4700万的下载安装量,同时这个数字还在不断攀升.另外,除了Windows 10 ...

  4. Windows、Ubuntu双系统重装windows系统后grub引导的修复及默认启动项的修改

    今天帮童鞋重装系统,他的电脑是Windows.Ubuntu双系统,需要重装的系统是windows,据说是因为很多游戏都只支持64位,要给换成64位的 = =...      于是我就帮他装了个wind ...

  5. Windows恢复Grub引导,用grub安装ubuntu

    http://www.linuxidc.com/wap.aspx?nid=18027&p=&cp=&cid=http://m.blog.chinaunix.net/uid-22 ...

  6. windows重装系统后grub引导菜单修复方法(亲自实验过)

    问题: 电脑安装的是windows7+ubuntu 15.10双系统.windows重装后,grub引导界面消失. 解决方法有两大步: 1.进入ubuntu; 2.在ubuntu中修复grub. 一. ...

  7. 基于树莓派的微型气象站设计与开发(Windows 10 IoT Core)

    前言 树莓派(Raspberry Pi,RPi)是专门为学生计算机编程教育而设计,只有信用卡大小的卡片式电脑,可以运行Linux或者Windows 10 IoT Core操作系统.本文将利用树莓派和U ...

  8. ubuntu 16.04(Windows 10双系统+grub引导)无法进入tt1~tt6(NVIDIA驱动安装相关-黑屏,login loop,分辨率)

    目录 前言回顾 最终解决: 0.关闭x服务 1.禁用nouveau 2.加入 3.更新 4.查找匹配驱动 5.选择推荐版本 6.等待安装后重启,nvidia-smi查看是否安装成功,或者lsmod | ...

  9. 在GNU/Linux下制作Windows 10安装U盘

    今年春节回家期间,我需要将家里的一台安装了Debian Stretch的ZaReason笔记本电脑更换为Windows 10系统,好让爸妈从老台式机上的XP系统升级到新的平台上来.回家前,小仙女已在微 ...

随机推荐

  1. iOS动画之模拟音量振动条

    音量振动条 效果图: 假设实现? 创建3个layer.按顺序播放y轴缩放动画 利用CAReplicatorLayer实现 1.什么是CAReplicatorLayer? 一种能够复制自己子层的laye ...

  2. spinner -样式实现

    这里主要是在theme中实现spinner的样式,如下  <style name="Theme.Funui" parent="Theme.Holo.Light&qu ...

  3. 26.多线程join detach

    #include <iostream> #include <thread> #include <array> #include <Windows.h> ...

  4. 用VXE保护Linux系统安全

      本文被转载在:http://www.linuxso.com/a/linuxxitongguanli/161.html 650) this.width=650;" onclick=&quo ...

  5. BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机/后缀自动机)

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...

  6. 【习题 7-6 UVA - 12113】Overlapping Squares

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先预处理出来一个正方形. 然后每次枚举新加的正方形左上角的坐标就可以. 注意覆盖的规则,控制一下就可以. 然后暴力判断是否相同. 暴 ...

  7. theme-windowAnimationStyle 动画四个方法的意义

    首先看代码 <style name="Animation.Activity"> <!--A打开B,B的出现动画--> <item name=" ...

  8. Django的命令

    安装django          : pip install django 创建django项目   :django-admin startproject projectname 启动django项 ...

  9. Codeforces Round #450 (Div. 2) D.Unusual Sequences (数学)

    题目链接: http://codeforces.com/contest/900/problem/D 题意: 给你 \(x\) 和 \(y\),让你求同时满足这两个条件的序列的个数: \(a_1, a_ ...

  10. JS学习笔记 - 运动 - 淘宝轮播图

    <script> window.onload=function () { var oDiv=document.getElementById('play'); var aBtn=oDiv.g ...