zoukankan      html  css  js  c++  java
  • Linux系统开机启动流程

    这部分将了解Centos6和Centos7开机启动后的流程。

    Centos6启动简要流程

    1 开机BIOS自检

    开机,首先加载BIOS(主板上的一块芯片)自检,检查硬件状态是否正常,对CPU、设备启动顺序、硬盘信息、内存信息、时钟信息等进行自检。当检查完毕没有问题就会根据BIOS里的设置,去读取对应的启动系统的硬盘。

    2 读取MBR引导

    MBR(Master Boot Record),读取启动硬盘上0柱面0磁道1扇区上的前446字节,读取引导程序。一个扇区大小是512字节,剩余的66字节用于记录磁盘的分区信息。引导程序读取后,将其加载到内存中执行,这个动作就是引导程序加载即Boot Loader,对应于Linux系统就是加载Grub信息。

    3 加载GRUB菜单

    加载GRUB菜单,选择启动操作系统,如下是grub.conf里的详细信息,具体参数解释如下。

    (1)default=0 代表启动grub菜单中的第一个选项对应的系统,本次装的Centos6只有一个,默认启动第一个。

    (2)timeout=5 代表菜单停留时间5s后自动启动,留个人员选择的时间。

    (3)splashimage=(hd0,0)/grub/splash.xpm.gz grub菜单的画面对应的图片,保存在第一个硬盘的第一个分区。

    (4)hiddenmenu 启动系统时不显示启动菜单选项,按照默认设置启动系统,除非用户按esc

    (5)title CentOS 6 (2.6.32-696.el6.x86_64) 系统启动对应的项目名称

    (6)root (hd0,0) 启动分区boot,里面包含内核文件和内核所需要的驱动文件,(hd0,0)代表第一个硬盘的第一个分区,查看就是sda1。

    (7)kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0a10496f-f76e-4a2e-9572-edf8e5d1066f rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 位于boot分区上的内核文件和一堆可选内核参数。vmlinuz-2.6.32-696.el6.x86_64为内核文件,UUID可以通过命令来查看对应设备/dev/sda2。

    (8)initrd /initramfs-2.6.32-696.el6.x86_64.img 内核文件驱动文件,也在boot分区。

    grub菜单也可以设置网卡名字,如果前面安装忘记改了,这里可以从eth33修改为eth0。

    4 加载内核kernel和驱动程序 

    加载Linux内核就是根据上面grub.conf文件的设置,读取内核并进行解压缩操作,完成解压缩后屏幕输出'OK, booting the kernel'。另外还需要加载驱动程序文件,也是在grub.conf文件中设置的。

    5 运行INIT进程

    加载完后运行Linux的第一个进程,为INIT,如下图所示为运行的第一个程序 /sbin/init,进程号为1显示为第一个进程。

    (1)读取/etc/inittab文件,设定系统运行级别(默认级别为3),后面根据运行级别来启动对应级别下的系统。

    (2)读取/etc/init/rcS.conf文件,执行对应脚本 /etc/rc.d/rc.sysinit ,设置主机名,文件系统挂载,加载函数模块,欢迎信息展示等,以前是通过读取/etc/inittab文件来加载 /etc/rc.d/rc.sysinit脚本,现在修改为读取/etc/init/rcS.conf文件后加载。如下所示是脚本信息,这个特别的长以后学习Shell后可以查看下,不过可以基本看到一些操作,如设置主机名,挂载硬盘等。

    启动系统后一堆的OK就是执行这个脚本后输出的结果。

    (3)init进程加载内核模块

    在Centos6下加载/etc/sysconfig/modules/下面的内核模块,上面Loading OpenIB kernel modules就是加载结果OK。查看我自己安装的发现暂时没有东西。

    (4)读取/etc/init/rc.conf文件,执行对应的脚本 /etc/rc.d/rc 3

    去/etc/rc.d/目录下查看,可以看到level0~level6的启动脚本。

    查看运行级别3,可以看到开机需要启动的脚本。

    (5)读取/etc/rc.local文件,设定开机自启动程序。

    系统初始化后,可以把需要跟随计算机启动的命令设置在这里面。

    (6)读取/etc/init/tty.conf文件,启动mingetty 3进程,显示登陆界面。

    Centos7启动简要流程

    前面四个跟Centos6一样,也是相继完成开机BIOS自检、读取MBR引导、加载Grub菜单和加载内核kernel。接下来的流程与Centos6不一样。

    运行systemd进程

    与Centos6不一样,systemd进程为第一个进程。

    (1)加载initrd.target文件,里面包含挂载fstab文件系统

    (2)读取default.target文件,设置target模式及脚本

     查看default.target,发现指向了multi-user.target。

    可以看出multi-user.target对应就是运行级别3,在Centos7中用target模式来代替运行级别,跟Centos6有对应关系。

    (3)读取sysinit.target文件,初始化系统及加载basic.target

      加载完multi-user.target后,开始读取sysinit.target文件,初始化系统。

    (4)systemd启动multi-user.target下的服务程序,即对应target模式下的程序,程序目录为/etc/systemd/system和/usr/lib/systemd/system,这个类似Centos6的读取etc/rc.d然后执行对应的运行级别下的程序。

    (5)读取/etc/rc.local文件,设定开机自启动程序

    (6)读取getty.target文件,启动mingtty进程

    以上为Centos6和Centos7开机的流程简单了解。

  • 相关阅读:
    MySQL 8.0复制性能的提升(翻译)
    mongodb节点配置指南
    ProxySQL读写分离
    MySQL JOIN原理
    pt-summary
    Unity3D安卓打包参数配置与兼容性的关系分析
    unity3d 动画卡帧 动画合成 动画层次
    单机游戏计时器防作弊解决方案
    Unity3D占用内存太大的解决方法
    AndroidManifest.xml配置
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11248043.html
Copyright © 2011-2022 走看看