深圳市航顺芯片技术研发有限公司
直播中

闷~~

9年用户 786经验值
擅长:可编程逻辑
私信 关注
[问答]

Centos6的引导过程分为哪几个阶段呢

Centos6的引导过程分为哪几个阶段呢?这些阶段分别有哪些作用?

回帖(1)

徐丹

2021-10-19 16:40:05
  Centos6的引导过程
  一、硬件启动阶段
  
  BIOS(Basic input/output System)基本输入输出系统
  大致流程分为:打开电源 ——》 POST自检 ——》 bios逐一排查设备启动顺序 ——》 如果是硬盘启动,读取硬盘的MBR的BootLoader。
  按下电源以后,CPU第一条指令指向bios芯片(ROM只读存储器;一般情况为只读)中的bios程序载入到内存运行。程序运行识别检测各个硬件
  如果检测到硬件有问题时:
  硬件相关指示灯亮起(红、橙)
  屏蔽有问题的硬件继续进行下一步(将有问题的硬件所在槽位设置为disabled);如果达到临界点无法进行下一步会卡住
  BIOS程序自检完成后会加载CMOS芯片中(RAM随机存储器)的BIOS设置信息(时间、密码、启动项等)
  Boot Sequence(BIOS)为用户设定启动顺序由哪个设备启动计算机,如果硬盘、光驱、USB、U盘等,按照设定的顺序,遍历设备的第0柱面的第0磁道第1个扇区(MBR)。如果发现这个扇区以0XAA55结束,则认为它是一个可引导扇区,进行下一阶段,否则继续遍历,如果都没有BIOS提示没有找到系统。
  MBR介绍
  
  MBR(Main Boot Record),是磁盘的0柱面。0磁道,1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。
  它由三部分组成:主引导程序(BootLoader)、磁盘分区表DPT(Disk Partition table)、磁盘有效标识(55AA)。
  注:磁盘默认一个扇区512字节。
  
  主引导程序446字节。
  其中包含了硬盘的一系列参数和一端引导程序,其中硬盘引导程序的主要作用是检查分区表是否正确并且在系统系统硬件完成自检后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存
  加载磁盘的0柱面。0磁道,1扇区中前512字节到内存地址00000:7c00中
  如主引导记录: 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00。 在这里我们可以看到,最前面的“80”是一个分区的激活标志,表示系统可引导;“01 01 00”表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;“0B”表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);“FE BF FC”表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;“3F 00 00 00”表示首扇区的相对扇区号为63;“7E 86 BB 00”表示总扇区数为12289622。
  磁盘分区表DPT64字节
  每个bai分区项占用16个字节du,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容。
  磁盘有效标识2字节
  固定为0xAA55或0x55AA,这取决于处理器类型 ,如果是小端模式处理器 (如Intel系列),则该值为0xAA55;如果是大端模式处理器 (如Motorola6800),则该值为0x55AA
  二、GRUB引导阶段
  GRUB是一个启动管理器,和Linux没有强制的关系,当然也可以用GRUB启动Windows。可以通过rpm -qi grub命令查看grub的版本。
  
  1、Stage1阶段
  这一阶段其实执行的就是系统安装时预先写入到MBR的Bootloader程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。
  其实Linux的loader为stage1那个文件刚好512字节,我们在安装Linux的时候,系统会把stage1文件安装到所在分区的boot sector中,同时默认Linux启动的话,也需要把stage1中的引导代码安装到MBR中的boot loader中。该文件太小,能完成的功能有限
  2、Stage1.5阶段
  一阶段是Stage1阶段和Stage2阶段的桥梁,具有识别分区文件系统的能力,此后grub程序便有能力去访问/boot/grub/stage2,并将其读取到内存执行。
  GRUB在不依赖Linux内核的情况下具有读取配置文件与内核映像的能力”。GRUB的内置文件系统其实是依靠stage1_5那些文件定义的,而且有不同文件系统的stage1_5。我们在安装Linux的时候会把stage1_5相关文件放到0磁道1-62扇区中(一个磁道63个扇区,划分分区是从1磁道开始的,除了MBR外,所以会有62个扇区作为保留扇区),用于定义grub的文件系统。
  3、Stage2阶段
  这一阶段会(初始化本阶段需要用到的硬件,检测系统的内存映像,)解析grub的配置文件/boot/grub/grub.cnf、menu.list等,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核
  
  BootLoader
  不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。
  CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。
  boot loader怎么能够做到引导的就是我们想要的操作系统呢?这么多不同的功能单靠一个446字节的boot loader是远远不够的。因此必须弄一个相对应的程序来处理各自对应的操作系统核心文件,这个程序就是操作系统的loader(注意不是MBR中的boot loader),这样一来boot loader只需要将控制权交给对应操作系统的loader,让它负责去启动操作系统就行了。
  
  我们知道一个硬盘的每个分区的第一个扇区叫做boot sector,这个扇区存放的就是操作系统的loader,所以我们常说一个分区只能安装一个操作系统,如上图,第一个分区的boot sector存放着windows的loader,第二个分区放着Linux的loader,第三个第四个由于没有安装操作系统所以空着。
  Boot loader的功能:
  提供选单就是给用户提供一张选项单,让用户选择进入哪个操作系统;
  提供选择菜单
  读取内核文件
  转交给其他loader
  读取内核文件,我们知道系统会有一个默认启动的操作系统,这个操作系统的loader在所在分区的boot sector有一份,除此之外,也会将这个默认启动的操作系统的loader复制一份到MBR的boot loader中,这样一来MBR就会直接读取boot loader中的loader了,然后就是启动默认的操作系统;
  安装windows操作系统的时候,windows会主动复制一份自己的loader到MBR中的boot loader中,这种操作在linux下不会。所以我们安装多重操作系统的时候要求先安装windows,然后再安装Linux;我们假设先安装Linux,再安装windows的时候就会自动把windows的loader复制到MBR中的boot loader,这样一来就会默认优先启动windows。然而先安装windows,自动复制windows的loader到boot loader,再安装Linux的时候,我们可以设置把Linux的loader复制到boot loader中,把原先windows的覆盖掉,这样才能设置Linux默认启动。**
  三、内核引导阶段
  
  MBR将内核文件(代码)载入物理内存中执行,内核就是/boot/vmlinuz-2.6.32-431.el6.x86_64
  控制权转交给内核后,内核重新检测各种硬件信息,(第一次为POST自检),然后加载各种驱动和模块。
  这些模块在/lib/modules/2.6.32-431.el6.x86_64/下。(/和/lib/modules/不能挂载不同的分区),此时内核还没有文件系统的概念,也无法挂载根目录。
  此时使用一个过渡的临时根系统使得内核可以得到根文件系所需要的根设备位置、设备驱动等。
  四、init初始化阶段(系统初始化)
  
  这里第一步:执行/***in/init程序,读取/etc/inittab确认系统运行级别,然后执行/etc/rc.d/rc?.d,?为对应的运行级别(0~6)。
  于此同时执行系统初始化脚本/etc/rc.syslink(软连接指向/etc/rc.d/rc.syslink),定义主机名,不存在则定义为localhost、读取/etc/sysconfig/network文件,设置网络、挂载内存装置/proc和USB装置/sys,如果存在USB设备,会加载u***模块和u***文件系统、SELINUX的一些相关配置、设定text banner,显示欢迎界面等等
  加载 /etc/rc.local(软连接,指向/etc/rc.d/rc.local)用户自定义脚本
  五、启动终端
  
  Centos7引导过程
  
  一、硬件启动过程
  与centos6差不多
  二、GRUB2引导阶段
  GRUB2没有grub的stage1、stage1.5、stage2的概念,被bootstrap image文件所代替。
  stage1相当于boot.img,他们完成同样的功能
  stage1.5相当于core.img,不过core.img更加强大,它提供了恢复shell,使能够在不能加载其他模块时人工恢复。
  stage2没有对应的image文件,相当于grub2从/boot/grub下加载的各种模块动作
  大致流程:
  显示加载两个镜像(boot.img、core.img),再加载mod模块文件
  grub2程序执行,解析/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚根文件系统,转到内核
  grub.cfg由/etc/grub.d/目录下的文件和/etc/default/grub文件组成。
  grub.cfg配置文件相对复杂,一般修改好配置后使用命令 grub2-mkconfig -o /boot/grub2/grub.cfg重新生成
  /boot/grub2/i386-pc/目录下是GURB2 bootstrap image文件,大部门以.mod结尾,这些事grub2的模块文件
  [root@wzp ~] ll /boot/grub2/i386-pc/*.img -rw-r--r--。 1 root root 512 Jul 26 03:38 /boot/grub2/i386-pc/boot.img -rw-r--r--。 1 root root 26703 Jul 26 03:38 /boot/grub2/i386-pc/core.img [root@wzp ~] file /boot/grub2/i386-pc/boot.img /boot/grub2/i386-pc/boot.img: x86 boot sector; partition 4: ID=0xd4, starthead 205, startsector 4277266767, 0 sectors, code offset 0x63 [root@wzp ~] file /boot/grub2/i386-pc/core.img /boot/grub2/i386-pc/core.img: data
  只有两个.img文件,这两个文件会被grub2-install命令安装到对应的位置上
  1、boot.img
  在PC BIOS系统中,这个image是GRUB2第一个被运行的。它被写在MBR(Master BootRecord)或者在分区(partition)的boot sector中。
  因为MBR或PC boot secto是固定512字节,这个文件的大小也固定为512byte,boot.img功能很简单,主要是读磁盘中core.img中的第一个扇区(sector)到内存中并跳到该部分运行(如果是硬盘启动,那么该扇区就是下面要介绍的diskboot.img)。 因为只有512字节,boot.img不能够加载文件系统(比如CentOS7中XFS或其它Linux的EXT4等等),并且只能是从硬盘固定的位置加载。
  2、diskboot.img
  当从硬盘启动的时候这是coreimg第一个扇区sector)的内容, 主要功能是读剩下的core. img到内存中并开始运行kermel img.同样d***ot img没有文件系统的功能XFS、ext4等,当他读取剩余的core. img时候,依然从硬盘固定位置读取,
  根据启动的介质不同,类似dkot imng文件有很多,在安装GRUB时候选用其中一个:
  cdboot.img: 从CD-ROM启动
  pxeboot.img: 从PXE网络启动
  Lnxboot.img: 如果从其他bootloader 比如LILO ( 用image=section)启动,这个image使GRUB看上去像一个Linux内核。
  3、kernel.img
  这个文件包含了GRUB2基本的运行时支撑:对设备及文件的框架,环境变量,恢复模式下的命令行等等,一般我们不会直接使用它,但是它是core.img中必不可少的一部分。
  4、core.img
  这个是GRUB的核心。他是被grub2-mkimage命令生成,包含了kernel.imng以及一些必须必要的modules。通常core.img包含了足够的模块(modules)为了访问xfs、ext4文件系统/boot/grub2目录,并且在运行时加载从文件系统xfs所有剩余的模块,这些剩余模块包含启动目录处理,加载操作系统等等功能。
  模块化的设计最主要的目的是使core.img保持足够小,目前disk限制core.img安装必须小于32kb,core.img一般被安在硬盘的特殊区域:embedding area(夹层区)这个区一般有32K限制。
  5、*.mod
  所有GRUB其他部分被称为模块,他们大部分被core.img在运行时自动动态加载,其中一小部分被整合到core.img中,这小部分是必须,比如文件系统支持(xfs.mod)
  三、内核引导阶段
  与centos6差不多,加载驱动、切换到真正的根文件系统,区别是初始化程序从init变成了/usr/lib/systemd/systemd
  四、systemd初始化阶段(系统初始化)
  systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的以来关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。
  与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术:
  A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
  B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
  unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本)
  CentOS7中我们的初始化进程变为了systemd。
  1、执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。
  2、然后执行sysinit.target来初始化系统和basic.target来准备操作系统。
  3、接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。
  4、最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分