Linux与Windows10⽤grub引导教程
前⾔
去年暑假的时候,写了⼀篇如何装 Linux 和 Windows 10 双系统的⽂章发在了简书上,我写这篇⽂章的原因是当初装双系统确实是折腾了许久,⽹上也不到⼀篇详尽的教程。由于去年对于写教程还不是熟练,⽽这⼀年多的使⽤过程也遇到了⼀些问题,所以就准备「Refactoring」这篇⽂章。
EFI 分区
在教程正式开始之前,先花⼀点时间说明 EFI 分区的组成和作⽤。
⾸先,在你装了 Windows 之后,Windows 在装机过程中会将硬盘划分出⼀个约 100m ⼤⼩的分区,称为 EFI 分区这个分区就是起引导作⽤的。在资源管理器中是看不到的这个分区的,可以在磁盘管理中看到,管理则需要借助。便于说明,在装好了 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 能成功,其它绝⼤多数发⾏版都会失败。推荐「」和「」,这两个软件都可以。
刻录完成后,重启按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、Manj
aro ⾼级选项和 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 Windows10" {
2insmod part_get
3insmod fat
4insmod search_fs_uuid
5insmod chain
6search --fs-uuid --set=root $hints_string $fs_uuid
7chainloader /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 双系统也配置完毕了。
附加问题
linux怎么读取windows文件在使⽤这⼀年多的时间,遇到了以下的⼏个问题:
1. 在 Windows 10 进⾏了⼀个⼤更新后,会发现 GRUB 引导界⾯没有了,还是直接进⼊了 Windows 10,这时只需要按照替换引导⽂件的
⽅法重新输⼊⼀遍命令就⾏。
2. 使⽤ Linux 某个发⾏版⼀段时间之后,难免会想尝试⼀下另⼀个发⾏版。这时请务必将之前的发型版的引导⽂件删除,否则可能会出
现⽆论怎么设置都⽆法进⼊ GRUB 的情况。例如:我之前⽤的是 Ubuntu,我现在换成了 Manjaro,我就需要⽤ DG 删除 EFI 分区的Ubuntu ⽂件夹。
3. 在我使⽤ Manjaro 更新了⼀次 Linux 的内核后,进不去 Windows 10 了,这个时候千万不要直接修复 Windows 10 引导,这会格式化
EFI 分区,只需要按上⾯的⽅法编辑⼀下 GRUB 就可以了。
最后:祝使⽤愉快。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论