Linux系统启动流程与内管管理(上)

在讲linux系统启动流程之前,来讲讲linux的组成,这样能能帮助我们深入了解系统的启动流程,废话不多说直接上系统启动流程图

linux组成

linux:kernel+rootfs

kenrel的作用:进程管理、内存管理、网络管理、驱动程序、文件系统、安全管理等

rootfs:程序和glibc

库:函数结合,function,调用接口(头文件负责传输)

过程调用:procedure,无返回值

函数调用:function

程序:二进制执行文件

内核设计流派

单内核:把所有功能集成与一个程序

如:linux

微内核:每种功能使用一个单独的子系统实现

如:windows,Solaris

内核

linux内核特点

支持模块化:.ko(内核对象)

如:文件系统,硬件驱动,网络协议等,支持内核模块的动态加载和卸载

组成部分

核心文件/boot/vmlinuz-VERSION-release

ramdisk:辅助的伪根系统

CentOS5:/boot/initrf-VERSION-release.img

CentOS6.7:/boot/initramfs-VERSION-release.img

模块文件:/lib/modules/VERSION-release

CentOS6的启动流程

加载BIOS的硬件信息,获取第一个启动设备

读取第一个启动设备MBR的阴引导载程序grub的启动信息

加载核心操作系统的黑信息,核心开始解压缩,并尝试驱动硬件设备

核心执行init程序并获取运行信息

INIT执行/etc/rc.d/rc.sysinit文件

启动核心的外挂模块(/etc/modprobe.conf)

INIT执行各个批处理文件

INIt执行/etc/rc.d/rc.local

执行/bin/login程序,等待用户登录

登录之后打开开始以shell控制主机

系统整体的启动流程可以分为以下几个过程

1、  加电自检:power  on system  test(POST)

自检主要检测一下硬件设备是否存在并能正常运行,如:CPU,内存,硬盘是否存在并能正常运行;CPU风扇是否能够正常运转散热;以及一些外围的输入输出设备是否存在。有些设备存在与否都不影响系统地正常启动,如鼠标,键盘等

这些自检的功能是由一个软件程序来实现的,这个软件程序叫做:BIOS(Basic Inout Output System)它装载与一个硬件芯片CMOS之上,加电过程是给CMOS通电,然后启动其上的BIOS程序,BIOS根据CMOS上的信息读取其他硬件信息并检测是否存在并能正常运行,之后进行硬件设备的初始化

2、  选择启动 顺序,加载MBR

硬件设备初始化之后,BIOS会列出一些可以启动的装置顺序,读取第一个启动设备中操作系统的核心文件,而这个核心文件是由Boot Loader(引导加载器)的管理程序来管理的,Boot Loader主要去识别、加载操作系统中的核心文件,并提交到内存中运行,进而来启动操作系统

3、  加载系统内核kernel,执行系统初始化信息

在Boot Loader开始读取操作系统内核文件后,接下来就会将内核文件解压缩后装载到内存当中,内核文件通常存放在/boot目录下有一个vmlinuz打头的文件,但是此时内核程序还没有加载到磁盘,是不能读取系统上的内核文件的,linux中采用了一种叫虚拟文件系统,它跟内核文件放在同一个目录下名为init打头的文件,接下来Boot Loader程序将其加载到内存中,虚拟文件系统被解压缩并且放入内存模拟一个根文件系统,它会提供一个程序,可以加载启动过程中所需要的核心模块,加载完成,会协助内核呼叫/sbin/init来执行后续的正常启动。

4、  启动用户空间第一个执行程序/sbin/init

在内核、硬件及驱动信息加载完毕后,内核会呼叫用户空间的第一个执行程序/sbin/init,init程序主要功能时准备软件运行环境,包括系统的主机名,网络配置,文件系统格式等其他服务的启动管理,而这些所有的操作都是通过init的配置文件来定义。

init程序的类型

Sysv:init,Centos5之前

配置文件/etc/inittab

Upstart:init,CentOS6

配置文件:/etc/inittab, /etc/init/*.conf

Systemd:systemd,CentOS 7

配置文件:/usr/lib/system/system

/etc/system/system

ramdisk

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

ramdisk-->ramfs提高速度

CentOS5:initrd,工具程序:mkinitrd

CentOS6:initramfs,工具程序:mkinitrd,dracut

系统初始化

POST-->BootSequence(BIOS)-->Bootloader(MBR)-->kenel(ramdisk)-->rootfs(只读)-->init(systemd)

运行级别

为系统运行或维护等目的而设定 0-6,共7个级别

0:halt关机

1:single user mode 直接以管理员的身份切入

2:multi  user mode,no NFS多用户模式,启动网络功能,但不会启动NFS,维护模式

3:multi user mod ,text mode,正常模式,文本界面

4:reserved 预留级别,同三级别一样

5:multi user mode graphic mode,多用户模式,正常模式,图形界面

6:reboot  重启

默认级别:3,5

切换级别:init #

查看级别:runlevel; who  -r

init初始化

init读取其初始化文件/etc/inittab

inittab完成如下任务

1、设定默认运行界别

2、运行系统初始化脚本

3、运行指定级别目录下的脚本

4、ctrlaltdel组合件操作

5、定义UPS电源在电源故障/恢复时的操作

6、启动虚拟终端(2345级别)

7、启动图形终端(5级别)

CentOS5的inittab文件

每一行定义一种action以及与之对应的process

#

# inittab       This file describes how the INIT process should set up

#               the system in a certain run-level.

#

# Author:       Miquel van Smoorenburg, <[email protected]>

#               Modified for RHS Linux by Marc Ewing and Donnie Barnes

#

# Default runlevel. The runlevels used by RHS are:

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

id:3:initdefault:

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes

# of power left.  Schedule a shutdown for 2 minutes from now.

# This does, of course, assume you have powerd installed and your

# UPS connected and working correctly.

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5

x:5:respawn:/etc/X11/prefdm –nodaemon发

id:runlevels:action:process   设定默认运行级别

id:标识

runlevel:在那个级别运行慈航

action在什么情况下执行慈航

process:要运行的程序

si::sysinit:/etc/rc.d/rc.sysinit 系统初始化脚本

action

initdefault:设定默认运行几倍

sysinit:系统初始化

wait:等待级别奇幻至此级别时执行

respawn:一旦程序终止,会重新启动

/etc/rc.d/rc.sysinit 系统初始化

该脚本完成如下工作

  1. 激活udev和selinux
  2. 根据/etc/sysctl.conf文件来设定内核参数
  3. 设定始终
  4. 装载键盘映射
  5. 启用交换分区
  6. 设置主机名
  7. 根文件系统检测,并以读写方重新挂载
  8. 激活RAID和lvm设备
  9. 启用磁盘配额
  10. 根据/etc/fstab检查并挂载其他文件系统
  11. 清理过期的锁文件的pid文件

/etc/rc.d/rc

说明:rc  N –>意味着读取/etc/rc.d/rcN.d/

K*:K##*;##运行次序,数字越小,越先运行,数字越小的服务,依赖的服务先关闭,而后关闭被依赖的服务

S*:S##*;##运行次序;数字越小,越先运行,;数字越小的服务,被依赖的服务先启动,而启动依赖的服务后

for  I    in   /etc/rc3.d/K*;do

$I  stop

done

for I in /etc/rc3.d/S* ;do

$i start

done

关闭或启动的优先次序,数据越小越优先被选定,先关闭以K开头的服务然后启动以S开头的服务

服务类脚本/etc/rc.d/init.d    /etc/init.d(链接文件内容跟/etc/rc.d/init.d内容太完全一样)

SysV: /etc/rc.d/init.d

服务名  {start | stop | restart |status |reload |configtest }

chkconfig命令

chkconfig  runlevels   ss(启动次序)   kk(关闭次序)

当chkconfig命令来为此脚本在rc#.d目录创建链接时,runlevel表示默认创建为S*开头的链接,除此之外的级别默认创建为K*开头的链接,S后面的启动优先级为SS所表示的数字,K后面关闭次序KK所表示的数字,“—”表示设有默认为S*开头的链接

description:用于说明此脚本的简单功能:“\”续行

chkconfig  --list:查看所有独立守护服务的启动设定

chkconfig –list   service_name

chkconfig –add  service_name

chkconfig –del service_name

chkconfig –35  service  off

chkconfig –level service_name {on|off}

如果省略级别指定,默认为2345级别

/etc/rc.d/rc.local:系统最后启动的一个服务,准确的说应该执行的一个脚本

守护进程的类别(像第三方的应用程序)

独立守护进程

xinetd:超级独立守护进程 (代理人)

瞬时守护进程:不需要关联至运行级别,被xinetd进程所管理

进入的请求首先被xinetd代理

配置文件:/etc/xinetd.conf   /etc/xinetd.d/serviername

与libwrap.so文件链接

用chkconfig控制的符

chkconfig tftp  on

service命令:手动管理服务

service 服务   start | stop  |restart

service  --status-all  显示所有服务的状态

时间: 2024-08-02 11:04:36

Linux系统启动流程与内管管理(上)的相关文章

Linux系统启动流程、内核及模块管理

Linux系统启动流程.内核及模块管理 Linux系统的组成部分组成:内核+根文件系统(kernel+rootfs)内核(kernel): 进程管理(创建.调度.销毁等).内存管理.网络管理(网络协议栈).驱动程序.文件系统.安全功能IPC:Inter Process Communication机制本地进程间通信机制:消息队列.semerphor.shm(共享内存)跨主机进程间通信机制:socket等运行中的系统环境可分为两层:内核空间.用户空间内核空间(模式):内核代码(特权级操作-->系统调

linux基础-附件1 linux系统启动流程

附件1 linux系统启动流程 最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序.这一程序通常知道一些直接连接在主板上的硬件(硬盘,网络接口,键盘,串口,并口).现在大部分的BIOS允许你从软盘.光盘或者硬盘中选择一个来启动计算机.下一步,计算机将从你所选择的存储设备中读取起始的512 bytes(比如光盘一开是的512 bytes,如果我们从光盘启动的话).这512 bytes叫做主引导记录MBR (mast

Linux系统启动流程分析与关机流程

Linux 系统启动流程分析 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行 init. 系统初始化. 建立终端. 用户登录系统. init程序的类型: SysV: init, CentOS 5之前, 配置文件: /etc/inittab. Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf. Systemd: systemd, CentOS 7,配置文件: /usr/lib/

Linux系统管理(二):Linux系统启动流程

Linux系统启动流程 从11月底报名马哥的Linux培训班,12月初真正开始学习,已经过去一个多月的时间了,从学习Linux的发展史开始.跟着学习命令行.文件系统挂载与管理.目录.Bash Shell的基本特性等等,Linux真的是博大精深,今天以CentOS 5,CentOS 6的启动过程进行一下简单的总结.由于才疏学浅,知识所限,有些地方分析不妥之处还请各位高手不吝赐教. 系统启动过程主要经过以下几个流程: POST>BootSequence(BIOS)>Bootloader(MBR)&

【转载】Linux系统启动流程

原文:Linux系统启动流程 POST(Power On Self Test/上电自检)-->BootLoader(MBR)-->Kernel(硬件探测.加载驱动.挂载根文件系统./sbin/init) -->init(/etc/inittab:设定默认级别.系统初始化脚本.启动及关闭对应级别的服务.启动终端) 第1步 计算机电源接通后,CPU默认执行 0ffffh:0000h 处的指令(8086是这样,386应该类似),而此内存地址应该存放的就是 BIOS ROM .系统将有一个对内部

Linux系统启动流程(4)制作自定义linux之一

Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一些小问题下可能无需如此庞大的linux.于是根据前几篇所讲的linux中的Centos6版本的系统启动流程,可以对其仿制一个微型的linux系统,里面只添加以下需要的工具即可. 以CentOS6为模板为例: 1.准备环境:VM的操作 这里以VM虚拟机模拟,所有直接对安装了CentOS的虚拟机添加一个

linux系统启动流程一览

加载BIOS的硬件信息并进行自检,然后根据设置取得第一个可启动的设备: 读取并执行第一个启动设备内MBR(master boot record,主引导分区)的boot loader: 依据bootloader的设置加载kernel,kernel开始检测硬件和加载驱动程序: 在硬件驱动成功后,kernel会调用init进程,init进程会取得run-level信息: init执行/etc/rc.d/sysinit文件来准备软件执行的操作环境: init执行run-level的各个服务: init执

Linux系统启动流程及grub重建(1)

日志系统 Linux系统启动流程 PC: OS(Linux) POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab) 启动的服务不同:    运行级别:0-6        0:halt        1: single user mode, 直接以管理员身份切入, s,S,single        2:multi user m

总结:Linux系统启动流程

知识储备:Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行 在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行.一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1. 引导加载程序.包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分.2.Linux内核.特定于嵌入式板子的定制内核以及内核的启动