双系统修复 Linux 引导
[TOC]
前言
众所周知啊,要装 Windows 和 Linux 双系统的话,是需要先装 Windows 再装 Linux;因为 Windows Boot Manager 不会去引导 Linux 系统,而 Grub 会去引导 Windows 系统,所以后装 Linux 的话,就可以使用 Grub 引导 Windows,而后装 Windows 的话,Windows Boot Manager 就引导不了 Windows。
但是,凡事都有意外;万一我本来就是 Linux,想再装一个 Windows,那犯不着整个 Linux 也重装吧。又或者某些原因需要重装 Windows,那 Grub 引导也会失效,怎么办?安排
准备一个启动盘
我这里直接用的 Ubuntu 的 LiveCD 做的 U 盘启动盘,进去之后选择 Try Ubuntu
挂载分区
找到当初安装时候的分区方案,挂载起来
-
切换到root用户
sudo -i
-
查看分区情况
fdisk -l
输出如下
Disk /dev/nvme0n1:953.89 GiB,1024209543168 字节,2000409264 个扇区 Disk model: SAMSUNG MZVLB1T0HBLR-000L7 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:gpt 磁盘标识符:6469C8AC-C57F-43BA-A804-8E17BFF27E93 设备 起点 末尾 扇区 大小 类型 /dev/nvme0n1p1 2048 647167 645120 315M EFI 系统 /dev/nvme0n1p2 647168 839507967 838860800 400G Linux 文件系统 /dev/nvme0n1p3 839507968 1258938367 419430400 200G Linux 文件系统 /dev/nvme0n1p4 1258938368 1573511167 314572800 150G Linux 文件系统 /dev/nvme0n1p5 1573511168 1573543935 32768 16M Microsoft 保留 /dev/nvme0n1p6 1573543936 2000408575 426864640 203.6G Microsoft 基本数据
然后我是 UEFI 启动,所以第一个分区是 EFI 分区,第二个分区是我的根目录
-
挂载根目录
mount /dev/nvme0n1p2 /mnt
-
挂载 Boot 分区,如有
mount /dev/* /mnt/boot
Boot 单独分区的需要挂载,我这里没有单独分区,所以不需要挂载
-
挂载 EFI 分区,重要
mount /dev/nvme0n1p1 /mnt/boot/efi
之前在某度搜索到的方法都没有这一条,然后一直报错,后转某歌才找使用到解决方案
安装 Grub 并重启
-
挂载相应目录
mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys mount --bind /run /mnt/run
-
安装 grub
grub-install /dev/nvme0n1 update-grub
-
重启之后就应该能看到熟悉的 Grub了
小结
之前一直在某度搜索,结果都是大同小异,但是都不是 UEFI 启动的解决方案,某度的解决方案只适用于 BIOS 启动,或者说根本就是一大堆人复制粘贴,也没验证过的东西。
由于个人水平有限,文中若有不合理或不正确的地方欢迎指出改正