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

相关推荐

  • 网络管理之虚拟网卡实现一个网卡多个地址

    一.概述 在虚拟机中实现一个网卡多个地址 完成这个功能之前需要先关闭NetworkManager功能(在centos 6系统)         chkconfig NetworkManager off   而且我们要实现虚拟网卡一个网卡多个地址只是对虚拟机有用 网卡别名…

    Linux干货 2016-09-16
  • Linux进程管理

    内核的功能:     进程管理 文件系统 网络功能 内存管理 驱动程序 安全功能等     rocess:运行中的程序的一个副本,是被载入内存的一个指令集合      进程ID(Process ID,PID)号码被用来标记各个进程 UID,GID,和…

    Linux干货 2016-09-12
  • Linux中的文件管理命令及shell特性

    Linux中的文件管理命令 一、linux中的目录管理命令:mkdir和rmdir mkdir命令:创建目录 – SYNOPSIS         mkdir [OPTION]… DIRECTORY…     -…

    Linux干货 2016-09-27
  • N26——第三周作业

    一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可 [root@localhost ~]# who | cut -d ' ' -f1 | uniq root zhaoyujia 二、取出最后登录到当前系…

    Linux干货 2017-01-14
  • sed工具的基本用法

    sed -n(不输出模式,不自动打印) sed -d(删除匹配到的内容) sed-e(多点编辑) sed-r(支持扩展正则表达式) sed#,#(地址定界,在此范围中匹配) sed 1~2   sed 2~2 (找奇数行和偶数行) sed =(为打印到的内容编辑行号)  sed!(取反) sed s///(查找替换,支持使用其他…

    Linux干货 2017-05-02
  • shell脚本之批量添加用户

        没错,这是一个简单的脚本,不写不知道,写了才发现自己多垃圾。     我是一名普通的公司网络管理,接触linux不长,一直理想都是和马哥学习linux,可惜因为拖家带口的原因,没办法交学费和马哥学习,心里小小遗憾吧。每天看着马哥的文章以及百度搜索的视频文章学习,感觉自己学…

    Linux干货 2016-07-07