12、CentOS系统启动路程、grub legacy、Linux内核管理初步

CentOS 5和6的启动流程

Linux: kernel+rootfs(启动顺序)

​ kernel 的功能:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
​ rootfs:
​ glibc

​ 库:函数集合, function, 调用接口 (对于库来说,是二进制程序,但没有自己独立的执行入口,因此无法单独执行,但可以作为别的有单独)
​ 过程调用:procedure
​ 函数调用:function

​ 程序

​ 内核设计流派:
​ 单内核设计:Linux
​ 把所有功能集成于同一个程序;
​ 微内核设计:Windows, Solaris
​ 每种功能使用一个单独子系统实现;

​ Linux内核特点:
​ 支持模块化:.ko
​ 支持模块的动态装载和卸载;

​ 组成部分:
​ 核心文件:/boot/vmlinuz-VERSION-release
​ ramdisk:
​ CentOS 5: /boot/initrd-VERSION-release.img
​ CentOS 6: /boot/initramfs-VERSION-release.img
​ 模块文件:/lib/modules/VERSION-release

CentOS 系统启动流程

​ POST:加电自检;
​ ROM:CMOS
​ BIOS:Basic Input and Output System

​ ROM+RAM

​ BOOT Sequence:
​ 按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备;

​ bootloader: 引导加载器,程序
​ windows: ntloader
​ Linux:
​ LILO:LInux LOader
​ GRUB: GRand Uniform Bootloader
​ GRUB 0.X: GRUB Legacy
​ GRUB 1.x: GRUB2

​ 功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核;

​ MBR:主引导记录。硬盘的 0 磁道的第一个扇区称为 MBR,它的大小是512字节,分为两个部分。
​ 446: bootloader 预启动区
​ 64: fat 判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,运行该区中的代码 2: 55AA 分区结束标志

​ GRUB:
​ bootloader: 1st stage
​ disk: 2nd stage

​ kernel:
​ 自身初始化:
​ 探测可识别到的所有硬件设备;
​ 加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
​ 以只读方式挂载根文件系统;
​ 运行用户空间的第一个应用程序:/sbin/init

​ init程序的类型:
​ SysV: init, CentOS 5
​ 配置文件:/etc/inittab

​ Upstart: init, CentOS 6
​ 配置文件:/etc/inittab, /etc/init/*.conf

​ Systemd:systemd, CentOS 7
​ 配置文件:/usr/lib/systemd/system, /etc/systemd/system

​ ramdisk:

​ 内核中的特性之一:使用缓冲和缓存来回事对磁盘上的文件访问;

​ ramdisk --> ramfs

​ CentOS 5: initrd, 工具程序:mkinitrd
​ CentOS 6: initramfs, 工具程序:mkinitrd, dracut

​ 系统初始化:
​ POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init

Centos 5 加载 init 程序流程

1、运行级别:为了系统的运行或维护等应用目的而设定
0-6:7个级别
0:关机
1:单用户模式(root, 无须登录), single, 维护模式;
2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式;
3:多用户模式,正常模式;文本界面;
4:预留级别;可同3级别;
5:多用户模式,正常模式;图形界面;
6:重启
默认级别:3,5
切换级别:init #
查看级别:runlevel
who -r

[root@localhost ~]# init 3
[root@localhost ~]# runlevel  // 一次显示上一个级别和当前级别
5 3
[root@localhost ~]# who -r
         运行级别 3 2021-10-06 16:10                   最近=5

2、配置文件:/etc/inittab
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait: 切换至此级别运行一次;
respawn:此process终止,就重新启动之;
initdefault:设定默认运行级别;process省略;
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit;

​ id:3:initdefault: // id,运行的级别,action,对应的process
​ si::sysinit:/etc/rc.d/rc.sysinit

​ l0:0:wait:/etc/rc.d/rc 0
​ l1:1:wait:/etc/rc.d/rc 1
​ …
​ l6:6:wait:/etc/rc.d/rc 6

​ 说明:rc 0 --> 意味着读取/etc/rc.d/rc0.d/
​ K*: K##:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;
​ S
: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务;

[root@localhost ~]# ls /etc/rc.d
init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit
[root@localhost ~]# ls /etc/rc.d/rc3.d   // K 开头表示在此级别下启动时默认不启动,S 则默认启动
K01smartd          K60nfs             K89netconsole    S10network         S24nfslock           S50kdump
K02oddjobd         K61nfs-rdma        K89rdisc         S11auditd          S24rpcgssd           S55sshd
K05wdaemon         K69rpcsvcgssd      K92pppoe-server  S11portreserve     S25blk-availability  S58ntpd
K10psacct          K73winbind         K95firstboot     S12rsyslog         S25cups              S80postfix
K10saslauthd       K75ntpdate         K99rngd          S13cpuspeed        S25netfs             S82abrtd
K15htcacheclean    K75quota_nld       S01sysstat       S13irqbalance      S26acpid             S83abrt-ccpp
K15httpd           K76ypbind          S02lvm2-monitor  S13rpcbind         S26haldaemon         S90crond
K15svnserve        K84wpa_supplicant  S05rdma          S15mdmonitor       S26udev-post         S95atd
K30spice-vdagentd  K87restorecond     S08ip6tables     S22messagebus      S28autofs            S99certmonger
K50dnsmasq         K88sssd            S08iptables      S23NetworkManager  S50bluetooth         S99local
[root@localhost ~]# vim /etc/rc.d/init.d/NetworkManager  // K 或 S 后面数字的来源
#!/bin/sh
#
# NetworkManager:   NetworkManager daemon
#
# chkconfig: - 23 84
# description:  This is a daemon for automatically switching network \
#               connections to the best available connection.
#
# processname: NetworkManager
# pidfile: /var/run/NetworkManager/NetworkManager.pid
#
### BEGIN INIT INFO
# Provides: network_manager $network
# Required-Start: messagebus
# Required-Stop: messagebus
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop NetworkManager
# Description: NetworkManager is a tool for easily managing network connections
### END INIT INFO

3、chkconfig 命令------查看服务在所有级别的启动或关闭设定情形
chkconfig [ --list ] [ name ]
添加:sysv 的服务脚本放置于 /etc/rc.d/init.d ( /etc/init.d )

[root@localhost ~]# chkconfig --list NetworkManager  // 查看所有(指定)服务在所有级别下的默认启动情况
NetworkManager  0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
[root@localhost ~]# chkconfig --level 5 NetworkManager off  // 修改某服务在此级别的默认启动情况
[root@localhost ~]# chkconfig --list NetworkManager            
NetworkManager  0:关闭  1:关闭  2:启用  3:启用  4:启用  5:关闭  6:关闭

​ chkconfig --add name
​ 删除:chkconfig --del name
​ 修改指定的链接类型:
​ chkconfig [–level levels] name
​ --level LLLL: 指定要设置的级别;省略时表示2345

​ 注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中

[root@localhost init.d]# vim /etc/rc.d/init.d/testsrv
#!/bin/bash
#
# chkconfig:345 66 33
# description: just test srv script
echo "test srv!" 

[root@localhost init.d]# chmod +x testsrv 
[root@localhost init.d]# ll testsrv 
-rwxr-xr-x. 1 root root 90 106 19:21 testsrv
[root@localhost init.d]# chkconfig --add testsrv   // 添加一个服务
[root@localhost init.d]# chkconfig --list testsrv 
testsrv         0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭
[root@localhost init.d]# ll ../rc0.d/K33testsrv 
lrwxrwxrwx. 1 root root 17 106 19:23 ../rc0.d/K33testsrv -> ../init.d/testsrv
[root@localhost init.d]# ll ../rc3.d/S66testsrv  
lrwxrwxrwx. 1 root root 17 106 19:23 ../rc3.d/S66testsrv -> ../init.d/testsrv
[root@localhost init.d]# chkconfig --del testsrv    // 删除某一个服务     
[root@localhost init.d]# chkconfig --list testsrv      
testsrv 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig --add testsrv”)

4、/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) 清理操作;

总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> 关闭对应下需要关闭的服务,启动需要启动服务 --> 设置登录终端

Centos 6 加载 init 程序流程
init 程序为:upstart, 其配置文件
/etc/inittab,/etc/init/*.conf
注意:/etc/init/*.conf文件语法遵循 upstart 配置文件语法格式。

GRUB

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j5GZwxc6-1634021169901)(C:\Users\wh\AppData\Roaming\Typora\typora-user-images\image-20211007145233296.png)]
、完成系统初始化 --> 关闭对应下需要关闭的服务,启动需要启动服务 --> 设置登录终端

Centos 6 加载 init 程序流程
init 程序为:upstart, 其配置文件
/etc/inittab,/etc/init/*.conf
注意:/etc/init/*.conf文件语法遵循 upstart 配置文件语法格式。

GRUB

[外链图片转存中…(img-j5GZwxc6-1634021169901)]

你可能感兴趣的:(linux,centos,windows)