centos

sys.16.1 Centos 启动流程

 

导语

>>  linux系统的组成部分:
由内核、根文件系统组成,内核提供对进程、内存、网络协议栈、文件系统、驱动程序、安全的管理;
进程与进程之间是可以通信的,这种通信类型叫IPC (inter  process  communication , 进程间通信);
IPC一般包括消息队列(message  queue), 信号量(semaphores), 共享内存(shared  memory , 简写shm)等;
主机之间的通信是通过socket原始套接字进程进行的;

>> 运行中的系统环境可分为2层,内核空间和用户空间;
用户空间主要运行应用程序,表现为具体的进程或线程;
用户空间中的进程或线程需要执行某些特权级指令时,会向内核代码的系统调用发起请求,由内核代码代为完成特权级的操作;
内核空间主要运行内核代码,内核代码通常都是特权级操作,通过系统调用向用户空间的进程或线程进行输出;
用户空间也叫用户模式,内核空间也叫内核模式;

文件系统工作在内核空间;

>> 内核设计流派:
单内核设计:把所有功能集成于同一个程序;linux属于单内核设计类型
微内核设计:每种功能使用一个单独的子系统实现;Windows、Solaris属于微内核设计类型;

>> Linux内核特点:
支持模块化;
支持模块运行时动态装载或卸载;

>> Linux内核组成部分:
核心文件:[centos 7 :  /boot/vmlinuz-VERSION-release ]
ramdisk:
      CentOS  5  :     /boot/initrd-VERSION-release.img ,        此文件可用工具程序创建’mkinitrd’;
      CentOS  6,7  :  /boot/initramfs-VERSION-release.img ,    此文件可用工具程序创建’dracut’,’mkinitrd’;
各种模块文件;[centos 7 : /lib/modules/vmlinuz-VERSION-release]

linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件的访问;
ramdisk是把内存当磁盘使用,这样就会在内存中有双缓冲;所以 CentOS 6/7采用的是 ‘initramfs’文件方式;

CentOS系统的启动流程(PC架构,MBR启动类型):
————————————————————————–

1、 POST加电自检;
POST里面内置有ROM芯片,芯片中内置有CMOS(Complementary  Metal  Oxide  Semiconductor,互补金属氧化物半导体),
CMOS里面有基本的输入输出系统—BIOS (Basic  Input  and  Ooutput  System);
2、Boot Sequence :
按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备;
3、bootloader : 引导加载器,引导程序;

> 引导加载器的分类:
>> Windows的引导加载器:ntloader;
>> Linux的引导加载器:
    >>> LILO : Linux Loader;
    >>> GRUB : Grand Uniform Bootloader;
        >>>> CentOS 5,6 : GRUB 0.X (Grub Legacy)
        >>>> CentOS 7 : GRUB 1.X (Grub2)

> 引导程序(引导加载器)的功能:
  >> 提供一个菜单,允许用户选择要启动的系统版本或内核版本;
  >> 把用户选定的内核装载到RAM的特定空间中,经过解压、展开操作后将系统控制权移交给内核;

MBR : Master Boot Record ,主引导记录,一共占用512bytes;
  >> 446bytes : bootloader引导程序;
  >> 64bytes : DPT (Disk Partition Table,硬盘分区表);
  >> 2bytes : magic number,固定为55AA;

Grub Legacy : 
  >> 第1阶段,1st stage :bootloader
  >> 第1.5阶段,1_5 stage : Partition ,filesystem driver
  >> 第2阶段,2nd stage :Partition,/boot/grub

 

4、加载内核到RAM,解压,展开后,初始化内核自身:
                   探测可识别到的所有硬件设备;
                   加载硬件驱动程序(有可能会借助于ramdisk加载驱动);
                   以只读方式挂载根文件系统;;;;
                   运行用户空间的第一个应用程序:/sbin/init;;;;

>> init程序类型:
  >>> CentOS 5: SysV init , 配置文件为 /etc/inittab
  >>> CentOS 6: Upstart , 配置文件为 /etc/init/*.conf; /etc/inittab(仅用于定义默认运行级别)
  >>> CentOS 7: Systemd , 配置文件为 /usr/lib/systemd/system/ , /etc/systemd/system/

阶段总结(CentOS 5),系统初始化(内核级别):
POST —> BootSequence(BIOS) —> Bootloader(MBR) —> 加载kernel(ramdisk) —> 挂载根文件系统rootfs —-> /sbin/init

>> 运行级别:为了系统的运行或维护等目的而设定的机制;总共有7个级别(0-6)[CentOS 5:SysV init 为例];;
0 : shutdown , 关机;
1 : single user ,单用户模式;root用户使用,无需认证;维护模式;
2 : multi user , 多用户模式;回启动网络功能,但不启动NFS;维护模式;
3 : multi user , 多用户模式;文本界面,完全功能模式;
4 : 预留级别,目前无特别使用目的,但习惯以同3级别功能使用;
5 : multi user , 多用户模式;图形界面,完全功能模式;
6 : reboot ,重启;

级别查看命令:
~]# runlevel
~]# who  -r

级别切换:
~]# init  #                ‘#’表示级别的数字;

 

5、 配置文件:/etc/inittab; 每行定义一种’action’以及与之对应的’process’;
id:runlevels:action:process
字段解释:
     id  :  一个任务的表示符;
     runlevels  :  在哪些级别启动此任务;
     action  :  在什么条件下启动此任务;
     wait  :  等待切换至此任务所在的级别时执行一次;
     respawn  :  一旦此任务终止,就自动重新启动之;
     initdefault  :  设定默认运行级别;此时,’process’字段为空;
     sysinit  :  设定系统初始化方式;此处一般指定脚本’/etc/rc.d/rc.sysinit’;[CentOS 5/6有此脚本;CentOS 7没有];
     process  :  任务名字;

举例:”id:3:wait:/etc/rc.d/rc 3″
说明:’rc’脚本可接受一个运行级别的数字;此脚本会去调用’/etc/rc.d/rc3.d/’目录下的脚本来控制相关服务;

>>  ‘/etc/rc.d/rc$runlevel.d/’目录下的文件类别说明:
   K*  :  ‘K’开头的脚本文件,要停止的服务的相关脚本;脚本文件名格式为’K##*’,其中’##’表示数字,代表优先级;数字越小,越优先关闭;依赖的服务先关闭,最后关闭被依赖的服务;
   S*  :  ‘S’开头的脚本文件,要启动的服务的相关脚本;脚本文件名格式为’S##*’,其中’##’表示数字,代表优先级;数字越小,越优先启动;被依赖的服务先启动,最后启动依赖的服务;

***************

>> CentOS  7 的’/etc/inittab’文件内容如下:

[root@kouyuushinn ~]# 
[root@kouyuushinn ~]# more /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
[root@kouyuushinn ~]#

总结,CentOS  7 查看与修改启动级别命令:
~]# systemctl  get-default                                                    查看启动级别;
~]# systemctl  set-default  multi-user.target                   修改/设置为’3’启动级别;
~]# systemctl  set-default  graphical.target                     修改/设置为’5’启动级别;

>> 系统初始化脚本:
CentOS  5/6 :  /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>  清理操作;

阶段总结(CentOS  5/6),用户空间的启动流程:/sbin/init(/etc/inittab)
设置默认运行级别 —> 运行系统初始化脚本,完成初始化 —> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务 —> 设置登录终端 [—> 启动图形终端]

CentOS  6  启动:
Upstart , 配置文件为 /etc/init/*.conf; /etc/inittab(仅用于定义默认运行级别)
                 rcS.conf 系统初始化脚本;
                 rc.conf 关闭和启动服务;
                 start-ttys.conf 设置登录终端;

CentOS  7 启动:
Systemd ,配置文件为 /usr/lib/systemd/system/ , /etc/systemd/system/ ;

****************************************************************************

Leave a Reply

Your email address will not be published. Required fields are marked *