CentOS 5/6启动流程

1.加电自检(post)
 按开机电源后通过CMOS芯片的BIOS系统检测系统硬件是否正常

2.查找系统引导
2.1 通过BIOS中的引导设置BOOT Sequence按次序查找引导程序,通过第一个有引导程序的设备启动;

2.2 加载bootloader,通过bootloader选择需要加载的内核版本,将用户选择的内核版本加载到内存中特定的位置,解压展开,然后将控制全转交给内核
 (1)MBR引导程序
  446字节:bootloader
  64字节:分区表
  2:结束标示 55AA
 (2)GRUB:多操作系统管理器
  bootloader:1st stage
  disk:2nd stage

3.启动内核
3.1 内核的功能:进程管理、内存管理、网络管理、驱动管理、文件系统、安全功能

3.2 linux内核特点:
 (1)模块化设计,而且各模块可以动态卸载和加载;
 (2)内核核心文件有 /boot/vmlinuz-VERSION-release 和ramdisk。ramdisk在CentOS 5中的路径为 /boot/initrd.VERSION-release.img,在CentOS 6中的路径为 /boot/initramfs-VERSION-release.img
 (3)模块文件存在路径 /lib/modules/VERSION-release
 
3.3 kenel自身初始化过程
 (1)探测可识别的所有硬件设备;
 (2)加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
 (3)以只读的方式挂载跟文件系统
 (4)运行用户空间第一个应用程序/sbin/init
 
3.4 init程序类型根据系统不同有以下几种:
 (1)centos 5使用的是Sysv,配置文件路径 /etc/inittab
 (2)centos 6使用的是Upstart,配置文件路径/etc/inittab /etc/init/*.conf
 (3)centos 7使用的是systemd,配置文件路径 /usr/lib/systemd/system  /etc/systemd/system
 
3.5 CentOS 5/6运行级别
 分为0-6,七个级别
  0:关机,
  1:单用户模式(登录即为root用户,无需用户密码验证),可输入命令1或single进入,也可称为维护模式
  2:多用户模式,会启动网络功能,但不会启动NFS,也可称为维护模式
  3:多用户模式,3属于正常模式,仅启动文本界面
  4:预留级别,同3;
  5:多用户模式,可启动图形界面;
  6:重启
  
3.6 init 的切换命令和配置解析
 (1)init #:一般模式级别为3,5,#为级别编号;
 (2)runlevel:查看当前运行级别与最近一次切换前的级别
 (5)who -r:类似与runlevel
 
3.7 /etc/inittab 配置文件解析
 id:runlevel:action:process
  id:每一登记项的唯一表示符
  runlevel:对应0-6,7个运行级别
  action:表示对应登记项在一定条件下运行process的条件
   wait:当进入指定runlevel后process会运行一次且在离开此runlevel时process中止
   respawn:当process终止后,立刻启动一个新的
   initdefault:设定默认运行级别,process省略
   sysinit:系统初始化,只有系统开机或重启的时候才会运行一次,此处一般为指定/etc/rc.d/rc.sysinit
 分析:
  id:3:initdefault:   ------->表示开机后默认会进入3模式(即命令行模式)
  si::sysinit:/etc/rc.d/rc.sysinit  ----->在所有的运行级别下init都会依赖/etc/rc.d/rc.sysinit这个脚本对系统进行初始化
   /etc/rc.d/rc.sysinit的作用如下:
    1,激活udev和selinux
    2,根据/etc/sysctl.conf文件设定内核参数
    3,设定系统时钟
    4,键盘的键映射,即识别键盘
    5,启用swap分区
    6,设定主机名
    7,根文件系统检测及重新以读写方式挂载
    8,激活RAID和LVM设备
    9,启用磁盘配额
    10,检测及挂载其他文件系统(挂载/etc/fstab中定义的设备)
    11,清除过期的锁和PID文件
  l0:0:wait:/etc/rc.d/rc 0
  l1:1:wait:/etc/rc.d/rc 1
  l2:2:wait:/etc/rc.d/rc 2
  l3:3:wait:/etc/rc.d/rc 3
  l4:4:wait:/etc/rc.d/rc 4
  l5:5:wait:/etc/rc.d/rc 5
  l6:6:wait:/etc/rc.d/rc 6
   上述10-16表示当进入n级别时将 /etc/rc.d/rc*.d下的S*文件启用,K*文件禁用,而且仅针对于对应的级别执行一次,退出此级别失效。每个/etc/rc.d/rc*.d
    K*:K##:##表示关闭次序,数字越大越先运行,数字越小的服务,通常为依赖比人的服务
    S*:S##:##表示启动次序,数字越小越先运行,数字越小的服务,通常为被别人依赖的服务。

3.8 chkconfig命令
 用途:用于查看服务所在级别出于启动或关闭的状态,和设置各服务在各启动级别时的状态
 
 使用场景1:
  (1)chkconfig --list:查看所有服务器在各级别时状态,顶部的数字表示启动级别,on表示启动,off表示关闭
  (2)chkconfig --list name:表示查看此项服务在各级别时的状态。
  (3)chkconfig --level # name <on,off,reset>:修改服务在指定级别#时的状态,当#号省略时表示2345。
  (4)添加新服务和删除服务的方法:
   先将增加的脚本放置于/etc/rc.d/(/etc/init.d),编辑脚本在各级别中的状态 chkconfig :LLLL NN NN
   使用chkconfig --add name 添加脚本
   使用chkconfig --del name 删除脚本
 
 注:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;