Centos系统的启动流程
Linux组成
Linux:kernel+rootfs
kernel:进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能
rootfs:程序和glibc
库:函数集合function,调用接口(头文件负责描述)
过程调用:procedure,无返回值
函数调用:function
程序:二进制程序文件
内核
内核设计流派
单内核(monolithic kernel):Linux
把所有功能集成于同一个程序
微内核(micro kernel):Windows,Solaris
每种功能使用一个单独子系统实现
Linux内核特点
支持模块化:.ko(内核对象);
如:文件系统、硬件驱动、网络协议等
支持内核模块的动态卸载和装载
lsmod 列出当前系统加载到内存中的驱动模块
组成部分
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根系统
Centos 5:/boot/initrd-VERSION-release.img ramdisk虚拟磁盘
Centos 6,7:/boot/initramfs-VERSION-release.img ramfilesystem虚拟文件系统
模块文件:/lib/modules/VERSION-release
Centos 6启动流程
1、加载BIOS硬件信息,获取第一个启动设备
2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3、加载核心操作系统的核心信息,核心开始解压缩,并尝试所有的硬件设备
4、核心执行init程序,并获取默认运行信息
5、init程序执行/etc/rc.d/rc.sysinit文件
6、启动核心的外挂模块
7、init执行运行的各个批处理文件(scripts)
8、init执行/etc/rc.d/rc.local
9、执行/bin/login程序,等待用户登录
10、登录之后开始以Shell控制主机
Centos 6系统启动的大概流程
ramdisk
ramdisk 内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动
ramdisk(Centos 5) --> ramfs(Centos 6,7) 提高速度
Centos 5:initrd;工具程序 mkinitrd
Centos 6,7:initramfs;工具程序 mkinitrd,dracut
系统初始化
POST --> BootSequence(BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs --> init(systemd)
ramdisk文件制作
1、mkinitrd命令
为当前正在使用的内核重新制作ramdisk文件
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
2、dracut命令
dracut /boot/initramfs-$(uname -r).img $(uname -r)
启程流程详解
init部分
init 程序
类型
Centos5之前
SysV:init
Centos6
Upstart:init
配置文件:/etc/inittab,/etc/init/*.conf
Centos7
Sysetmd:systemd
配置文件:/usr/lib/systemd/systemd
/etc/systemd/system
/sbin/init Centos 6之前
运行级别:为系统运行或维护等目的而设定
0-6:7个级别
0:关机
1:单用户模式single,维护模式;root自动登录;维护模式
2:多用户模式,启动网络功用,但不启用NFS;维护模式
3:多用户模式,正常模式;字符界面
4:预留级别
5:多用户模式,图形界面;正常模式
6:重启
默认级别:3,5
切换级别:init #
查看级别:runlevel;who -r
注意:默认运行级别可修改,但不要修改为0或6
init初始化
init读取其初始化文件:/etc/inittab
初始运行级别
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别5初始化X
Centos 5 /etc/inittab文件
配置文件:/etc/inittab
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait:切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定;/etc/rc.d/rc.sysinit
id:5:initdefault: 默认运行级别为5
si::sysinit:/etc/rc.d/rc.sysinit 系统初始化脚本为/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0 7个级别需要启动的服务scripts放置路径
l1:1:wait:/etc/rc.d/rc 1
....
l6:6:wait:/etc/rc.d/rc 6
通过/etc/rc.d/rcN.d/下所有链接文件来决定如何启动或关闭服务;所有以S开头的,都被传递start参数以启动;所有以K开头的,都被传递stop参数以停止
注意:rc N --> 读取/etc/rc.d/rcN.d/
K*:K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到的别的服务
S*:S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
例:运行apache服务,先得启动网络服务;关闭时反之,先关apache服务,再关闭网络服务
for srv in /etc/rc.d/rcN.d/K*;do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*;do
$srv start
done
注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;不便或是不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中
ca::ctrlaltdel:/sbin/shutdown -t3 -r now 是否允许按下ctrl+alt+delete重新系统
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" 不间断电源断电关机
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" 不间断电源恢复供电时不重启
1:2345:respawn:/sbin/mingetty tty1 启动6个终端
...
6:2345:respawn:/sbin/mingetty tty6 mingetty会自动调用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon 在5模式下会启动图形界面
Centos 6 /etc/inittab和相关文件
配置文件:/etc/inittab,/etc/init/*.conf
/etc/inittab
id:3:initdefault: 设置系统默认运行级别
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
注意:Centos 6的init程序为:upstart;配置文件:为/etc/inittab,/etc/init/*.conf 配置文件遵循upstart配置文件语法格式与Centos 5不同
/etc/rc.d/rc.sysinit初始化脚本
1、设置主机名
2、设置欢迎信息
3、激活udev和selinux
4、挂载/etc/fstab文件中定义的文件系统
5、检测根文件系统,并以只读方式重新挂载根文件系统
6、设置系统时钟
7、激活swap设备
8、根据/etc/sysctl.conf文件设置内核参数
9、激活lvm及software raid设备
10、加载额外设备驱动程序
11、清理操作
服务管理
服务
独立服务管理
chkconfig命令
chkconfig [--list] [name] 查看服务在所有级别的启动或关闭设定情形
chkconfig --add name 添加服务;SysV服务脚本放置于/etc/rc.d/init.d(/etc/init.d)
chkconfig --del name 删除服务
chkconfig [--level levels] name <on|off|reset> 指定要设置的级别;忽略时表示2345
ntsysv命令
非独立服务,瞬态服务(Transient):进入的请求首先被xinetd代理
1、service命令:手动管理服务
service 服务 start|stop|restart
service --status-all 显示当前状态的所有服务
2、服务被xinetd进程所管理
配置文件:/etc/xinetd.conf, /etc/xinetd.d/<service>
与libwrap.so文件链接 用chkconfig控制的服务:chkconfig tftp on
系统判断服务是否启动:如果/var/lock/subsys/有对应的服务名命名的文件,系统就认为服务已启动;没有则服务没有启动
总结
/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> (关闭对应级别下需要关闭的服务)启动需要启动的服务 --> 设置登录终端
grub legacy
grub配置文件:/boot/grub/grub.conf --> /etc/grub.conf
grub:GRand Unified Bootloader
grub legacy
stage1:mbr
stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub/)
grub legacy 配置文件
default=# 默认启动菜单项;编号从0开始
timeout=# 用户选择grub选项时的超时时间
splashimage=(hd#,#)/PATH/TO/XPM_FILE.gz 菜单背景图片文件路径
hiddenmenu 隐藏菜单
password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证
title TITLE 菜单标题
root (hd0,0) 查找stage2及kernel文件所在设备分区;为grub的根
kernel /PATH/TO/vmliuz_file 启动的内核
initrd /PATH/TO/initramfs_file 内核匹配的ramfs文件