操作系统引导详细过程
转自:https://blog.csdn.net/lijie45655/article/details/89366372
就直观而言,我们所见到计算机启动的过程是:按下电脑开机键,系统在黑色的屏幕下打印出一些英文语句、然后进入进度条状态,最后到登陆界面,这样操作系统的引导过程就算完成了。我们不知道的是计算机本身经历一系列复杂的引导过程,才最终出现在我们面前。假如系统引导不成功,挂了,哇,好尴尬。
接触计算机时间长的人,都有过安装操作系统的经历,无非是找个系统安装盘(iso)丢到光驱里、弄个U盘启动程序插入usb接口,也或者装Windows操作系统的时候,弄个gost备份镜像,用gost软件考到C盘里,然后就是漫长的等待。假如安装过程中,就是不进入登陆界面,又一顿尴尬。
一 、系统引导
我们先回到最初的状态。我们需要知道的是,在计算机中,操作系统是一种程序,程序都是以数据(操作系统也不例外)存在的,数据又是存在于硬盘中的。而硬盘通常分为几个区,一个计算机中又有几种存储介质(包括硬盘),计算机通过CPU来控制运行的。反过来说,在你安装完一个操作系统之后(就是把光盘镜像的文件或者GHOST文件丢到主分区)或者开机后,需要让计算机在开机的时候能识别电脑中的系统,这个过程就是系统引导,计算机系统引导的过程就是在保证硬件设备正常后,计算机利用CPU运行特定程序,通过程序识别硬盘,识别硬盘分区,识别硬盘分区上的操作系统,最后又通过程序启动操作系统,一环扣一环的完成上述过程,在这环环紧扣的过程中,有一环吊链了,我们都是看不到最后的操作系统的。比如:计算机硬件坏了、程序识别不了硬盘,程序识别不了有操作系统的分区,程序不能启动操作系统初始化程序,都会导致操作系统不能正常启动。了解操作系统引导机制,或许能帮助我们解决以上问题。而在上述引导过程中,计算机本身又引入了一些中间程序或数据,如boot程序(入口程序),bois程序(操作系统主引导程序),init程序(操作系统初始化程序),Boot Sequence(存储介质队列),MBR表(主引导记录表),PBR(硬盘分区记录表),EBR(扩展分区引导记录表)、文件系统等等。
现在操作系统引导方式主要有两种:
1、bois引导:开机-->BIOS启动MBR-->MBR启动激活分区PBR-->启动bootmgr-->读取BCD-->启动对应的系统
过程:①电脑开机,BIOS找到第一个硬盘 ②MBR在硬盘开头几百k以内,BIOS启动到硬盘上的MBR(主引导记录) ③PBR在分区开头的几百k以内,MBR启动当前磁盘激活分区的PBR(分区引导记录) ④VISTA以上的PBR启动当前分区上的BOOTMGR,找不到则启动NTLDR ⑤读取当前分区根目录下\boot\BCD文件 ⑥启动BCD里对应菜单的系统。
2、 UEFI引导:
过程:①电脑开机,BIOS找到第一个硬盘 ②BIOS搜索到FAT/FAT32分区上的\EFI\BOOT\BOOTx64.efi(计算机默认引导)或\efi\Microsoft\boot\bootmgrfw.efi(Windows默认引导),BIOS内会有个EFPROM,如果有多个efi文件,会记录efi文件的启动顺序。这个顺序可以在BIOS里修改,也可以用工具修改,EFI文件一般在ESP分区下,分区格式只能是FAT16或FAT32 ③读取\efi\Microsoft\boot\BCD ④启动BCD里对应菜单的系统。
什么是BOOT,什么是BIOS,什么是UEFI
BOOT
BOOT其实是你按开机键之后,在电脑微软操作系统运行之前就自动运行的一段小程序。表象上就是windows引导画面之前那些黑屏蓝屏的英文那个阶段就是BOOT了。通过这段小程序,它就可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
BIOS
BIOS它其实也是在电脑里的系统运行之前,但是BOOT出现后加载运行的一个预启动的操作环境程序,严格来算是软件。是一组固化到计算机内主板上一个ROM芯片上的程序。它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。0xFFFF0000地址处指向BIOS,BIOS的F7C00地址指向MBR。BIOS扫描Boot Sequence(存储介质队列)时,如果识别到某块硬盘的第一个扇区最后两个字节为55 AA时,将其挂在到地址7C00处。(0xFFFF0000、F7C00、7C00、55 AA、0x80都是在硬件中固定好的,所有硬件厂商都遵循这个约定,即所谓的魔数)
UEFI
UEFI它其实和BIOS是同一个性质的东西,同一种程序,是随着发展出现的BIOS升级版,被看做是有近20多年历史的BIOS的继任者。全称“统一的可扩展固件接口,它也是在电脑里微软系统运行之前,但是BOOT出现后加载运行的一个预启动操作环境程序。因为硬件发展迅速,传统式(Legacy)BIOS成为进步的包袱,现在已发展出最新的UEFI(UnifiedExtensibleFirmwareInterface)可扩展固件接口。但造化弄人的是,理论上说是比BIOS更先进的UEFI,却还是诸多支持不足,往往很多是UEFI启动电脑,到头来还是切换回BIOS。这也是令人疑惑的所在,不是说BIOS有病毒吗,不是说UEFI比BIOS好吗?为啥我按住DEL键进入的还是BIOS。这其中博弈的过程,是商业的、技术的各种妥协,我们已无从评论。
传统的BIOS引导安装的电脑,分区表的格式是MBR的,装机基本是BIOS引导+MBR分区的格式。而UEFI引导安装的电脑,硬盘分区表是GPT格式的,操作系统安装后它是运行在UEFI引导+GPT分区的格式基础上。从硬盘分区上来说UEFI和BIOS就是两个完全不同的分区表格式了,所以往往用GHOST备份出来的系统,你再重装还原,最好是原BIOS的装在BIOS引导方式的电脑上,原UEFI的装在UEFI的电脑上。不然很容易出问题。
硬盘分区格式为MBR格式,启动模式应该为Legacy;
硬盘分区格式为GUID(GPT)格式,启动模式应该为UEFI。
开启UEFI模式或Legacy模式:
按住DEL键进入BIOS,在“启动(Startup)”选项卡中,可选择UEFI启动:
Auto(自动):自动按照启动设备列表中的顺序启动,优先采用UEFI方式;
UEFI only(仅UEFI):只选择具备UEFI启动条件的设备启动;
Legacy only(仅Legacy):只选择具备Legacy启动条件的设备启动;
(注:假如说你的主板很老,你只能选择BIOS引导,一般来说现在的计算机都兼容BIOS和UEFI,当然也有一进入界面就是UEFI的,如果你原生操作系统引导-是UEFI,你安装新的操作系统用BIOS引导,恭喜你,你看不到操作系统的,支持BIOS的u盘启动或者GOST镜像还原皆如此类)
以x86为例,BIOS引导过程如下:
1、激活cpu:计算机开机,激活CPU,激活的CPU读取ROM里的boot,将内存指令寄存器设置为:0xFFFF0000,表示CPU开始从0xFFFF0000这个内存中取出一条指令执行,通常在0xFFFF0000处是一条地址转跳指令,转向BIOS的入口。
2、加电自检:CUP开启BIOS程序。首先执行BIOS自我检查,确认计算机硬件能否满足运行的基本硬件条件,这叫做”硬件自检”(Power-On Self-Test),缩写为POST。如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。 如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。
3、加载带有操作系统的硬盘:硬件自检完成后,BIOS开始读取Boot Sequence(设置外部存储设备的启动顺序,排在前面的设备就是优先转交控制权的设备),根据Boot Sequence中的顺序,按照"启动顺序",把控制权转交给排在第一位的储存设备。然后计算机将该存储设备引导扇区的内容加载到内存中。计算机本身并不知道谁是系统硬盘,谁不是系统硬盘,通过遍历的方式,寻找带有系统硬盘标识符(MBR,物理上也叫引导扇区)的系统硬盘。
4、加载主引导记录(MBR):硬盘以特定的标识符区分引导硬盘和非引导硬盘。在BIOS将所检查外部存储设备的第一个扇区载入内存后,如果发现一个扇区的最后两个字节是“55 AA”,那么这就是一个引导扇区(MBR),这个外部存储设备也就是一块可引导盘,计算机将控制权交给主引导记录。如果最后两个字节不是“55 AA”,那么BIOS就检查下一个外部存储设备。如果没有其他启动介质,则显示 ”No ROM BASIC” ,然后死机。主引导记录主要作用是,告诉计算机到硬盘的哪个主分区去找操作系统。
5、加载硬盘分区表:主引导记录在获得控制权后,需要找出哪个硬盘分区是含有操作系统的,于是开始扫描硬盘分区表,进而识别含有操作系统的硬盘分区(活动分区)。其中,MBR包含硬盘分区表,硬盘分区表以特定的标识符区分活动主分区和非活动主分区。
以上表达的意思就是硬盘分区表主要标识和寻找哪个是有操作系统的分区(活动分区),哪个不是操作系统的分区。
6、加载硬盘活动分区:每个区可以安装不同的操作系统,”主引导记录”因此必须知道将控制权转交给哪个区。如果分区首字节字节为0x80,就表示该主分区是活动分区(有操作系统的分区),控制权要转交给这个分区。主引导记录在找到硬盘活动分区后,开始加载硬盘活动分区。
7、加载分区引导记录(PBR):继续遍历硬盘活动分区,计算机会读取活动分区的第一个扇区。这个扇区叫做”卷引导记录”(Volume Boot Record,缩写为VBR,也可称为分区引导记录,Partition Boot Record,缩写为PBR)。分区引导记录标识了用于引导操作系统的程序位置。
分区引导记录的主要作用是,寻找激活分区根目录下的NTLDR(XP)、bootmgr(Win7 above)、grldr(Grub)、btldr.mbr(BootLink)等可用于引导操作系统的程序(启动管理器)。
8、加载启动管理器(boot loader):分区引导记录搜索到活动分区中的启动管理器,计算机加载启动管理器,将控制权交给”启动管理器。
9、加载操作系统初始化程序:启动管理器寻找激活分区中的启动配置数据(如:Win7中的BCD文件、XP中的boot.ini),根据启动配置数据,在显示器上显示多操作系统选择画面,选择相应的操作系统,控制权交给操作系统初始化程序(init())。
10、加载操作系统:操作系统初始化程序获取控制权后,加载操作系统内核、硬件、服务等,之后加载桌面等信息,从而启动整个操作系统。
11、操作系统启动之后,操作系统内核、应用程序库、服务、应用程序开始工作。。。。。。。。
二、 系统引导的一些术语
梳理一下操作系统引导过程的一些概念:
什么是MBR,什么是DPT,什么是PBR,什么是扩展分区,什么是逻辑分区,什么是boot,什么是GPT。
MBR:
MBR,英文“Master Boot Record”,中文“主引导记录”MBR是IBM公司早年间提出的。它为存储设备的第一个扇区(这个扇区包含了已安装的操作系统的启动加载器和驱动器的逻辑分区信息),位于整个硬盘的0磁道0柱面1扇区。在512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志,这个整体构成了硬盘的主引导扇区。计算机读取MBR的512字节内容,如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给”启动顺序”中的下一个设备。
MBR分区表结构
MBR的主要作用是告诉计算机到存储设备的哪个位置去找操作系统对应的硬盘主分区。它主要由三部分组成:
- 第1-446字节:调用操作系统的机器码。
- 第447-510字节:硬盘分区表(Disk Partition Table,DPT),将硬盘分成若干分区。
- 第511-512字节:主引导记录签名(0x55和0xAA)。
主引导记录完成一下工作:
(1)扫描硬盘分区表查找活动分区;
(2)寻找活动分区的起始扇区;
(3)将活动分区的引导扇区读到内存;
(4)执行引导扇区的运行代码。
DPT
MBR中有个表叫硬盘分区表,用来指向硬盘的各个分区。硬盘分区表长度只有64个字节,里面分成4项,每项16个字节,一个硬盘最多只能分四个一级分区,这些一级分区叫做”主分区”。每个区可以安装不同的操作系统,”主引导记录”因此必须知道将控制权转交给哪个区。硬盘分区表主要用于标识操作系统所在的硬盘主分区。
硬盘分区表记录的每个主分区16个字节,由6个部分组成:
- 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
- 第2-4个字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等等)。
- 第5个字节:主分区类型。
- 第6-8个字节:主分区最后一个扇区的物理位置。
- 第9-12字节:该主分区第一个扇区的逻辑地址。
- 第13-16字节:主分区的扇区总数。
最后的四个字节("主分区的扇区总数"),决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的空间最大也不超过2TB,这也是win7以下版本的操作系统只能识别小于2TB硬盘的原因。如果想使用更大的硬盘,只有2个方法:一是提高每个扇区的字节数,二是增加扇区总数。
扩展分区和逻辑分区
随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。
所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)。
计算机先读取扩展分区的第一个扇区,叫做”扩展引导记录”(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。
计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。
PBR
PBR(Partition Boot Record 分区引导记录):每个分区都有分区引导记录,分区开头几kb数据,一般也是0.5kb,内容一般是分区参数以及一小段引导程序。特别的,对于Windows nt6的分区引导记录,程序核心内容就是搜索当前分区下bootmgr,如果没有,则搜索ntldr,然后启动它。分区引导记录的主要作用是,寻找激活分区根目录下可用于引导操作系统的程序(启动管理器)。
GPT:
GPT的意思是GUID Partition Table,即“全局唯一标识磁盘分区表”。他是另外一种更加先进新颖的磁盘组织方式,一种使用UEFI启动的磁盘组织方式, GPT和UEFI BIOS相辅相成,鉴于MBR的磁盘容量和分区数量已经不能满足硬件发展的需求,GPT首要的任务就是突破了2.2T分区的限制,最大支持18EB的分区。最开始是为了更好的兼容性,后来因为其更大的支持内存(mbr分区最多支持2T的磁盘),更多的兼容而被广泛使用,特别是苹果的MAC系统全部使用gpt分区。gpt不再有分区的概念,所有CDEF盘都在一段信息中存储。可以简单的理解为更先进但是使用不够广泛的技术。在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。因为兼容问题,gpt其实在引导的最开始部分也有一段mbr引导,也叫做“保护引导”,为了防止设备不支持uefi。
GPT分区表结构:
在GTP磁盘的第一个数据块中同样有一个与MBR(主引导记录)类似的标记,叫做PMBR,GPT硬盘中存在PMBR(Protective MBR)分区表和GPT分区表。在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR也叫做保护性MBR(Protective MBR)。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。
无论微软的c、d、e或者linux磁盘挂载,或许都绕不开文件系统这个术语,你的操作系统都是靠文件系统支撑起来的。有文件系统才能正确的找到相应磁盘对应的数据,才能使得后面的操作正常运转。
什么是文件系统?
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
文件系统分类:
Linux
Linux存在几十个文件系统类型:ext2,ext3,ext4,xfs,brtfs,zfs(man 5 fs可以取得全部文件系统的介绍)
不同文件系统采用不同的方法来管理磁盘空间,各有优劣;文件系统是具体到分区的,所以格式化针对的是分区,分区格式化是指采用指定的文件系统类型对分区空间进行登记、索引并建立相应的管理表格的过程。
- ext2具有极快的速度和极小的CPU占用率,可用于硬盘和移动存储设备
- ext3增加日志功能,可回溯追踪
- ext4日志式文件系统,支持1EB(1024*1024TB),最大单文件16TB,支持连续写入可减少文件碎片。rhel6默认文件系统
- xfs可以管理500T的硬盘。rhel7默认文件系统
- brtfs文件系统针对固态盘做优化,
- zfs更新?
windows
- FAT16:MS—DOS和win95采用的磁盘分区格式,采用16位的文件分配表,只支持2GB的磁盘分区,最大单文件2GB,且磁盘利用率低
- FAT32:(即Vfat)采用32位的文件分配表,支持最大分区128GB,最大文件4GB
- NTFS:支持最大分区2TB,最大文件2TB,安全性和稳定性非常好,不易出现文件碎片。
其他
- RAMFS:内存文件系统
- ISO 9660:光盘
- NFS:网络文件系统
- SMBAFS/CIFS:支持Samba协议的网络文件系统
- Linux swap:交换分区,用以提供虚拟内存。
三、总结
以Win7系统为例,整个操作系统引导过程如下:
1、电脑开机后,开始启动BIOS,开始BIOS自检。
2、通过自检后,bios找到硬盘上的主引导记录MBR.
3、MBR开始读取硬盘分区表DPT,找到活动分区,找到活动分区中的分区引导记录PBR,并且把控制权交给PBR.
4、PBR搜索活动区中的启动管理器bootmgr,找到启动管理器后,PBR把控制权交给bootmgr(相当于xp里的ntldr文件)。
5、Bootmgr寻找活动分区中的boot文件夹中的BCD文件(启动配置数据,相当于xp里的boot.ini文件)。
6、找到BCD后,Bootmgr首先从BCD 中读取启动管理器bootmgr菜单的语言版本信息,然后再调用BOOTMGR与相应语言的BOOTMGR.EXE.MUI (在boot文件夹对应语言文件夹中)组成相应语言的启动菜单,之后在显示器上显示多操作系统选择画面。
7、如果存在多个操作系统而且系统设置的等待时间不是0,那么屏幕就显示多个操作系统的选择界面。如果没有多系统,那么直接进入windows 7系统,不显示选择界面。
8、选择windows 7系统后,bootmgr就会读取BCD里win7系统所在的盘里的windows\system32\winload.exe文件,并且将控制权交给winload.exe。
9、Winload.exe加载windows7内核、硬件、服务等,之后加载桌面等信息,从而启动整个windows 7系统,直至执行login程序,跳出登录界面,等待用户输入用户名和密码。
10、windows 7系统启动文件系统,用于后续数据的存入、读出、修改等。
是不是很晕!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
GPT转MBR
一般情况下,我们使用Diskpart命令即可完成转换。
操作步骤如下:(注意:转换磁盘格式需要清空磁盘中的所有分区和数据,在操作前,请保存好磁盘中所有重要数据。)
1.使用Win7光盘或者U盘引导,进入系统安装界面。
2.按Shift + F10打开命令提示符。
3.输入"Diskpart"(不用输入引号,下同),并按回车,进入操作界面
4.输入:"list disk",查看磁盘信息。注意看磁盘容量来选择。图中465G的Disk 0是硬盘,3852M的Disk 1是用于Win7安装的U盘。
5.输入:"select disk 0",选择disk 0为当前操作的磁盘
6.输入:"Clean",清空当前磁盘分区。
7.输入:"convert mbr",转换为MBR分区。
8.操作完成,关闭此命令提示符窗口,继续按照正常的方法安装Win7系统即可。
扩展知识:convert命令的其它用法:
convert basic -将磁盘从动态转换为基本。
convert dynamic -将磁盘从基本转换为动态。
convert gpt -将磁盘从MBR转换为GPT。
convert mbr -将磁盘从GPT转换为MBR。
部分引用:https://blog.csdn.net/jonathan321/article/details/51987680
https://blog.csdn.net/qq_35038153/article/details/78440374