Windows下设置Ubuntu引导项

  最近在进行一些实验环境的配置,最终通过双系统实现了多系统的管理,而不仅限于虚拟机的方式。以此方式成功安装了Windows8.1 Pro和Windows 10,原文在此

  在此基础上进一步安装Ubuntu16.04。鉴于现如今对于安装系统的优化已经较为成熟,安装过程较为简单或资料充足,所以主要的问题集中在使用Windows自带的引导过程增加对Ubuntu16.04的引导。

  被网上各种各样的碎片文章和内容淹没,所以在此记录了解到的信息,介绍启动引导的基本原理,并给出解决问题的方法(解决方法在最文章最后)。

  查找的一些有用的资料:Windows8贴吧中一篇Windows引导过程简介,关于linux开机引导过程linux下的开机启动流程,修改BCD配置文件的bcdedit使用指导其他,有关UEFI的问题的UEFI启动解析,Ubuntu论坛中的置顶问题

  

  1.引导方式的选择

  在安装引导的过程中有两种选项:linux下通过GRUB引导Windows下通过自带启动器引导。

  前者操作简单,可以在linux的安装过程中进行设置,问题在于若linux只是当前系统下的一个辅助操作系统而不是主要使用系统,则开机过程会较为缓慢,而且若后续linux系统出现问题或被删除,会影响其他Windows系统的引导,存在潜在的问题(当然若是使用linux为主要系统,则使用其默认的引导是划算的)。

  这里选择的是通过Windows自带的启动器对安装在新建分区的linux系统进行引导。

  2.引导原理的介绍

  Windows下的系统引导方式随着系统版本的变化有着差异,前面链接的资料有一定介绍。这里笔者的设置环境为 Win8.1 中文版。

  现有的Windows引导方式主要有两种:Legacy + MBR 和 UEFI + GPT 方式。Legacy BIOS无法识别GPT分区表格式,所以也没有LegacyBIOS+GPT组合方式;UEFI BIOS可同时识别MBR分区和GPT分区,所以UEFI下,MBR和GPT磁盘都可用于启动操作系统。不过由于微软限制,UEFI下使用Windows安装程序安装操作系统是只能将系统安装在GPT磁盘中。现对其引导原理进行一定介绍。

  

  名词解释:

  MBR : Master Boot Record,主引导记录。主要构成为引导加载某一操作系统。

  主引导扇区 : 包含MBR的扇区,一般也简称MBR,一般位于存储设备的第一个扇区。包含主引导记录(446bytes)、磁盘分区表(16bytes*4)和结束标志(0x55aa)。引自百度百科

  活动分区 : 是计算机系统分区,启动操作系统的文件都装在这个分区,Windows 系统下一般被默认为C盘。

  

  电脑开机后,开始启动BIOS,开始BIOS自检,通过自检后,bios找到硬盘上的主引导记录MBR。

  WinXP:

  读取并运行主引导记录(Master Boot Record,MBR) --> 读入活动分区的引导扇区 --> NTLDR装入并初始化,将系统有实模式转化为平滑模式 --> 运行一个迷你文件系统驱动(支持FAT和NTFS格式) --> NTLDR读入boot.ini文件,根据其内容生成开机选项,对开机系统进行选择,并加载所选择系统的加载文件。来自百度百科Blog

Win7:

读取MBR中的硬盘分区表DPT --> 寻找活动分区,找到其中的引导记录PBR --> PBR搜索活动区中的启动管理器bootmgr(相当于xp里的ntldr) --> Bootmgr寻找活动分区中的boot文件夹中的BCD文件(启动配置数据,相当于xp里的boot.ini文件) ->根据BCD文件在显示器上显示多操作系统选择画面 --> 根据选择的系统寻找对应的盘里的windows\system32\winload.exe文件,并且将控制权交给winload.exe

  以上两个系统均是传统的Legacy+MBR的引导方式,主要流程为 Legacy BIOS -->读取主引导扇区 --> 找到活动分区,并加载引导程序NTLDR/Bootmgr --> 根据配置文件boot.ini/BCD生成多系统引导的菜单 --> 根据选择的系统和配置文件中存储的路径加载对应的系统。(即所谓的链式装载,主引导记录是为了找到系统所在的分区,即活动分区)

  

  对于UEFI的启动,UEFI+GPT的主要流程为 开机通电自检 --> 根据引导顺序扫描存储设备,读取FAT格式的EFI系统分区 -->执行启动文件(笔者为Bootx64.efi)--> 在此扇区中加载启动启动管理器和读取配置的BCD文件 --> 进行操作系统的选择和对应文件的加载。

   主要特点:

  1.没有读取MBR

  2.系统引导所需要的引导程序与配置文件放置在额外划分出来的FAT格式的磁盘分区上。

  3.设备通过上述分区中的bootmgfw.efi文件来导入BCD文件,用户选择系统后 BCD文件根据自身的配置内容加载系统引导文件winload.efi(对Windows而言)。

  

  借助linux强大的文件系统操作功能,可以方便的查看系统EFI分区的结构。通过挂载EFI系统分区到指定文件夹,可以进行查看。

  图示为笔者华硕笔记本Win8.1中文版的EFI分区(或称ESP分区,即EFI System Partition )文件结构图

  

  分析:

  1.Bootx64.efi是计算机默认的启动方式(Bios中指定)。即计算机总是通过Bootx64.efi来进行开机引导。这里的Bootx64.efi只是一个文件名,任何有效的efi文件均可以改为此名并用作引导;

  2.Bootmgr.efi是Windows默认的启动方式。即Windows总是通过Bootmgr.efi来进行引导。当Bootx64.efi指向Bootmgr.efi时(或者说在这种情况下,Bootx64.efi文件实际是由Bootmgr.efi改名而来),就启动了Windows的引导流程,并通过BCD文件生成开机选项菜单;

     3.解决方案

  针对上述的引导流程记录,可以知道不论是传统的Legacy+MBR或者是UEFI+GPT格式,主要过程都是通过特定的启动管理器读取配置文件从而生成系统选择界面,并在选择系统后对特定系统文件进行加载。

  网上的解决方法有:

  1.使用Ubuntu下的Boot-repair进行启动修复,具体可见Ubuntu帮助但该方法是使用grub对系统进行引导。

  2.使用Windows自带的引导程序对linux进行引导,即将Ubuntu的相关引导信息加入存放在EFI分区中的配置文件中,从而通过Windows的引导程序进行引导。方法主要需要解决两个问题:修改Win8.1下的BCD配置文件获得对应的引导文件路径。在Windows NT之后Windows提供了自带的工具bcdedit以供进行开机启动设置操作,部分操作指令在文章开始的链接中有介绍。或者可以直接通过图形界面工具easyBCD进行配置。

  若自行手动配置,则需要新建一个启动引导项,对相应的引导文件所在分区和路径、引导描述等进行设置。图示为笔者设备双系统Win10的相关信息。

  

  对于linux而言,无论使用easyBCD或者bcdedit,均需要建立一个 实模式启动扇区 的启动项,并给出相应的引导文件路径。若使用easyBCD,可以通过图形界面自动生成引导。若使用bcdedit,则需要自行生成配置文件。借助安装有linux安装程序的U盘,选择试用linux,找到安装linux启动模块的设备名,如/dev/sda8等,使用dd命令获得所需的文件。

  dd if=/dev/sdax of=ubuntu.mbr bs=512 count=1    //指令从指定文件/dev/sdax读取数据,读取512个字节,并输出到ubuntu.mbr文件中,从而得到linux启动的mbr

  再将该文件放置到默认开机Windows系统的活动分区,使用bcdedit进行相关信息的设置即可。

  上述的easyBCD或bcdedit的方式,笔者均做过尝试但并未成功。个人认为这应该是最符合自身需求的方式,但失败原因不详,望能得到指点。

  3.Ubuntu12.04以及后续版本引入了对EFI模式的支持,所以可以将Ubuntu的引导程序GRUB安装在设备的EFI分区中(原系统Win8.1在安装时会划分,可以在磁盘管理中定位),此操作会在EFI分区中生成引导Ubuntu的文件,从而可以引导Ubuntu,原帖

  在笔者将Ubuntu安装至EFI分区后,其中的目录内容发生了改变,在EFI文件夹下新增了ubuntu的引导程序。

  

  此方法的问题在于Ubuntu和Windows使用两个不同的引导系统,实际是相当于设置默认的开机引导bootx64.efi/grubx64.efi从而启动相应的操作系统。这样两个系统之间无法进行相互引导,只能在BIOS中设置引导顺序,选择某一个系统。这种方法相当于将Linux启动引导安装在EFI分区,从而多出一个启动文件grubx64.efi。通过选择grubx64.efi/bootx64.efi对不同的系统进行引导。

  在第二种方法失败后,笔者退而求其次的选择了第三种方法并成功安装

  

  

  

时间: 2024-08-18 07:26:38

Windows下设置Ubuntu引导项的相关文章

Windows 7系统下删除开机引导项的方法

Windows 7系统下删除开机引导项的方法: 1.使用管理员权限运行cmd,在命令行窗口使用  bcdedit 回车 2.查找description为你想删除的段,看对应的标识符是多少, 然后使用 bcdedit  /f  /delete 标识符 示例: bcdedit  /f  /delete {fa817679-23c9-11e1-bcbd-a9093a3d5fb5} 3. win7系统有一个启动管理器 bootmgr 它有一个状态displaybootmenu 默认是no 如果做过多系统

windows下用easybcd引导ubuntu出现grub的解决方案

linux安装时吧boot挂在到单独的分区 如果grub覆盖了mbr的话可以用pe工具箱修复windows的mbr linux引导项选grub 驱动器选安装时挂载了/boot的分区 添加条目 启动即可 注:easybcd是通过创建.mbr文件来实现多系统引导的(熟悉数据恢复的同学可以自己研究下这个文件) 具体原理可以参考http://www.cnblogs.com/non-clockwork-cheng/p/6661234.html 其他可能遇到的问题:点击启动项后闪退(检查一下你的驱动器选项是

双系统下恢复Ubuntu引导菜单

引言 使用双系统的时候,我们经常重装Windows!那么有没有一种办法:只重装Windows而不重装Ubuntu呢? 在使用Win XP/Ubuntu双系统时,这个问题很好解决!但是在使用Win7(包含Vista)以上系统的时候,就比较难了! 因为微软更改了OS启动机制!详情请看bootmgr和Bcdedit(百度百科) 使用工具:EasyBCD 一.设置Win7引导Ubuntu 1. 增加Win7引导项 2. 设置要引导OS参数 启动器类型和所在磁盘 选择GRUB 2 选择Ubuntu系统分区

纯windows下制作变色龙引导安装U盘教程

原创教程:纯windows下制作变色龙引导安装U盘教程 支持Mavericks和Yosemite 支持白苹果 目标:windows下制作带 Chamelon变色龙引导的黑苹果安装U盘,支持PC机引导安装,经测试同样支持真苹果安装. 制作工具:1.bootice1.32.windows版变色龙 wowpc.iso 2391支持 10.10引导(可以随时更新)3.懒人版安装镜像 Mavericks_Install_10.9.4.cdr(可以选择其它版本)硬件需要:大于或等于8G U盘一个.标注:以最

windows下设置JupyterNotebook默认目录

目录 windows下设置JupyterNotebook默认目录 生成配置文件 设置默认工作目录 设置快捷方式中的目标与起始位置 直接修改anaconda中的相关配置文件 windows下设置JupyterNotebook默认目录 生成配置文件 假设你己经在windows环境变量中设置好了jupyter notebook,则打开cmd,在cmd中输入jupyter notebook --generate-config运行,如下图: 生成jupyter notebook的配置文件,路径也会显示出来

在Windows下设置环境变量 运行mysql程序变得更容易

在Windows下设置环境变量,点开始菜单,右键单击我的电脑--属性--高级--环境变量 可以看到PATH的变量是这样的: C:\WINDOWS;C:\WINDOWS\COMMAND 为了让运行mysql程序变得更容易,改变它的值指向程序安装目录,添加一个目录D:\Program Files\wamp\bin\mysql\mysql5.0.51b\bin,结果是 D:\Program Files\wamp\bin\mysql\mysql5.0.51b\bin;C:\WINDOWS;C:\WIND

Windows 下设置 tramp

Windows 下设置 tramp 以前一直以为 tramp 在 windows 下是基本无法工作,或者需要很费劲才能配置好.今天发现通过 puttygen, plink 这些工具(都是 putty 那一套)配置起来其实还挺方便的. 1 通过 plink 连接 linux 将 plink 放到你的 path 下,然后: C-x C-f /plink:[email protected]:~/ 居然就可以了! 2 不要让我每次都输入密码啊 像 linux 下的话,如果用 tramp ssh meth

Windows下设置Oracle10g的环境变量

Windows下设置Oracle10g的环境变量 Windows安装Oracle10g,每次启动em服务,也就是在cmd命令行窗口输入emctl start dbconsole,总是提示"Environment variable ORACLE_SID not defined.Please define it."如下图所示: 后来查阅Oracle官方文档得知,虽然Oracle安装成功了,但是环境变量没有定义,于是每次启动em都会提示定义ORACLE_SID环境变量.Oracle的环境变量

windows删除多余启动引导项

方法1: 按快捷键win+r,打开运行界面,输入msconfig. 点击确定,进入系统配置,选择引导选项卡,如图: 选中你不需要的启动项,点击下面的删除按钮即可.删除完成之后点击确定,重启计算机就可以了.多余的启动项就没有了只有你默认使用的了.我已经把多余的删除了,所以只显示默认的启动项. 方法2 利用第三方工具,禁止多余的启动引导,百度下载一个EasyBCD多系统启动器,安装(这里不再讲述如何下载安装软件).打开软件,如图: 选择左侧的“编辑引导菜单”导航菜单. 选中你想要编辑的引导启动项,删