centos启动流程

1、centos启动流程

简单流程简介:

POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 设定默认运行级别 –> 系统初始化脚本 –> 关闭或启动对应级别下的服务 –> 启动终端

流程详解:分为五大阶段

第一阶段:硬件引导启动

通过ROM中的BIOS的自检程序一次查找到第一个有引导程序的设备就是本次要用到的设备

第二阶段:GRUB启动引导阶段

对其设备中的MBR中的bootloder(引导加载程序)加载GRUB的Stage 1,由于stage 1 阶段是要加载stage2阶段来识别gurb.conf文件,来对用户提供一个选择内核的菜单,但是现在stage 1 还并不能识别stage 2 的文件系统,因此要通过stage 1.5先加载文件系统驱动,让stage 1能识别stage 2 的文件系统,此时stage 1 才能访问到stage 2 。 

GRUB.conf文件为用户体统一个菜单,让用户选择要启动的内核后装载到RAM的特定空间中,对内核文件进行解压,展开,之后就由Kernel来进行操作

第三阶段:内核引导阶段

内核文件在内存中解压展开完成之后,内核先对自身进行初始化:

    1、探测可识别到的所有硬件设备

    2、加载硬件驱动程序

        此时可能内核中并不能识别到根文件系统的驱动,就要由ramdisk来当桥梁,通过加载ramdisk来加载根之后,真正的根也就被加载上了。

        ramdisk:在操作系统安装的时候生成的,他会扫描当前系统中磁盘分区的系统,在记录在此虚拟根文件中,由于ramdisk文件在/boot下,因此可直接加载ramdisk,从而加载了根的文件系统

    3、识别到根文件系统之后以只读的方式挂载根文件系统

                4、根挂载之后内核就可以运行第一个应用程序(/sbin/init),再由它来接手开机的流程.

第四阶段:init程序

1、init程序接手后运行第一个脚本,/etc/inittab,  此文件定义当前系统级别。

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)     //关机,
#   1 - Single user mode//单用户模式,维护用,只能root用户,无需认证
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)//会启动网络功能
#   3 - Full multiuser mode//字符界面模式,
#   4 - unused//保留,可以同模式3一样理解
#   5 - X11 //图形界面
#   6 - reboot (Do NOT set initdefault to this)//重启
# 
id:3:initdefault:
id:任务标识
3:任务运行级别
initdefault:系统默认运行级别

    2、再一次运行/etc/init/*.conf所有脚本文件,

其中,/etc/init/rcS.conf文件用来运行系统初始化脚本文件/etc/rc.d/rc.sysinit

[root@Centos init]# vim /etc/init/rcS.conf 
# rcS - runlevel compatibility
#
# This task runs the old sysv-rc startup scripts.   // /etc/init/rcS.conf文件内任务描述就能知道
    /etc/rc.d/rc.sysinit脚本文件中定义了一下系统功能:
        (1)设定主机名
        (2)设定欢迎信息
        (3)激活udev和selinux
        (4)挂载/etc/fstab文件中定义的所有挂载项
        (5)检测根文件系统,并以读写方式重新挂载根文件系统
        (6)设定系统时钟
        (7)根据/etc/sysctl.conf文件来设置内核参数
        (8)激活lvm及软raid设备
        (9)激活swap设备
        (10)加载额外设备的驱动程序
        (11)清理操作

    再由/etc/init/rc.conf文件决定当前系统运行级别,在根据运行级别来运行相对应级别的脚本来管理需要关闭或启动的服务
/etc/init/rc.conf文件中定义当前系统运行级别来运行对应级别服务脚本文件
[root@Centos rules.d]# cat /etc/init/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/rcN.d文件:
    [root@Centos init]# cd /etc/rc.d/
    init.d/     rc0.d/      rc2.d/      rc4.d/      rc6.d/      rc.sysinit  
    rc        rc1.d/      rc3.d/      rc5.d/      rc.loca

第五阶段:用户登录

二、添加模拟服务脚本文件

1、定义服务脚本文件,

#!/bin/bash
#
#chkconfig: 35 30 50        //此注释必须写在服务脚本文件中
#description:testsrv script//描述信息(centos5必须有,centos6可写)
#
file=`basename $0`
files=/var/lock/subsys/$file
start() {
if [ -f $files ];then
echo "$file is running"
else    
touch $files
echo "$file is running successful"
fi
}
stop() {
if [ -f $files ];then
rm -f $files
echo "$file stoped successful"
else    
echo "$file don't starting"
fi
}
restart() {
if [ -f $files ];then
rm -f $files
sleep 1
echo "stop $file successful"
touch $files
sleep 1
echo "restart $file successful"
else
touch $files
echo "start $files successful"
fi
}
status() {
if [ -f $files ];then
echo  "$file is running"
else
echo "$file is stopped!"
fi
}
case $1 in
start)
start ;;
stop)
stop ;;
restart)
restart ;;
status)
status ;;
exit)
break ;;
*)
echo -e "\033[5;31mInput error!\033[0m"
echo "Please Usage `basename $0` {start|stop|restart|status}" ;;
esac

2、移动测试服务到chkconfig管理程序脚本目录中

[root@Centos bin]# mv testsrv /etc/rc.d/init.d/
[root@Centos bin]# ls /etc/rc.d/init.d/
auditd            halt       killall       netconsole  postfix      rsyslog    sshd       xinetd
blk-availability  ip6tables  lvm2-lvmetad  netfs       rdisc        sandbox    svnserve
crond             iptables   lvm2-monitor  network     rdma         saslauthd  testsrv
functions         kdump      mdmonitor     nfs-rdma    restorecond  single     udev-post

3、使用chkconfig -add 命令将测试服务添加到开机启动队列中

[root@Centos init.d]# chkconfig --add testsrv 
[root@Centos init.d]# chkconfig testsrv on
[root@Centos init.d]# chkconfig --list
testsrv        0:off1:off2:off3:on4:off5:on6:off
//观察到只有我们在脚本文件中添加到的启动模式才设定为on

4、可使用chkconifg–add、–del、–list,service  SERVICE  [start|stop|restart|status]进行对此服务管理

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

(0)
LiiLii
上一篇 2016-09-09 20:59
下一篇 2016-09-10 05:08

相关推荐

  • bash脚本入门之变量、运算、条件测试

    概述     脚本编程能力是作为运维工程师不可或缺的一项基本技能,各种系统的运维,如果完全靠命令行一条一条命令来执行,工作效率可想而知,而脚本却可以将完成一定功能的各个命令依据一定的流程控制,逻辑判断去完成某种功能,提升工作效率。本章就简单介绍一些linux下的bash脚本编程的基础入门知识,具体内容分为以下几个方面:…

    Linux干货 2016-08-12
  • linux中的马里奥之重定向与管道详解

    你背单词时 阿拉斯加的鳕鱼正跃出水面 你算数学时 太平洋彼岸的海鸥振翅掠过城市上空 你晚自习时 极图中的夜空散漫了五彩斑斓 但是少年你别着急 在你为自己未来踏踏实实地努力时 那些你感觉从来不会看到的景色 那些你觉得终身不会遇到的人 正一步步向你走来。          ——网易云热评《Something Ju…

    2017-07-22
  • 2017-10-4Linux基础知识(3)

    在上一章中讲到了操作系统的历史的发展以及Linux的如何诞生,在1991年的8月份,创始人Linus宣布成立Linux的,Larry Wall开发diff和patch打补丁的命令程序使得Linux可以在安全性方面有很大的提升。

    Linux干货 2017-10-05
  • Linux系统发展历史

    一、什么是Linux? Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和…

    Linux干货 2016-10-14
  • Mariadb数据库备份恢复系列(三):xtrabackup物理备份工具之增量备份

       实验三:利用xtrabackup+二进制日志实现增量备份和恢复数据库 本例中实现的是将所有的增量日志都通过apply-log的步骤同步到完全备份文件中,如果希望利用增量日志还原到固定某次增量备份的数据,则不能使用本例中方式对所有的备份都进行apply-log操作,如果希望利用增量日志还原到固定哪次增量备份的数据,则将最初的完全备份的数据、和期望还原到某…

    Linux干货 2016-11-24
  • 初识Linux

    一,计算机的组成和功能 计算机主要由四个部分组成,内存、缓存、CPU和寄存器。其中缓存及其重要,为CPU和内存之间的缓存,寄存器存放指令,CPU负责执行指令。内存是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 二,Linux的主流发行版本 Linux的发行版有数百种之多,其中主流的三种为: Debia…

    Linux干货 2017-12-04