centos6,启动流程(1)

centos6,启动流程(1)

内核功能:进程故那里,驱动程序,文件系统,网络子系统,安全功能,内存功能 内核的设计体系 单内核体系 linux,模拟化设计机制 核心功能,并且加上外围的各种模块 模块可动态装载和卸载 微内核体 windows Solaris Minix Hurd

设计思想:内核核心仅保留最基本功能,而把其它功能做成子系统,各子系统之间依靠通信完成基本功能; centos系统启动流程; post:加点自检,cpu,rom, 周边基本硬件检测 Bios:boot sequence 按次序查找各引导设备,第一个有引导系统程序的设备即为启动系统用到的设备 1st 2nd 3rd MBR:0扇区,0磁道 521字节, 446bytes:bootloader(程序,OS安装时声称) 64字节:分区表

Boitloader:加载选定的操作系统的内核至RAM中,并展开至固定的位置,多系统共存的场景中,还会提供一个选择菜单

LILo:linux loader grub: Grand Unified Bootloader MBR:1 st stage /boot/grub/: 2nd stage

GRUB 0.x:Grub legacy centos 5,centos 6 GRUB 1.x:Grub 2 centos 7

kernel: 自身初始化 探测可识别的所有硬件 装载硬件设备的驱动程序 (ramdisk) ramdisk:加载至内存中,此段内存空间被虚拟成了块设备;(用于提供硬盘驱动程序;系统安装时临时生成的,ramdisk被内核识别为“临时根文件系统”,即rootfs,) 以只读方式装载“真正的根文件系统” 启动用户空间第一个用户程序:/sbin/init

init: centos 5:SysV init 特点:启动用户空间的服务程序,通常通过脚本进行;有依赖关系的服务奖串行启动; 配置文件:/etc/inittab centos 6:upstart 特点:守护进程间的通信依赖于d-bus进行,因此,可基于实现类似并行启动; 配置文件:/etc/inittab,/etc/init/*.conf centos 7:Systemd 特点:服务只有在第一次被访问到时才会真正启动起来; 配置文件:/usr/lib/systemd/

/sbin/init: linux系统运行级别:为系统维护的目的而设定,途径是设定启动或关闭服务实现; 0-6:7个级别 0:挂壁所有服务器;关机 1:维护模式,单用户模式,sigle;此级别可允许root用户直接登录而无须认证 2:维护模式,多用户模式,需要用户认证,会启动网络功能,但不支持使用nfs; 3,正常级别,完全多用户模式,文本界面; 4,预留级别, 5,正常级别,图形完全多用户模式

查看运行级别命令:who -r runlevel 6,关闭所有服务,重启 配置文件:/etc/inittab(centos 5)配置文件格式 每一行定义一个有init执行的action,以及对应的程序; action用于定义程序什么时候被运行; 格式: id:runlevel:action:process

例如:设定默认级别 id:3;inittdefault: 例如:定义完成系统初始化脚本 si::sysinit:/etc/rc.d/rc.sysinit 例如:启动对应级别下设定为要启动的服务,关闭哪些设定为要停止的服务 l1:1:wait:/etc/rc.d/rc 1 意味着:通过/etc/rc.d/rc1.d/下的所有连接文件来决定如何启动或关闭服务 所有以S开头的,都被传递start参数启动,所有以K开头的,都被传递stop参数停止;

/etc/init.d/svc_scripts,此些脚本遵循LSB服务脚本定义规范,基本都能接受四个最基本的参数,{start|stop|status|restart};

start stop restart status:查看服务运行状态;

此些脚本可直接被调用 /etc/init.d/ server {start|stop|status|restart}; service svc_scripts {start|stop|status|restart};

此些服务也可以开机(切换指定级别)时自动启动或停止; 方法: /etc/rc.d/rc脚本,以及每个级别对应的级别目录下的“符号链接”来进行(/etc/rc.d/rcN.d); S##SVC_SCRIPTS K##SVC_SCRIPTS

##:两位数字,表示优先级; 启动时:被依赖的服务数字较小 停止时:被依赖的服务数字较大 例如:服务mysvc,脚本/etc/init.d/mysvc 对应级别3,开机可自动被启动/etc/rc.d/rc3.d

for svc in /etc/rc.d/rc.3.d/s*;do $svc start

done

注意:此些符号链接的创建可通过chkconfig命令来实现

chkconfig [--level levels] on|off

--level 选项明确指定的界别为on或off,余下的级别保存原有;

[root@localhost ~]# chkconfig --list crond(服务名) crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@localhost ~]# chkconfig --list 查看所有 [root@localhost ~]# ls -l /etc/rc.d/rc4.d/ |grep crond lrwxrwxrwx. 1 root root 15 Apr 13 14:37 S90crond -> ../init.d/crond [root@localhost ~]# [root@localhost ~]# ls -l /etc/rc.d/rc4.d/ |grep crond lrwxrwxrwx 1 root root 15 Apr 15 20:06 K60crond -> ../init.d/crond [root@localhost ~]#

删除/添加服务 chkconfig --add|--del 服务 --add:为某存放在/etc/init.d服务在对应的/etc/rc.d/rc0-6.d目录添加符号链接 --del:把指定服务的在7个级别下的符号链接统统删除

这些脚本开头存在一个注释 #chkconfig levels

# chkconfig: 2345 90 60 [root@localhost ~]# head /etc/init.d/crond #!/bin/sh 1. 1. crond Start/Stop the cron clock daemon. 1. 1. chkconfig: 2345 90 60 1. description: cron is a standard UNIX program that runs user-specified \ 1. programs at periodic scheduled times. vixie cron adds a \ 1. number of features to the basic UNIX cron, including better \ 1. security and more powerful configuration options.

[root@localhost ~]#

1,这些脚本开头存在一个注释 #chkconfig levels

2,第二种方法 ### BEGIN INIT INFO 1. Provides: atd at batch 1. Required-Start: $local_fs 1. Required-Stop: $local_fs 1. Default-Start: 345 1. Default-Stop: 95 1. Short-Description: Starts/stop the "at" daemon 1. Description: Runs commands scheduled by the "at" command at the time 1. specified when "at" was run, and runs batch commands when the load 1. average is low enough. ### END INIT INFO

例如启动:虚拟终端 一般启动六个虚拟终端: tty1:2345:respawn:/sbin/mingetty tty1 tty2:2345:respawn:/sbin/mingetty tty2 tty2:2345:respawn:/sbin/mingetty tty3 每个虚拟终端被启动之后,会立即通过此终端附加一个应用程序----login

如果默认级别为5,还会启动一个图形虚拟终端;会附加x应用程序

注意:有一个特殊的链接,/etc/rc.d/rc3.d为例 s99local,指向/etc/rc.local脚本;

功能:哪些不便定义为服务脚本,设定开机自动运行时,可直接把命令写在此脚本中以实现开机运行;

/etc/rc.d/rc.sysinit脚本的功能 1,根据配置文件中的设定来设定主机名(读取/etc/sysconfig/network文件中的hostname进行) 2,打印文本欢迎信息; 3,激活SElinux和udev 4,挂载所有定义在/etc/fstab文件中的文件系统 5,激活swap设备 6,检测根文件系统,并实现以读写方式重新挂载 7,设置系统时钟 8,根据/etc/sysct1.conf文件设定内核参数的值 9,激活lvm和raid设备 10,加载额外设备的驱动程序 11,清理操作

系统启动流程:POST--->BIOS(BIOS SEQUENCE) ---->MBR (bootloader)--->kernel(ramdisk)----> /sbin/init 设定默认运行级别---->使用/etc/rc.d/rc/sysinit脚本进行系统初始化---->分别关闭和启动对应级别的所有服务-->启动字符终端--->启动图形终端(如果默认级别为5)---->打印登陆提示符

注意: 1,centos 6的init程序为upstart,其配置文件为/etc/init/*.conf;此些配置遵循upstart语法格式进行编程; 2,centos 6为了和centos兼容,centos 6服务控制事实上大多数并没有使用upstart脚本来控制,而依然使用的是sysV风格的脚本