1、Linux系统启动流程:POST 加电自检 — BIOS(Boot Sequence)–>MBR(bootloader,446)(加载前512字节后的驱动程序,进入/boot目录,加载内核)–>Kernel–>initrd–>(系统根路径 /)(ROOTFS)/sbin/init(/etc/inittab)
2、init程序的类型:
SysV: init, CentOS 5 配置文件:/etc/inittab
Upstart: init,CentOS6 配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7 配置文件:/usr/lib/systemd/system;/etc/systemd/system
init读取其初始化文件:/etc/inittab
初始运行级别(RUN LEVEL)
0:halt 关机
1: single user mode, 直接以管理员身份切入 修改root密码
2:multi user mode, no NFS
3: multi user mode, text mode
4:reserved 保留
5: multi user mode, graphic mode
6: reboot
系统初始化脚本:/etc/rc.d/rc.sysinit
激活udev和selinux;
根据/etc/sysctl.conf文件,来设定内核参数;
设定时钟时钟;
装载键盘映射;
启用交换分区;
设置主机名;
根文件系统检测,并以读写方式重新挂载;
激活RAID和LVM设备;
启用磁盘配额;
根据/etc/fstab,检查并挂载其它文件系统;
清理过期的锁和PID文件;
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别5初始化X11
切换runlevel:init #
查看运行级别:runlevel: who -r
总结:/sbin/init–> (/etc/inittab) –> 设置默认运行级别–> 运行系统初始脚本、完成系统初始化–> (关闭对应下需要关闭的服务)启动需要启动服务–> 设置登录终端
在CentOS 6 init程序为: upstart, 其配置文件:/etc/inittab, /etc/init/*.conf,配置文件的语法遵循upstart配置文件语法格式
3、系统引导grub.conf
default=0 # 设定默认启动的title的编号,从0开始
timeout=5 # 等待用户选择的超时时长,单位是秒
splashimage= # grub的背景图片
hiddenmenu # 隐藏菜单
password xxxxxx / password –md5 编辑加密
title # 内核标题,或操作系统名称,字符串,可自由修改
root (hd0,0) # 内核文件所在的设备;对grub而言,所有类型硬盘一律hd,格式为(hd#,N);hd#,
#表示第几个磁盘;最后的N表示对应磁盘的分区;
kernel # 内核文件路径,及传递给内核的参数
initrd # ramdisk文件路径
4、安装grub :(可修复破坏磁盘前446字节的情况)
# grub
grub> root (hd0,0)
grub> set (hd0)
安装grub第二种方式:(修复1.5阶段)
# grub-install –root-directory=/path/to/boot’s_parent_dir /PATH/TO/DEVICE
5、Kernel初始化的过程:
设备探测
驱动初始化(可能会从initrd(initramfs)文件中装载驱动模块)
以只读挂载根文件系统;
装载第一个进程init(PID:1)
/sbin/init:(读取/etc/inittab)upstart: systemd:
id:runlevels:action:process
id: 标识符
runlevels: 在哪个级别运行此行;
action: 在什么情况下执行此行;
process: 要运行程序;
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
ACTION:
initdefault: 设定默认运行级别
sysinit: 系统初始化
wait: 等待级别切换至此级别时执行
respawn: 一旦程序终止,会重新启动
/etc/rc.d/rc.sysinit:
##: 关闭或启动的优先次序,数据越小越优先被选定
先关闭以K开头的服务,后启动以S开头的服务;
6、chkconfig
# chkconfig: runlevels SS KK 当chkconfig命令来为此脚本在rc#.d目录创建链接时,runlevels表示默认创建为S*开头的链接,-表示没有级别默认为S*开头的链接;除此之外的级别默认创建为K*开头的链接;
S后面的启动优先级为SS所表示的数字;K后面关闭优先次序为KK所表示的数字;
# description: 用于说明此脚本的简单功能; \, 续行
chkconfig –list: 查看所有独立守护服务的启动设定;独立守护进程!
chkconfig –list SERVICE_NAME
chkconfig –add SERVICE_NAME
chkconfig –del SERVICE_NAME
chkconfig [–level RUNLEVELS] SERVICE_NAME {on|off}
如果省略级别指定,默认为2345级别
原创文章,作者:cui,如若转载,请注明出处:http://www.178linux.com/86151