Linux 启动流程

Linux启动流程

POST–>Boot Sequence–>MBR–>Grub–>Kernel(initramfs)–>rootfs–chroot(根切换)–>/sbin/init–>RunLevel–>rc.sysinit—>rc 3(rc.local)–>启动终端

1、Post加电自检

2、运行BIOS程序,选择启动源(硬盘,网络,CD/DVD,USB)

3、MBR 512Byte,(Bootloader,FAT,55AA)

    Bootloader:占446Byte,是Grub的第1阶段,有安装系统时写入到磁盘

    FAT:占64Byte,分区表,一个分区表占16Byte,所以主分区最多4个

    55AA:占2Byte,表示Bootloader是否有效

4、Grub

    Grub第1阶段:MBR中Bootloader程序,加载至内存中运行,可找到Grub第1.5阶段所在位置

    Grub第1.5阶段:透过Grub第1阶段,找到Grub第1.5阶段,使能够挂载Grub第2阶段所在分区(boot分区)

    Grub第2阶段:向内核传递参数,并加载内核运行

5、Kernel(initramfs)

    运行中的内核挂载initramfs文件系统(精简内核将部分文件系统驱动做到此微系统中),使得内核能挂载硬盘真的根文件系统

6、rootfs

    内核挂载硬盘的根文件系统

7、chroot

    根文件系统切换,从initramfs切换至我们安装linux的根分区

8、/sbin/init

    运行init程序

9、Runlevel

    CentOS5:运行起来的init程序会去读取/etc/inittab文件,根据配置文件启动相应运行级别

    id:3:initdefault:        #确定默认运行级别3
    si::sysinit:/etc/rc.d/rc.sysinit	#运行系统初始化脚本,完成系统初始化
    l3:3:wait:/etc/rc.d/rc 3		#以运行级别为3,运行/etc/rc.d/rc脚本

    CentOS6:读取/etc/inittab,执行/etc/init/目录下以.conf结尾的脚本,

[root@neolinux init]# ls
control-alt-delete.conf  plymouth-shutdown.conf  rc.conf             rcS-sulogin.conf     start-ttys.conf
init-system-dbus.conf    prefdm.conf             rcS.conf            serial.conf          tty.conf
kexec-disable.conf       quit-plymouth.conf      rcS-emergency.conf  splash-manager.conf
[root@neolinux init]# cat rc.conf 
# rc - System V runlevel compatibility
#
# This task runs the old sysv-rc runlevel scripts.  It
# is usually started by the telinit compatibility wrapper.
#
# Do not edit this file directly. If you want to change the behaviour,
# please create a file rc.override and put your changes there.
start on runlevel [0123456]
stop on runlevel [!$RUNLEVEL]
task
export RUNLEVEL
console output
exec /etc/rc.d/rc $RUNLEVEL            #运行/etc/rc.d/rc此脚本
[root@neolinux init]# cat rcS.conf
#***********
#**
exec /etc/rc.d/rc.sysinit              #运行/etc/rc.d/sysinit脚本
#**

10、rc.sysinit

    sysinit脚本运行功能:

    a、设置主机名
    b、激活udev,selinux
    c、挂载/etc/fstab中设定的文件系统
    d、根据/etc/sysctl.conf文件设置内核参数
    e、加载额外驱动
    f、....等等,还有很多

11、rc 3(rc.local)–>Service

    运行rc脚本传递运行级别,rc脚本会跟据对应的运行级别去运行/etc/rc.d/目录下以rc.#开头的目录下各种脚本

    K##开头的脚本表示关机时运行,##数字越大越优先关闭

    S##开头的脚本表示开机时运行,##数字越小越优先开启

    以运行级别为3,/etc/rc.d/rc3.d/目录下,以S99开头的链接文件,此脚本链接到/etc/rc.d/rc.local,用户自己有需要开机运行的脚本可以放在此处

12、终端启动

    用户输入用户名密码,认证通过加载配置文件进入bash环境

原创文章,作者:nice_neo_linux,如若转载,请注明出处:http://www.178linux.com/17825

(2)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-09 22:15
下一篇 2016-06-09 22:15

相关推荐

  • 循环的特殊用法及函数

    while特殊用法 while read 变量名;do 循环体 done<文件路径(将文件中的每一行依次读入循环体,赋值给变量)   (())可以实现C语言风格的变量操作 for循环特殊格式 for((控制变量初始化;条件判断表达式;控制变量修正表达式)) do 循环体 done 控制变量初始化仅在循环开始时执行一次,进行条件判断成立后执行循…

    Linux干货 2016-08-21
  • KeepAlived实现HAProxy双主并实现资源的动静分离

    KeepAlived实现HAProxy双主并实现资源的动静分离 前言 HAProxy介绍 实验拓扑 实验环境 实验步骤 配置后端httpd服务器 配置HAProxy实现backend负载均衡 测试动静分离效果 配置KeepAlived 测试KeepAlived 配置DNS DNS测试 最终测试 总结 前言 我们这次使用HAProxy作为负载均衡调度器来实现后…

    Linux干货 2016-04-16
  • N25-第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -r /etc/skel /home/tuser1 [root@localhost ~]# ls …

    Linux干货 2017-01-03
  • 马哥教育21期网络班—第8周课程+练习—-成长进行时–不退步

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:一种网路装置,负责网路桥接,将网络的多个网段在数据链路层连接起来。 集线器:将多条以太网线或光纤集合连接在同一段物理介质下的装置。工作在物理层。 二层交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通…

    Linux干货 2016-08-24
  • 第十三周作业

    “1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; …

    Linux干货 2017-08-13
  • 马哥教育网络班22期+第三周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  who | tr -s [[:space:]] | cut -d" " -f1 | sort -u [root@localhost cdrom]# who root     pts/1     &…

    Linux干货 2016-09-07