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
#
# crond Start/Stop the cron clock daemon.
#
# chkconfig: 2345 90 60
# description: cron is a standard UNIX program that runs user-specified \
# programs at periodic scheduled times. vixie cron adds a \
# number of features to the basic UNIX cron, including better \
# security and more powerful configuration options.
[root@localhost ~]#
1,这些脚本开头存在一个注释
#chkconfig levels
2,第二种方法
### BEGIN INIT INFO
# Provides: atd at batch
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 345
# Default-Stop: 95
# Short-Description: Starts/stop the "at" daemon
# Description: Runs commands scheduled by the "at" command at the time
# specified when "at" was run, and runs batch commands when the load
# 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风格的脚本