• BIOS自检
    POST(Power-On-Self-Test)加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。
    BIOS(Basic Input and Output System)保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等。
    在加电自检完成后,计算机就会找到引导记录,由引导记录继续开机的进一步操作。

    Boot Sequence
    在计算机真正启动之前,我们的计算机会先确定开机启动项是什么,这个一般在BIOS的boot里面设定的,不同的版本的BIOS设定方式不一样,但是效果都是一样的。一般我们的电脑就是硬盘启动。当计算机这一步执行后,就会找到硬盘中的读取硬盘,先找到的就是0扇区,即前446字节。
     

  • MBR引导
    MBR(Master Boot Record)MBR记录一般是在磁盘0磁道0扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。在加电自检后,就会开始这一部分的内容,从这里开始才是真正的开机引导。
    计算机不知道我们的系统在哪里,所以需要程序进行引导,这个引导的程序就叫bootloader,不同操作系统的bootloader是不同的,windows使用的bootloader程序是ntloader,只能对windows进行引导不能对其他系统进行引导,而Linux的bootloader叫GRUB,可以对其他操作系统进行引导(包括windows),而MBR前446就属于grub一部分。


    MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区结构,但它并不仅仅应用于Windows系统平台,也应用于Linux,基于X86的UNIX等系统平台。它位于磁盘的0号扇区(一扇    区等于512字节),是一个重要的扇区(简称MBR扇区)。

            MBR只支持2TB的硬盘

            只支持4个主分区

    MBR:(master boot loade)主引导记录 446B

    DPT:(disk partition table)磁盘分区表 64B

    Magic:魔术字55AA 2B

    磁盘扇区:0-0-1扇区 引导扇区

    磁盘有三个逻辑概念:磁道,柱面,扇区,512B
     

  • Grub启动
    前面说到,MBR的446字节的东西就是grub的一部分忙也就是说,我们的计算机启动磁盘后会找到grub,我们看看grub文件夹中的内容。

    [root@NFS ~]# cd /boot/
    [root@NFS boot]# tree
    .
    ├── config-2.6.32-696.el6.x86_64
    ├── efi
    │   └── EFI
    │       └── redhat
    │           └── grub.efi
    ├── grub
    │   ├── device.map
    │   ├── e2fs_stage1_5
    │   ├── fat_stage1_5
    │   ├── ffs_stage1_5
    │   ├── grub.conf                                /////
    │   ├── iso9660_stage1_5
    │   ├── jfs_stage1_5
    │   ├── menu.lst -> ./grub.conf                  /////
    │   ├── minix_stage1_5
    │   ├── reiserfs_stage1_5
    │   ├── splash.xpm.gz
    │   ├── stage1                                  /////
    │   ├── stage2                                  /////
    │   ├── ufs2_stage1_5
    │   ├── vstafs_stage1_5   
    │   └── xfs_stage1_5                            /////
    ├── initramfs-2.6.32-696.el6.x86_64.img         //伪根系统
    ├── initrd-2.6.32-696.el6.x86_64kdump.img
    ├── lost+found
    ├── symvers-2.6.32-696.el6.x86_64.gz
    ├── System.map-2.6.32-696.el6.x86_64
    └── vmlinuz-2.6.32-696.el6.x86_64

    grub程序主要是由device.map,menu.lst,stage1,stage2,以及一系列的stage1_5组成。
    device.map:存放的是内核文件的根分区
    menu.lis:是grub.conf的链接文件,但是这个名字我觉得更与它的功能接近,就是菜单列表。里卖弄设置了可以选择的内核菜单。存放于stage2中。
    stage:由于grub引导程序过大,所以分2段引导,第一段存放在MBR中,第二段存放于内核文件系统中,第一段引导完成后可以找到第二段。 但是,第二段是存放于内核文件系统中的,此时还没有格式化文件系统,如何可以访问到第二段的 menu.lst 呢?就需要借助于中间层 stage1_5,有它来协助 stage1 段来访问 stage2 段。stage1_5通常位于 stage1 字段后的 63 个扇区。 由于stage2 在内存中存放可以使用的文件系统不确定,所以这就是有多个 stage1_5 的原因了,因为stage1_5会找到伪根系统,伪根系统就像是一个小型的linux,里面有相对用的文件系统,我们可以借助伪根系统来找到我们的真正系统采用的什么文件系统。
    initramfs: 是以 gzip 压缩的cpio格式的文件。内核启动时将他作为一个临时的根文件系统。 grub 的 stage2 将initrd加载到内存里,让后将其中的内容释放到内容中,内核便去执行init脚本,这时内核将控制权交给了init文件处理。 init它也主要是加载各种存储介质相关的设备驱动程序。当所需的驱动程序加载完后,会创建一个根设备,然后将根文件系统rootfs以只读的方式挂载。这一步结束后,释放未使用的内存,转换到真正的根文件系统上面去,同时运行/sbin/init程序,执行系统的1号进程。此后系统的控制权就全权交给/sbin/init进程了。

    操作系统引导菜单
    windows:msconfig
    linux:GRUB
    注意:windows和linux双系统的时候,默认GRUB来引导
     

  • kernel(加载内核)

        1、读取/etc/inittab文件

        inittab文件里面定义了系统默认运行级别,这一步做了一些工作如下:

            a)初始运行级别(RUN LEVEL)

            b)系统初始化脚本

            c)对应运行级别的脚本目录

            d)定义UPS电源终端/恢复脚本

            e)在虚拟控制台生成getty,以生成终端

            f)在运行级别5初始化X

        2、执行/etc/rc.d/rc.sysinit程序

        系统初始化一些脚本,主要完成以下工作

            a)设置主机名

            b)设置欢迎信息

            c)激活udev和selinux可以在grub.conf中,kernel行添加selinux=0以关闭selinux

            d)挂载/etc/fstab文件中定义的文件系统

            e)检测根文件系统,并以读写方式重新挂载根文件系统

            f)设置系统时钟

            g)激活swap设备

            h)根据/etc/sysctl.conf文件设置内核参数

            i)激活lvm及software raid设备

            j)加载额外设备的驱动程序

            k)清理操作

    3、/etc/rc#.d/文件(各种服务)

        里面定义的是各种服务的启动脚本,可以ls查看,S开头代表开机启动的服务,K开头的是关机要执行的任务。#代表数字,    一个数字代表一个运行级别,共7个运行级别,这里就不多说了

    4、/etc/rc.d/rc.local文件

        这里面可以自定义开机启动的命令。

本次笔记从网络上摘抄,后又发现了一文章挺不错:https://www.cnblogs.com/liuwentaolaji/p/9533167.html

 

Sysvinit技术

特点:

  • 系统第1个进程(pid=1)为init;
  • Init进程是所有进程的祖先,不可kill;
  • 大多数Linux发行版的init系统是和SystemV相兼容的,被称为sysvinit。
  • 代表系统:CentOS5

 

优点:

 

  • SysVinit运行非常良好,概念简单清晰。它主要依赖于Shell脚本。

 

缺点:

  • 按照一定顺序执行,启动太慢。
  • 很容易hang住,fstab与nfs挂载问题

 

Upstart技术

CentOS6采用了Upstart技术代替sysvinit进行引导,Upstart对rc.sysinit脚本做了大量的优化,缩短了系统初始化时的启动时间。但是CentOS6为了简便管理员的操作,upstart的很多特性并没有凸显或者直接不支持,因此在CentOS6中的服务启动脚本还是以原来SysV的形式提供的。

But,一个应运而生的技术,却因为竞争对手太强大,而被淘汰。

代表系统: CentOS6 ,Ubuntu14,从CentOS7,Ubuntu15开始使用systemd

 

最后修改于 2019-12-24 14:33:57
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇