admin 管理员组

文章数量: 887359

引导文件的那些事儿

说在前面:

我的电脑型号:联想拯救者R720
硬盘:128GB SSD + 1TB 机械硬盘(其中SSD装了win10的系统盘,而ubuntu整个装在机械盘中)

曾经用的是win10+ubuntu14.04。不知道是电脑本身的问题,镜像的问题,还是我给整坏了。每次安装ubuntu时只能羡慕那些一次就装好没遇到任何问题的人,而对于我来说都会出大大小小各种问题。前段时间下定决心淘汰ubuntu14,改用ubuntu16。因为当时给ubuntu分配的内存实在太少,所以就索性重装系统了。当准备重装的时候,就知道又将面临一个严峻的考验。(无奈~

安装之前对引导什么的真的了解甚少,所以兜了很大一个圈子,做了很多无用功。后来经过一两天的研究成功进入ubuntu16.04了,写一篇文章记录,也给读者朋友们作为借鉴。(网上这么多博客的方法都救不了我也只能摊摊手了,这种情况应该极少)

关于双系统安装ubuntu的正常流程我就不再赘述了,包括bios改secure boot=disabled,刻录引导盘等,网上比比皆是。本文主要关注安装时引导程序出现问题(装grub2时失败、安装完成后无法进入ubuntu等)

废话较多,想看重点的可以直接找 加粗字体代码片段

关于BIOS——EFI与Legacy(选读)

我安装ubuntu14的时候,当时的教程让我在BIOS里把UEFI改为Legacy,后来就只能通过每次改BIOS来切换系统,十分麻烦。

这次特地了解了一下EFI与Legacy。其实简单来说EFI就是一种升级的BIOS,因为跳过了传统BIOS的自检而加速了启动。Legacy则是在EFI中对旧的启动方式的一种兼容。

而一般来说UEFI的启动模式下不能启动在Legacy模式下安装的系统,反之Legacy的启动模式下也不能启动在UEFI模式下安装的系统,总之就可以看做是互不兼容的(但是在easyBCD中看到了grub(Legacy)的选项,对此方面不甚了解,也未经实验,不知此法是否可在UEFI下启动Legacy下安装的系统)

总之,我理想中想做成那种一个界面选系统的模式,所以就需要将ubuntu也装在win所在的UEFI中。

安装grub2软件包时崩溃,用boot repair修复

具体来说,我第一次安装时,本以为进度条能愉快地走完,然后完成安装。但还是在“安装grub2软件包"这一步出了问题:
“无法将 grub-efi 软件包安装到/target/中,如果没有 GRUB 启动引导期,所安装的系统无法启动。”
提示grub2安装失败,随即系统也安装失败。

这里网上有很多博客用的是同一种方法:boot repair

其实在系统已经在装grub2引导程序的时候,其他该做的事情都做得差不多了。如果你重装系统,那么在分配内存之前,会发现上次的安装已经被识别为了一个系统,所以可以在出错时通过boot repair修复后正常进入ubuntu系统。

具体操作为:
安装系统时,必须要等到安装失败的对话框弹出(保证其他步骤均走完),再执行Ctrl+Alt+T打开终端,依次键入以下命令(须联网):

sudo -i
add-apt-repository ppa:yannubuntu/boot-repair
apt update
apt upgrade
apt install boot-repair

上面一些步骤已经安装好了boot repair,接下来点击桌面左上角的圆圈(Dash)键入boot,即可看到扳手图标的boot repair

然后等它检测到系统后,用推荐的修复方法(Recommended repair)进行修复,随后在终端输入它提示的指令以完成修复,然后reboot,应该就修复了引导程序。

理论上,这一步可以解决大多数grub2安装失败的问题,可是我的电脑恰好属于小部分,在运行boot repair时突然死机,我抱着一丝活过来的希望去睡觉,没想到睡醒了还是卡在那个界面。经多次试验并不是偶然卡死,而是必定会死掉。此问题我尚无法解释,希望知道的大神能赐教一二。

用easyBCD引导

虽然我的boot repair并不好用,但是我看到它修复之前的一两步好像是从/boot里分出了一小块区域放efi什么的文件。当时不太清楚,只知道分配空间时有一个efi什么的。再次重装的时候我就特意分出了一块地方给efi(网上查了一下大概100-250MB足够了)。没想到经过这一点改动最后竟然安装成功了。
其实正常情况下efi并不是单独分区,而是直接存在/boot中,然后系统也是从/boot来引导进入ubuntu系统的。至于为什么我这里分出efi的空间就成功了…呃,我也不大明白
但是!!!管不了那么多了,ubuntu都装好了就让我们赶紧进入吧!重启之后,电脑在我迫不及待的眼神中,没有任何选项地进入了windows10,看到那个熟悉的界面,我泪流满面QAQ

怎么会这样呢?我又去搜索博客,博客告诉我:在windows下下载一个easyBCD,可以创建和管理引导项。这还等啥!我就屁颠屁颠赶紧下载好了。据说双系统都是用这个管理引导的。大多数人走到这一步之后问题应该也能解决了。
进入easyBCD,本来应该先添加新的引导程序,但是我看到easyBCD已经将ubuntu的启动项自动添加了!我感动到无以言表流下泪来!看这小巧玲珑的软件,界面简洁大方,还功能强大,实在是太棒了!
重启之后,我也在windows boot manager的界面见到了windows和ubuntu两个选项。正当我激动地选择ubuntu后,它提示:系统未能正常启动,原因可能是您最近修改了软件或硬件…所以这次同样以失败告终。

用grub-install重装引导

果然是期望越大失望越大,这一竿子又打回了解放前,只好重新找办法了。
这次带来的是用grub-install命令重新安装引导程序。这在我眼里正是对症良药。因为不管现在引导文件坏成什么样,或者是压根没有,重装一遍不就完事了么!
然后就进入linux live USB(就是插上镜像盘之后的Try Ubuntu Without Installing)
联网并执行以下步骤

1.查看ubuntu安装的分区情况

fdisk -l

在这条命令的输出中,Id为83且Type为Linux的分区就是安装ubuntu的分区。如果有多个分区,可以看分区大小来判断具体是哪个分区。假设你的Ubuntu所在的分区是sdX#。通过以下命令将分区挂载到/mnt/ubuntu

sudo mkdir /mnt/ubuntu
sudo mount /dev/sdX# /mnt/ubuntu

请用你Linux所在分区的分区标号替换代码中的所有sdX#,并注意/dev/sdX#与/mnt/ubuntu间的空格。
示例如下:

sudo mount /dev/sda5 /mnt/ubuntu      #示例代码,请勿执行

那么最后一步,就是重新安装grub到你的电脑

sudo grub-install --boot-directory=/mnt/ubuntu/boot /dev/sdX

同样,替代代码中的sdX#,注意/mnt/ubuntu/boot与/dev/sdX#间的空格。

sudo grub-install --boot-directory=/mnt/ubuntu/boot /dev/sda      #示例代码,请勿执行

代码执行完毕之后,显示“Installation finished. No error reported”即表示成功
此时,再reboot,ubuntu应该就可以正常启动了。

以上参考:https://www.howtogeek/114884/how-to-repair-grub2-when-ubuntu-wont-boot/

那么我为了确保万无一失,安装完成后再返回windows,用easyBCD删除了它默认的ubuntu引导,并手动重新添加了。保存后,我看到系统指向的引导文件是EFI\ubuntu\shimx64.efi
这正是我想要的结果!这次双管齐下,windows主引导,ubuntu从旁配合,说什么都没有失败的理由啊!

不过,情理之外意料之中的事情又出现了。reboot之后我再次眼睁睁地看着系统没有任何选择的进入了windows。这谁顶得住啊,浑身解数用尽都搞不定,这ubuntu看是装不好了。

手动添加引导程序至EFI

看到这里还没能解决问题的小伙伴,你努力装系统的样子真让人心疼

晚上躺在床上,想着装不上的ubuntu,细细思考到底是哪里出了问题,连重装grub都不行。既然它已经讲了Installation finished,那么应该没错才是。思来想去,我觉得可能是grub装的地方不太对。不然估计也不太可能是其他问题了。

前面我在用easyBCD引导这个话题中,我提到在分区时创建了一小块存放efi的空间。又想了一下UEFI里面不也有个EFI嘛,我觉得不大可能是巧合。
除此之外,我在登陆windows时,看到我的电脑中多了一个磁盘,看大小正好是那块efi的地方。那为什么其他分区没有被windwos识别呢?
我认为很有可能是文件系统的问题。其他除了swap以外的分区是ext4日志文件系统,而这个存放efi的分区,其文件系统是FAT32

我打开看了一下,里面存放的正是我求之不得,辗转反侧的 引导文件

以下是我不负责任的猜想:
当你在分区时设定了efi文件的存放位置,那么不管你选择哪一个分区作为安装启动器的分区,它都会无视此选择并且将grub2安装到efi分区里面。
我前面安装时,将启动器设置在/boot中。但是因为有efi分区,所以它直接无视了/boot并且将它们安装在了efi分区当中。这就是导致我们之前grub-install不成功的原因——因为它把grub2安装在了efi中,而我们又没有用efi里的引导文件去真正引导ubuntu系统的启动。
所以,导致我安装失败这么久的原因应该是:没有程序去运行efi里的启动文件,而引用的地方又没有启动文件所导致。这也是为什么用easyBCD不能成功的原因,因为easyBCD是启动时运行预设的引导文件,而它预设的路径下根本没有启动文件。

通过以下操作验证了我的猜想:
在windows10下以管理员模式运行cmd(命令行)
键入以下命令

mountvol g: /s

这一步,可以将EFI结构映射到电脑的G:中(如果你有本地磁盘/手机、U盘等硬件占用了盘符G:,需要选择一个未被占用的盘符进行操作)

g:
cd EFI
dir

以上三步,将我们当前的操作路径由系统盘转到了g:\EFI\下,并通过dir查看EFI中的文件
以下是我的输出信息(由于当时没有留图大家就意思意思)

2017/07/07  11:03    <DIR>          .
2017/07/07  11:03    <DIR>          ..
2017/07/07  11:03    <DIR>          Microsoft
2017/07/07  11:03    <DIR>          Boot

果然!我的EFI里面根本就没有ubuntu的引导文件

那么问题找到了,接下来就是解决方案了:
思路:只要我们把ubuntu中efi分区里的文件放到能被识别的地方,问题也就自然而然地解决了。

以下,是具体的操作方案。我认为这个方案是最终极,也是最无奈的解决方案。只要镜像没有问题,应该可以根本解决引导文件上的任何问题。你可以先尝试上面的方法,如果还是没办法启动,再按照下述方法执行。如果按照以下方式还不能解决引导问题,那还是建议看看其他博客另寻方法。

Step1. 为efi分配空间

按照正常的流程安装ubuntu,在分区时为efi分出100-250MB的空间用来存放ubuntu的引导文件EFI,然后正常安装,显示安装成功后重启到windows

Step2. 把引导文件添加到引导目录中

这步就是最重要的一步了。首先你的efi分区应该已经被windows10识别为一块硬盘了,而其中EFI里面应该有一个叫ubuntu的文件夹,这就是我们的引导文件了。

其次,和上面一样,在cmd中键入

mountvol g: /s

来把EFI的结构映射到G:
虽然这时确实已经有G:了,但是你直接在此电脑中是找不到G:的,在管理员下直接用命令行移动文件也会被提示拒绝访问。

所以接下来就是一波骚操作把ubuntu强行塞进EFI:
复制ubuntu整个目录,然后cmd中键入

notepad

打开记事本,点击文件->打开->此电脑

在此处,我们就可以看到SYSTEM_DRV(G:),这就是我们的EFI结构

我们到EFI目录下,在空白区域右键->粘贴,将整个ubuntu文件放到EFI目录里面即可
这时,我们再看一下EFI里的目录:

mountvol g: /s
g:
cd EFI
dir


在这里就可以看到ubuntu这个目录,即告成功。
以上参考:https://blog.csdn/ewqapple/article/details/81428631

Step3. 制作引导

由于我们是在把ubuntu的引导文件放入C盘,所以应该是用了windows10来引导ubuntu的启动。
此处,我们可以自行选择引导方式去引导。如easyBCD,然后把引导文件链接到我们刚刚放的ubuntu里的shimx64.efi上去,这时再重启,应该就可以看到引导界面,并且可选地进入windows10或者ubuntu16.04两个系统。

以上,就是本文介绍的引导程序修复方法。我在我的电脑上实测是成功的,但是有可能因为电脑各种原因的不同或其他因素导致失败,尚不明确,故仅供借鉴。

其他

安装完成之后,我在使用ubuntu时还遇到了例如开机后只有壁纸和鼠标,没有侧边栏,不能操作、关机时在关机界面卡死不能关机等问题,经过搜索和尝试发现是N卡驱动的问题,可以通过以下博客的内容解决(亲测成功):https://blog.csdn/xunan003/article/details/81665835

后记

本文终于结束了。如果这篇文章能够帮到正在苦苦挣扎的你,这将是我的荣幸。

这是我的第一篇博客,而且身为一个非计算机专业的计算机新手,对于ubuntu系统和引导文件这方面也没有特别深入的了解,仅仅是凭这两天不断失败的摸索和猜测才得以成功。这篇文章肯定还有各种各样知识或者排版上的错误、问题等。欢迎各路大神不吝赐教,也欢迎和我差不多水平的同学一起学习和探讨!

经此一“役”,深刻体会到了安装系统出错时,自己摸索的痛苦。只愿各位安装系统的小伙伴们马到成功,没机会搜到这篇博客

本文标签: 双系统 文件