Linux启动过程
1.Linux组成
(1)Linux: kernel+rootfs
- kernel:
进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
- rootfs:存放操作系统和应用有关的相关程序
包括:
库:函数集合, function, 调用接口(头文件负责描述)。.so动态库文件.a静态库文件
过程调用:procedure,无返回值
函数调用:function
程序:二进制执行文件
(2)内核设计流派:
单内核(monolithic kernel): 把所有功能集成于同一个程序eg:Linux
微内核(micro kernel):每种功能使用一个单独子系统实现eg:Windows, Solaris
2.内核
(1)Linux内核特点:
支持模块化:.ko(内核对象)
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
(2)组成部分:
1.核心文件:/boot/vmlinuz-VERSION-release(就是我们常说的内核)
2.ramdisk:
辅助的伪根系统(又叫伪文件系统,放有ext4驱动,相当于开机时模拟一个磁盘)
开机识别,进入boot,识别boot文件系统ext4,进而挂载根
只存放与文件相关的文件
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img
centos6,7文件分开放置
CentOS 6,7: /boot/initramfs-VERSION-release.img只放启动相关文件
模块文件:/lib/modules/VERSION-release
Paste_Image.png
Paste_Image.png
3.CentOS6启动流程
Paste_Image.png1.加载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控制主机
- POST:Power-On-Self-Test
加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、
显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况检测。
- ROM:BIOS,Basic Input and Output System
保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、
开机加电自检程序和系统启动自举程序等。
- RAM:
CMOS互补金属氧化物半导体,保存各项参数的设定
定义引导设备的顺序,第一个有引导程序的设备为本次启动设备
- bootloader: 引导加载器,引导程序
windows: ntloader,仅是启动OS
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存
中的特定空间中,解压、展开,并把系统控制权移交给内核
- MBR:
446: bootloader, 64: 分区表, 2: 55AA标记位
- GRUB:引导计算机程序
stage1:grub有一部分放在BootLoader446字节里,用来引导计算机程序,称为grub的第一阶段
stage1.5:第一阶段只有446字节,不足以引导文件系统,所以会用得到1.5阶段,用于加载boot分区的文件系统,负责boot问题
stage2:进入boot目录,可以进入boot/grub/grub.conf这个配置文件,这个文件包括计算机启动所用的程序,非常重要。包括内核kernel和伪文件系统文件,负责挂载根(该开机时会把boot识别为根)
grub负责进入boot,initramfs负责挂载根
刚挂载时,会把boot认为是根,然后启动内核后,以/为根,chroot切根
- kernel:
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序(借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
- ramdisk:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动
ramdisk --> ramfs 提高速度
CentOS 5: initrd
工具程序:mkinitrd
CentOS 6,7: initramfs
工具程序:mkinitrd, dracut
- 系统初始化:
POST --> BootSequence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init(systemd)
4.init程序的类型:
CentOS 5之前:
第一个进程: init,
配置文件:/etc/inittab
CentOS 6:
第一个进程:init,
配置文件:/etc/inittab, /etc/init/*.conf
CentOS 7:
第一个进程:systemd,
配置文件:/usr/lib/systemd/system
/etc/systemd/system
CentOS6之前 /sbin/init
运行级别:为系统运行或维护等目的而设定;0-6:7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2 : 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别: 3, 5
切换级别:init #
查看级别:runlevel ; who -r
5.init初始化
Paste_Image.png(1)init读取其初始化文件:/etc/inittab
(2)初始运行级别(RUN LEVEL)
(3)系统初始化脚本
(4)对应运行级别的脚本目录
(5)捕获某个关键字顺序
(6)定义UPS电源终端/恢复脚本
(7)在虚拟控制台生成getty
(8)在运行级别5初始化X
6.CentOS 5的inittab文件
配置文件:/etc/inittab
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:动作
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定
Paste_Image.png
7.CentOS 6 /etc/inittab和相关文件
/etc/inittab
设置系统默认的运行级别
id:3:initdefault:
示例:
破解CentOS5和6的root口令
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
/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) 清理操作
说明:rc N --> 意味着读取/etc/rc.d/rcN.d/
K: K##(关闭):##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S: S##(开机启动):##运行次序;数字越小,越先运行;数字
越小的服务,通常为被依赖到的服务,数字的优先级比字母要高
按照字符排序
eg:
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
Paste_Image.png
Paste_Image.png
8.chkconfig命令
(1)查看服务在所有级别的启动或关闭设定情形:
chkconfig [--list] [name]
(2)添加:
SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name
#!/bin/bash
#LLLL 表示初始在哪个级别下启动,-表示都不启动
# chkconfig: LLLL nn nn
编写一个测试的服务:
chkonfig:- 默认开机时所有模式下都不开启
Paste_Image.png Paste_Image.png
(3)删除:
chkconfig --del name
Paste_Image.png
(4)修改指定的链接类型
Paste_Image.pngchkconfig [--level levels] name <on|off|reset>
--level LLLL: 指定要设置的级别;省略时表示2345
Paste_Image.png Paste_Image.png(5)ntsysv命令 一次只能修改一个级别
Tab键选择OK或者Cencel
空格键选择有没有*号,如果有星号,则启动,
如果没有则在次级别下不启动
9.xinetd管理的服务
(1)service 命令:手动管理服务
service 服务 start|stop|restart
service --status-all
(2)瞬态(Transient)服务(非独立服务)被xinetd进程所管理
Paste_Image.png Paste_Image.png进入的请求首先被xinetd代理
(配置文件:
/etc/xinetd.conf 总配置文件
/etc/xinetd.d/<service>)
与libwrap.so文件链接
用chkconfig控制的服务:chkconfig tftp on
可以进入文件可以更改非独立服务状态,改过之后重启服务
Paste_Image.png Paste_Image.png Paste_Image.png
注意:
Paste_Image.png(1)正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一 个服务脚本,而是指向了/etc/rc.d/rc.local脚本
(2)不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动 运行的命令,可直接放置于/etc/rc.d/rc.local文件中
• /etc/rc.d/rc.local在指定运行级别脚本后运行
• 可以根据情况,进行自定义修改
Paste_Image.png
1:2345:respawn(激活):/usr/sbin/mingetty tty1
2:2345:respawn:/usr/sbin/mingetty tty2
...
6:2345:respawn:/usr/sbin/mingetty tty6
mingetty会自动调用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon
Paste_Image.png
总结:
/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> (关闭对应下需要关闭的服务)启动需要启动服务 --> 设置登录终端
CentOS 6 init程序为: upstart,
其配置文件:/etc/inittab, /etc/init/*.conf
配置文件的语法遵循upstart配置文件语法格式,和CentOS5不同