声明:
本人安装系统时,将系统分区efi安装在了从C盘开辟出来的空间,将swap、/、/home分区安装在了机械硬盘上,所以选择其他安装方式的可以参照我的思路来操作。
第一阶段
开机,进bios,用之前安装ubuntu系统的启动盘启动,选择第一个选项,Try ubuntu without install,进入系统之后,先联网。然后打开终端执行:
sodu passwd
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair
sudo boot-repair
出现 /boot detected 那个提示时,选择ok
然后选择 第一项:recommended repair
遇见什么窗口就点确定就行了
最后会有一大段提示,说明引导修复完成,然后用reboot命令重启。最后一段的意思是:
若重启后只能进入 Windows 系统而没有 Ubuntu 的选项,可能是因为 win10 默认为第一启动项而忽视了 Ubuntu 系统。此时我们在 Windows 系统下打开命令提示符(管理员模式),输入 bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi,将 grubx64.efi 作为首选引导项,重启后若还是无法进入 Ubuntu 则输入 bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi 应该就可以出现双系统的引导界面了。grubx64.efi 和 shimx64.efi 的位置默认应该是 C 盘的 EFI 文件夹,具体位置可以通过 DiskGenius 软件进行查看。
如果运气好的话,重启就可以看见引导了。
第二阶段
如果运气不佳,发现还是卡在gnu grub界面,还需要以下操作:
在gnu 界面上:
第一步:
输入
ls
会出现(hd0,gpt1)(hd1,msods1),(hd1,msdos2)等, 不同的电脑不一样 。
linux中一般是/dev/sda 123表示固态硬盘,dev/sdb 123表示机械硬盘。grub则是用(hd0,gpt1)对应 /dev/sda 1,(hd1,msods1)对应dev/sdb 1。
第二步:
输入
set
查看现在电脑的root 和prefix所在的位置。输出的信息最后面会有一个root=xx和prefix=xx,记住这两个参数。
此处我这里显示的是:root=(hd0,gpt3);prefix=(hd0,gpt3)/efi/ubuntu
第三步:
查找你的grub目录(当然如果你知道你grub目录在哪里更好),这一步就麻烦一些了,需要翻一翻目录找到具有/efi/ubuntu/ 这种结构的路径。示例:
ls (hd1,gpt1)/
我最终找到的文件在(hd0,gpt1)/efi/ubuntu/
第四步:
找到boot文件夹在哪里之后,假设在(hd0,gpt1)中,在界面输入:
set root=(hd0,gpt1)
set prefix=(hd0,gpt1)/efi/ubuntu/
insmod normal
normal
第五步:
回车。之后应该出现启动界面
第三阶段
进入系统重启之后发现,再次进入系统还需要重复上述操作,这无疑非常麻烦,所以我参考一些帖子,找到了一个解决办法。
一些帖子的解决办法是
sudo update-grub
sudo grub-install /dev/sda
这对我的情况并没有用,重启之后仍然会进grub,说明并不是grub没有install的原因。
很多机器grub会先在EFI分区上引导,然后再转移到真正的分区。我硬盘上确实有个(hd0,gpt1)分区,对应于/dev/sda1。于是我mount上该分区并查看:
sudo mount /dev/sda1 /mnt
打开/mnt目录,里面就是/dev/sda1里面的内容了。其中有/EFI/ubuntu/grub.cfg这个文件,而之前在gnu界面的时候,就是将root和prefix设置为这个目录才成功启动系统,说明是这个文件起了作用。将这个文件复制一份到桌面上。
而系统默认的root和prefix路径是(hd0,gpt3),所以我们再看一下这个路径下的文件结构:
sudo mount /dev/sda3 /mnt
打开/mnt目录,里面就是/dev/sda3里面的内容了。其中/EFI/ubuntu/ 这个目录下并没有任何.cfg配置文件,所以这就解释了为什么gnu grub找不到引导项了,因为默认目录下根本没有.cfg配置文件!所以我们要做的是将之前拷贝到桌面上的grub.cfg文件拷贝到这个目录或者在这个目录里touch一个grub.cfg文件,然后将桌面上文件里的内容复制过去并保存。
之后再重启,直接进入系统引导界面,大功告成!