Linux启动过程

1.Linux组成

(1)Linux: kernel+rootfs
  • kernel:
进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
  • rootfs:存放操作系统和应用有关的相关程序
    包括:
库:函数集合, function, 调用接口(头文件负责描述)。.so动态库文件.a静态库文件
过程调用:procedure,无返回值
函数调用:function
程序:二进制执行文件
Linux启动过程_第1张图片
(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
Linux启动过程_第2张图片
Paste_Image.png
Linux启动过程_第3张图片
Paste_Image.png

3.CentOS6启动流程

Linux启动过程_第4张图片
Paste_Image.png

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控制主机

  • 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初始化

(1)init读取其初始化文件:/etc/inittab
(2)初始运行级别(RUN LEVEL)
(3)系统初始化脚本
(4)对应运行级别的脚本目录
(5)捕获某个关键字顺序
(6)定义UPS电源终端/恢复脚本
(7)在虚拟控制台生成getty
(8)在运行级别5初始化X

Linux启动过程_第5张图片
Paste_Image.png

6.CentOS 5的inittab文件

 配置文件:/etc/inittab
 每一行定义一种action以及与之对应的process
id:runlevel:action:process

action:动作
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定


Linux启动过程_第6张图片
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
Linux启动过程_第7张图片
Paste_Image.png
Linux启动过程_第8张图片
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:- 默认开机时所有模式下都不开启


Linux启动过程_第9张图片
Paste_Image.png
Linux启动过程_第10张图片
Paste_Image.png

(3)删除:

chkconfig --del name
Paste_Image.png

(4)修改指定的链接类型

chkconfig [--level levels] name
--level LLLL: 指定要设置的级别;省略时表示2345

Paste_Image.png

(5)ntsysv命令 一次只能修改一个级别
Tab键选择OK或者Cencel
空格键选择有没有*号,如果有星号,则启动,
如果没有则在次级别下不启动

Paste_Image.png
Linux启动过程_第11张图片
Paste_Image.png

9.xinetd管理的服务

(1)service 命令:手动管理服务

service 服务 start|stop|restart
service --status-all

(2)瞬态(Transient)服务(非独立服务)被xinetd进程所管理

进入的请求首先被xinetd代理
(配置文件:
/etc/xinetd.conf 总配置文件
/etc/xinetd.d/)
与libwrap.so文件链接
用chkconfig控制的服务:chkconfig tftp on

Linux启动过程_第12张图片
Paste_Image.png
Linux启动过程_第13张图片
Paste_Image.png

可以进入文件可以更改非独立服务状态,改过之后重启服务


Linux启动过程_第14张图片
Paste_Image.png
Paste_Image.png
Linux启动过程_第15张图片
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在指定运行级别脚本后运行
• 可以根据情况,进行自定义修改


Linux启动过程_第16张图片
Paste_Image.png
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
Linux启动过程_第17张图片
Paste_Image.png

总结:

/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> (关闭对应下需要关闭的服务)启动需要启动服务 --> 设置登录终端
 CentOS 6 init程序为: upstart, 
其配置文件:/etc/inittab, /etc/init/*.conf
配置文件的语法遵循upstart配置文件语法格式,和CentOS5不同

你可能感兴趣的:(Linux启动过程)