20160907 centos启动流程

1、centos5,6启动流程

centos系统启动流程
linux系统的组成部分:内核+根文件系统
内核:进程管理,内存管理,网络协议栈,文件系统,驱动程序,安全功能
运行的系统环境可分为两层:内核空间,用户空间
 用户空间:应用程序(进程或线程)
 内核空间:内核代码(系统调用)
 
 内核设计流派:
    单内核设计:把所有功能集成与同一个程序。  linux
    微内核设计:每种功能使用一个单独的子系统实现。window,solaris
 
 linux内核特点:
 (1)支持模块化:支持模块运行时动态装载或卸载。 .ko(kernel object,/lib/mudules/)
 
 (2)组成部分:
       核心文件:/boot/vmlinuz-version-release ,内核安装多个,会有多个核心文件。
       ramdisk:辅助的伪根系统CentOS 5: /boot/initrd-VERSION-release.img,CentOS6,7: /boot/initramfs-VERSION-release.img
     (内核加载完成后,需要加载跟,必须加载/lib/modules/下驱动,所以要将伪根(initramfs-2.6.32-642.el6.x86_64.img)编译进内核。initrd变成initramfs,就是避免双缓存,从而提升速度的。centos6可以通过:mkinitrd initramfs-`uname -r`.img `uname -r`创建)
     
       模块文件:/lib/modules/version-release  ,模块如,文件系统,网络等等
             
 centos系统(mbr类的)的启动流程:
     (1)   POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。
       ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自        检程序和系统启动自举程序等。
       RAM:CMOS互补金属氧化物半导体,保存各项参数的设定
       
     (2)  bootloader: 引导加载器,引导程序,按次序查找引导设备,第一个有引导程序的设备为本次启动设备bootloader.
      widows:ntloader
      linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
      LILO: linux loader (手机上跑的)
      GRUB: GRandUnified Bootloader :(1)GRUB 0.X :GRUB Legacy  (2) GRUB 1.X  :GRUB2
     
      MBR: 512bytes,446bytes:bootloader,64bytes:fat(各分区信息),2:bytes:55aa有效信息。
      dd if=/dev/sda of=/root/mbr bs=1 count=512;     hexdump  -C -v  /dev/sda可以查看前512字节
 
      GRUB:
                 bootloader:1st stage    
                 partitionfilesystem dirver ,1.5 stage,为bootloader后,/dev/sda 2-30个扇区(sector)
                 partitions :  /boot/grub   2nd  stage   ,  grub.conf —>root=uuid为根的分区

    (3)kernel加载内核
         自身初始化:(1)探测可识别到的所有硬件设备  
         (2)加载硬件驱动程序:(有可能会借助于randisk加载驱动
         内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
         ramdisk–> ramfs提高速度  
         CentOS 5: initrd, 工具程序:mkinitrd
         CentOS 6: initramfs,工具程序:mkinitrd, dracut       initramfs-2.6.32-642.el6.x86_64.img
         )
         (3)  以只读方式挂载根文件系统;
         (4)  运行用户控件的第一个应用程序:/sbin/init
         
         init程序的类型:
         centos 5: sysV init    ,配置文件: /etc/inittab
         centos 6 :   upstart       , 配置文件  :  /etc/inittab(为了兼容5遗留的)   ,  更主要的是/etc/init/*.conf
         centos 7 :   systemd    ,配置文件: /etc/systemd/system/
 
 
系统初始化流程(内核级别):post–>BootSequence(bios)–>Bootloader(mbr)–>kernel(借助ramdisk加载根文件系统)–>rootfs(readonly)–>/sbin/initblob.png

blob.png

/sbin/init   centos
运行级别  (  /etc/inittab  )  :为系统运行或维护等目的而设定;0-6:   7个级别            
0:关机         1:单用户模式(root自动登录), single, 维护模式  (开机–>esc–>a–>1–>进去系统–>修改密码)
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式        3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别    5:多用户模式,完全功能模式;图形界面    6:重启
默认级别:3, 5
切换级别:init#。     关机:init 0      字符操作界面:init 3       进入图形界面:init 5          重启系统:init 6
查看级别:runlevel; who -r

centos5,6启动(已redhat5.8为例)

配置文件:/etc/inittab   
每行定义一种action以及与之对应的process

blob.png

action:walt:等待切换至此任务所在的戒备时只需一次
respawn:次任务终止时,就自动冲洗启动之
initdefault:设定默认运行级别,此时,process省略,如上图
sysinit:系统初始方式,此处一般为只读/etc/rc.d/rc.sysinit脚本
             
例如:
    id:3:initdefault:  
    si  : sysinit :/etc/rc.d/rc.sysinit
    lo:3:wait:/etc/rc.d/rc 3        
      意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务
      K* : 要停止的服务; K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,然后关闭被依赖的
      S*:要启动的服务,数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动。
      rc脚本:接受一个运行级别数字为参数      
      脚本框架:
      for srv in /etc/rc.d/rc$.d;do                           for srv in /etc/rc.d/rc#.d;do
           $srv stop                                              $srv start
      done                                                    done
               
   /etc/init.d/*(/etc/rc.d/init.d/*)目录为服务脚本 执行方式:
                   #/etc/rc.d/init.d/srv_scripts    {start|stop|restart|status}
                   # service   srv_scripts     {start|stop|restart|status}
     
    /etc/rc.d/initd/目录手动添加程序服务后,可用chkconfig创建运行级别  
    /etc/rc.d/initd/目录脚本格式

blob.png

    chkconfig命令  :管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态;
    chkconifg 服务 –add:服务受chkconfig控制
    chkconfig 服务 –del  :  服务不受chkconfig控制
    chkconfig –list :查看各运行级别下服务启动情况
    chkconfig –list  特定服务 :查看特定服务各运行级别下服务启动情况
    修改指定的连接类型
    chkconfig [–level levels]  name <on| off| reset>    (–level levels):为指定的运行级别,如果不指,则默认为2,3,4,5

blob.png

   rc.local:  开机就执行的脚本,可以将开机需要执行的命令放入/etc/rc.d/rc.local文件,这个文件在
   rc2.d,rc3.d,rc4.d,rc5.d目录中,有对应的软连接,而且数字是最后的  

blob.png

注意:正常级别下,最后启动的一个服务S99local没有连接至/etc/init.d下的摸个脚本,而是连接至/etc/rc.d/rc.local的脚本,
  不变或不需要写为服务脚本的程序期望能开机自动运行时,直接放在与此脚本文件中即可。
 
 
  tty1:2345 :respawn:/usr/sbin/mingetty tty6  启动虚拟终端的
  (1)mingetty会调用login程序
  (2)打开虚拟终端的程序除了mingetty之外,还有诸如getty等;
 
  系统初始化脚本:/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)清理操作
 
 总结(用户控件的启动流程) :/sbin/init(/etc/inittab)  
   设置默认运行级别–>运行系统初始化脚本,完成系统初始–>关闭对应级别下面要停止的服务,启动对应级别下需要开的服务–>设置登录终端–>启动图形终端

blob.png

centos6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。
4.核型执行init程序并获取运行信息。
5.Init执行/etc/rc.d/rc.sysinit文件。
6.启动核心的外挂模块(/etc/modprobe.conf)。
7.Init执行运行的各个批处理文件(scripts).
8.Init执行/etc/rc.d/rc.local.
9.执行/bin/login程序,等待用户登录。
10.登录之后开始以Shell控制主机。  

centos6启动
init程序:upstart,单依然为/sbin/init,其配置文件/etc/init/*.conf,/etc/inittab(仅用于定义默认运行级别)
/etc/init/rc.conf    init-system-dbus.conf
注意:*.conf为upstart风格的配置文件

centos7启动    
init程序:systemd,配置文件/usr/lib/systemd/system/*, /etc/systemd/system/*
systemctl {start|stop|status|restart}  服务[.service]      [.service]可省
完全兼容sysV脚本机制;因此service命令依然可用

centos5,6破解口令

(1)开机按e,进入grub界面

blob.png

(2)在quiet后写1,按回车键,进入single模式

blob.png

(3)进入系统后修改root密码,在reboot即完成密码修改。

blob.png

1、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”

[root@localhost ~]# chmod u+x cpmessage.sh

[root@localhost ~]# crontab -l

* * * * 0,2,4 /root/cpmessage.sh

[root@localhost ~]# cat /root/cpmessage.sh 

#!/bin/bash

#auther:xiong

cp /var/log/messages /logs/message-`date +%Y%m%d`

blob.png

2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

[root@localhost ~]# crontab -l

* */2 * * * /root/cpmeminfo.sh

[root@localhost ~]# cat cpmeminfo.sh 

#!/bin/bash

#auther:xiong

cat /proc/meminfo | grep -E "S|M" >> /tmp/meminfo.txt

[root@localhost ~]# 

blob.png

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