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
下一篇 2016-06-10

相关推荐

  • 浅谈bash shell 变量

    一、简述 变量是指内存空间的命名,指向内存中一个或一组地址。bash shell中的变量属于弱类型变量,使用变量无需声明、不需要指定类型,默认为字符型变量。 二、变量命名、赋值、引用 (1)命名规则:     1.只能使用字母,数字,下划线;并且不能使用数字开头。     2.不…

    Linux干货 2016-08-15
  • HAproxy reload config file with uninterrupt session

    HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great option if you are in the market for a load balancer and need to keep your cos…

    Linux干货 2015-04-03
  • 自制 mini linux

    思路 先装载一块硬盘,按照上面两个实验的部分结果,创建各个目录 在/boot 里面添加内核 ,添加initramfs.img文件添加grub组件  ,创建grub.conf   然后复制bash  ,ls  ,cp  等,命令和响应的库文件,并在启动的时候指定第一个进程为/bin/bash 顺便加载一个网卡驱…

    2017-05-14
  • 初识正则表达式

    正则表达式是个什么东东? 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。在很多文本编辑器里、命令中,通常要使用检索、替换、放行和拒绝那些符合某个模式的文本。而正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。  摘自《正则表达式之…

    Linux干货 2015-03-27
  • Linux磁盘管理

    一、磁盘管理总体分类  1)磁盘结构  2)分区类型  3)管理分区 4)管理文件系统  5)挂载设备 6)管理虚拟内存 ……………………………………………………………………………………………………………………… 重要分类模块详解 ………………………………………………………………………………………………………………………

    Linux干货 2016-08-29