linux系统启动流程(CentOS5/6/7为例)

一个操作系统要完整启动起来需要哪些步骤呢?今天以CentOS为例探索一下linux的启动流程;

一、Linux系统的组成--kernel+rootfs(根文件系统)

kernel: 内核,进行进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等等

rootfs: 根文件系统

1.内核设计流派:

单内核(monolithic kernel): Linux

把所有功能集成于同一个程序

微内核(micro kernel): Windows, Solaris

每种功能使用一个单独子系统实现

2. Linux内核特点:

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

如:文件系统,硬件驱动,网络协议等

支持内核模块的动态装载和卸载

组成部分:

核心文件:放置在/boot/分区下的vmlinuz-VERSION-release.el[567].X86_64

模块文件:/lib/modules/VERSION/kernel目录下

ramdisk:辅助的伪根系统,用于内核不能驱动文件系统时临时驱动;

5:/boot/initrd-2.6.18-398.el5.img

6/7:

/boot/initramfs-2.16.32-573.el6.x86_64.img

/boot/initramfs-3.10.0-327.el7.x86_64.img

二、启动流程详解:

第一部分针对的是内核空间的系统初始化:

Step1.POST:Power-On Self Test 加电自检

那么谁来执行此次检测操作--答案是只有cpu可以进行运算当然是由它来进行

由于刚接通电源时,内存是没有数据的。因此,x86架构的主板上的ROM就可以供应这样的数据;

主板上的芯片:南桥北桥芯片。就可以把ROM存储器里的内容直接映射到内存;从而能够让CPU读取和加载指令和数据;

因此我们可以说,X86架构的CPU可以线性寻址的物理存储空间:ROM + RAM;

Step2.BootSequence:可以理解为启动顺序;

第一步自检成功,可以正常运行之后。系统应该去寻找包含操作系统的硬件设备,完成系统启动;

而BootSequence的作用就是:决定到何种硬件设备上去加载操作系统;是Removable Device?还是    Hard Drive、CD-ROMS?亦或是网络启动?

而加载方式是:按照指定的次序查找各个引导设备,第一个被找出具有引导程序的设备即成为本次启动所用到的设备;

Bootloader:引导加载器,也是一个程序;存在于硬盘的0磁道0扇区共512字节,其中

446B bootloader

64B  FAT 分区表

其余2字节 55AA 是结束标记

那么Bootloader有哪些呢:

在Windows里是NTLDR,全称是NT Loader,是系统加载程序;

Linux:

1.LILO(Linux Loader): 早期引导程序,到目前位置也是使用非常广泛的一种引导程序。但是在我们 计算机里不常用,因为不支持大硬盘启动(不超过1024柱面);安卓手机一般用的就是这个;

2.GRUB(GRand Uniform Bootloader): 一般架构在服务器和普通PC上;还可以引导unix甚至是Windows(8之前);

GRUB提供的功能:

1.为用户提供一个菜单,菜单中列举的是各个可以启动的操作系统的内核;

2.可以将用户选定的内核的核心文件装载到内存中去,解压缩并且展开,grub将系统控制权移交给内核;

3.提供一个交互式的命令行接口;

4.提供菜单和内核启动的安全保障;

Step3.内核自身初始化:

1) 探测能够识别到的所有的硬件设备

2) 加载硬件的驱动程序;有可能需要用到ramdisk

3) 以只读的方式挂载根文件系统

4) 运行用户空间的第一个应用程序 /sbin/init

Step4.init程序的类型

CentOS 5及之前,SysV Init - Classic Init;配置文件:/etc/inittab只有这一个

CentOS 6 :upstart init 配置文件:有/etc/inittab 但几乎被废弃!唯一的功能是设置启动级别,会在后面说到,其余的配置文件都在 /etc/init/*.conf

CentOS 7 : 完全废弃了inittab文件,但依然存在,只是简单说明了CentOS 7已经不使用这个文件而是使用全新的Systemd方式;其配置文件/usr/lib/systemd/system/*

/etc/systemd/system/*

第二部分是用户空间的开启:

kernel加载了第一个程序Init程序后,转入后台,init进程接管进程管理的任务

Step1:设置系统的运行级别--runlevel

表示process的action要在哪个级别下运行,该段中可以定义多个运行级别,

0:表示关机

1:表示单用户模式,在这个模式中,用户登录不需要密码,默认网卡驱动是不被加载,一些服务不能用2:表示多用户模式,NFS服务不开启

3,表示命令行模式

4,这个模式保留未用

5,表示图形用户模式

6,表示重启系统

其中常用的是3和5,0和6慎用,1的单用户模式是个对系统来说及其危险的模式,所以也只有在像root用户密码忘记后使用该模式;

centos 5 –/etc/inittab内容示例:

id:3:initdefault:                     # 定义默认运行级别

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

ca::ctrlaltdel:/sbin/shutdown -t3 -r now  #定义快捷键操作

# 按下快捷键3秒后重启系统

CentOS6中,已经不再定义其他内容,进有默认开机启动流程,转用下列脚本来完成原有执行操作

Step2:执行/etc/rc.d/rc.sysinit脚本,实施系统初始化;

 /etc/rc.d/rc.sysinit: 在所有运行级别下,init 依赖/rc.sysinit 进行系统初始化

作用:

(1) 设置主机名

(2) 设置欢迎信息

(3) 激活udev和selinux

(4) 挂载/etc/fstab文件中定义的文件系统

(5) 检测根文件系统,并以读写方式重新挂载根文件系统

(6) 设置系统时钟

(7) 激活swap设备

(8) 根据/etc/sysctl.conf文件设置内核参数

(9) 激活lvm及software raid设备

(10) 加载额外设备的驱动程序

(11) 清理操作

Step3.rc 脚本--对应/etc/rc.d/rc$runlevel.d/目录下的所有服务的链接--所有以K开头的服务停掉,S开头的服务开启

说明: rc$runlevel.d –> 意味着读取/etc/rc.d/rc#.d/下脚本

(目录下全部文件均为软链接,源为init.d下的对应脚本)

K*: K##*: ##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务

S*: S##*: ##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务

Step4.使用mingetty命令调用login程序,为用户打印登陆提示符;

时间: 2024-12-12 23:09:42

linux系统启动流程(CentOS5/6/7为例)的相关文章

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

在讲linux系统启动流程之前,来讲讲linux的组成,这样能能帮助我们深入了解系统的启动流程,废话不多说直接上系统启动流程图 linux组成 linux:kernel+rootfs kenrel的作用:进程管理.内存管理.网络管理.驱动程序.文件系统.安全管理等 rootfs:程序和glibc 库:函数结合,function,调用接口(头文件负责传输) 过程调用:procedure,无返回值 函数调用:function 程序:二进制执行文件 内核设计流派 单内核:把所有功能集成与一个程序 如:

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

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

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

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

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系统启动流程一览

加载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系统启动流程

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

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

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

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