UEFI模式装linux系统与原windows组成双系统

  • Post author:
  • Post category:linux





前言

其时装双系统这个词并不陌生了,就是系统共用一套硬件平台,跑两个或者多个系统;

这篇文章过后,相信你不是仅仅局限双系统了,你可以一套硬件系统运行多个系统了,只要该系统兼容你的硬件平台。

本篇以windows系统为例子,也是我们平时接触最多的一种,在这里抛砖引玉。水水文章。


需要上手操作的请直接看第二章节,第一章节都是基本原理



1、windows引导过程以及多系统引导原理



1.1 windows引导启动方式小解

目前主要的系统引导方式有两种:传统的

Legacy BIOS

和新型的

UEFI BIOS


Legacy BIOS

只能识别MBR格式磁盘,无法识别GPT格式磁盘;


UEFI BIOS

可同时识别MBR分区和GPT分区,所以UEFI下,MBR和GPT磁盘都可用于启动操作系统。不过由于微软限制,UEFI下使用Windows安装程序安装操作系统是只能将系统安装在GPT磁盘中。

简单的来讲在什么模式下安装的系统就得在什么模式下引导启动。

区别 Legacy UEFI
默认支持磁盘格式 MBR GPT
速度 更快
是否支持win7 支持 支持win7以上(一般不支持win7)



1.2 Legacy BIOS+MBR引导原理

引导过程:上电–>Legacy BIOS–>MBR–>DPT–>PBR–> Bootmgr(vista开始)/NTLDR–>BCD(vista开始)/boot.ini–>Winload.exe–>内核加载 –>windows vista/windows xp

  1. 上电,执行Legacy BIOS
  2. Legacy BIOS先要对CPU初始化,然后跳转到BIOS启动处进行POST自检,此过程如有严重错误,则电脑会用不同的报警声音提醒,接下来采用读中断的方式加载各种硬件,完成硬件初始化。

    读入MBR中的IPL。
  3. IPL确定分区表中的活动主分区(也叫激活主分区),并找到该分区的引导扇区(分区的第一个扇区)中的分区引导记录(PBR),载入PBR中的启动管理器(bootmgr.exe或NTLDR)。
  4. 启动管理器读取该分区根目录下boot文件夹里的启动设置文件(BCD或boot.ini),然后根据启动设置文件定位并加载二级引导载入程序winload.exe(位置:C:\Windows\system32\winload.exe)来加载OS内核。如果有多个系统,启动设置文件就会有多个启动项,相应的bootmgr也会提供选择菜单,然后则根据用户选择来决定加载哪个loader

启动管理器bootmgr和启动设置文件BCD合称为启动文件,IPL以及SPL(winload.exe)合称为载入程序。启动文件与载入程序合在一起叫做boot loader。

MBR磁盘分区格式下,只允许有一个分区是活动的,因此启动文件(bootmgr、BCD)必须存放在活动的主分区内,这样才能找到系统载入程序。

如果使用Windows的官方安装程序,会自动写入MBR,此外还会建一个隐藏的活动主分区,写入启动管理器和启动设置文件,并将自身的以及可识别的所有二级引导载入程序加入启动设置文件中(多系统引导原理2)。以后装入其它windows系统时,则会重写MBR和该分区。当然也可以不使用这个隐藏分区,而将bootmgr、BCD放在系统所在分区的PBR(PBR容量远远大于MBR)中,并设置系统分区为活动分区。但要注意的是:虽然可以在多个分区中安装系统,但只有一个分区是活动分区,能够引导系统,删除该分区,其他分区的系统也无法启动。



1.3 UEFI BIOS+GPT 引导原理

引导过程:上电–>UEFI–>GPT分区表–>EFI分区–>\efi\Microsoft\boot\bootmgfw.efi–>efi\Microsoft\BCD–>\Windows\system32\winload.efi

  • 开机,执行UEFI BIOS;
  • UEFI BIOS运行预加载环境先直接初始化CPU和内存,CPU和内存若有问题则直接黑屏,其后启动PXE采用枚举方式搜索各种硬件并加载驱动,完成硬件初始化。
  • 从FAT格式的EFI分区找到、读入、执行启动管理器(\efi\Microsoft\boot\bootmgfw.efi)。
  • 启动管理器导入EFI分区BCD文件(efi\Microsoft\BCD),然后根据其配置内容加载引导加载程序winload.efi(位置:C:\Windows\system32\winload.efi)来加载OS内核。如果BCD中有多个配置项,则会让用户选择要启动的系统。如果有多个系统,启动设置文件就会有多个启动项,相应的bootmgr也会提供选择菜单,然后则根据用户选择来决定加载哪个loader

需要注意的是:GPT磁盘格式下,windows系统的启动文件(bootmgfw.efi、BCD)是存放在一个FAT格式的分区里的,有些出厂预装win10系统的电脑下将该FAT分区称之为ESP分区或EFI分区。

可见,UEFI+GPT模式引导windows系统时,并不需要mbr主引导记录,也不需要活动分区,只需要你一个存放了引导启动文件的fat格式分区就可以了,这个fat分区当然也可以是U盘等外接USB设备了。所以我们在安装第一个系统时,需要由系统自动或手动建立一个EFI分区,用来存放启动文件,之后在其它分区安装系统时,会覆盖之前的启动文件(不是系统载入程序)。



1.4 多系统引导原理

每个分区都有一个boot sector,如果该分区有操作系统,操作系统会将份启动文件 写入到各自所在分区的boot sector中,也可以选择写入MBR中。

在 Linux 系统安装时,你可以选择将 boot loader 安装到 MBR 去,也可以选择不安装。 如果选择安装到 MBR 的话,那理论上你在 MBR 与 boot sector 都会保有一份boot loader 程序的。 至于 Windows 安装时,预设主动的将 MBR 与 boot sector 都装上一份boot loader!

因此安装多个系统时,MBR、活动分区会不断的被覆盖。但是启动管理程序能够识别其他分区引导扇区中的启动管理器,因此可以根据用户选择将控制权交给相应的启动管理器从而实现多重引导。但如果无法识别,则不能实现多系统。

Linux的启动管理器能够识别Windows的,但Windows的启动管理器则无法识别Linux的。又由于Windows在装系统时,默认覆盖MBR和活动分区。所以先装Linux再装windows,则无法引导Linux。而Linux则可以选择是否覆盖MBR分区和活动分区。如果不覆盖,则需要原来的MBR支持。

对GPT来说也类似,只不过覆盖的是EFI分区。



2、UEFI模式装双系统准备

这里我们进入主题,我的电脑是UEFI启动模式的,怎么看自己电脑的启动模式有很多种,这里给出常见的几种方法:

  1. 进入bios,在boot项中,boot mode为UEFI,则为uefi启动方式。(不同品牌电脑进bios方式不同,这个自行百度)
  2. win+r打开运行,输入cmd打开命令提示符,必须是管理员运行的cmd,输入bcdedit /enum {current}按回车执行,如果path路径是winload.efi ,则说明系统是通过UEFI模式启动。如果时winload.exe,则说明是传统的Legacy BIOS。
  3. win+r 输入msinfo32



2.1 使用工具刻录系统U盘

  1. 准备一个大于8G的U盘(3.0,2.0随意,速度差别而以)
  2. 准备Rufus工具,最新版已经更到3.13了,可以去官网下载,是免费的。

    rufus官网
  3. 准备你的linux镜像,这里我准备的是RHEL8.2的版本,你可以根据自己需求选择

在这里插入图片描述


tips


软碟通是收费软件,提供试用。rufus 是免费软件。

如果是制作 Windows 启动盘,软碟通和 rufus 没有很大的区别。但是如果是制作 Linux 的启动盘。我建议不要使用软碟通,建议使用 rufus。



2.2 windows下进入磁盘管理为linux系统分配一些空间

1.右击 我的电脑→管理

在这里插入图片描述

2. 把有足够空间的盘压缩一部分出来给linux,我这里压缩了150G(根据你自己需求来)

在这里插入图片描述

这里准备工作全部完成,接下来就是安装过程



3、安装过程



3.1 安装linux系统

  1. 插上启动u盘,进入bios,选择从u盘启动,这里以7.6的图为例,道理一样。

    在这里插入图片描述

  2. 剩余操作部分请看另一篇博客的第一章节,图文非常详细,这里不需要再压缩母盘了

    红帽7或8安装过程

    ,从上1.所示图位置开始操作。



3.2 登陆linux系统并设置引导

这里不设置默认是先启动linux,若想让windws在前面默认,请看这里

 1. 使用root用户的登录系统
 2. vim /boot/grub2/grub.cfg 
		### BEGIN /etc/grub.d/30_os-prober ###(大致在164行)加入以下内容
		menuentry 'Windows 10'{
       set root=(hd0,1)
		chainloader +1
		}                                               ##设置完后默认是先登陆linux系统
	 说明:set root=(hd0,1) 其中 hd0 表示硬盘,1表示C盘 ,我的win10装在C盘,它是sda1
	 
 3. 保存重启
4. 设置默认登陆win10系统(视自己情况而定)
		grub2-editenv list                    ##验证默认启动项(默认是Redhat8.2)
		grub2-set-default 'Windows 10'        ##设置默认启动项为win10
		grub2-editenv list                    ##验证默认启动项(显示以下内容修改成功)
			saved_entry=Windows 10


到这里,本篇文章结束了,附录是我自己装机配置,为了以后实验作准备的,仅供参阅



附录(RHEL8.2装机配置)



配置yum仓库(本地, 网络 ,第三方)


Linux基础之系统软件管理



配置网络(桥网络 ,多网段,路由)

[root@haojin network-scripts]# cat ifcfg-br0

DEVICE=br0

NAME=br0

ONBOOT=yes

BOOTPROTO=none

IPADDR1=192.168.1.200

NETMASK1=255.255.255.0

IPADDR2=172.25.254.200

NETMASK2=255.255.255.0

IPADDR3=172.25.200.250

NETMASK3=255.255.255.0

TYPE=Bridge


linux下的网络部署(RHEL8)



安装常用软件(qq , chrome , Flameshot )

dnf install -y linuxqq flameshot chrome



配置本地dns解析

这里为了以后使用虚拟机做的映射

[root@haojin ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


172.25.200.250 haha(真机)

172.25.200.1   server1
172.25.200.2   server2
172.25.200.3   server3
172.25.200.4   server4
172.25.200.5   server5
172.25.200.6   server6
172.25.200.7   server7
172.25.200.8   server8
172.25.200.9   server9
172.25.200.10  server10
172.25.200.11  server11
172.25.200.12  server12
172.25.200.13  server13
172.25.200.14  server14
172.25.200.15  server15



安装Kvm,封装完美7.6母盘(无图形安装,命令补齐工具 ,lftp ,net-tools ,本地解析 ,压缩)


红帽7或8安装过程



版权声明:本文为weixin_41191813原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。