centos系列的启动流程及基础知识点

下面介绍的是基于Intel x86架构的CentOS系列操作系统的启动流程。

1、Linux系统基础简介

(1)、Linux【系统组成】:内核+应用程序 或 内核+rootfs

(2)、Linux的【运行环境】:内核空间 --------内核进程占用CPU和内存资源总和

用户空间 --------应用程序占用CPU和内存资源总和

(3)、【内核】主要具有6个【功能】:进程管理、文件系统管理、内存管理、网络协议管理、驱动管理、内存功能。

对于内核,有两种设计:单内核、微内核。单内核,是所有功能聚集于一个程序,表现为一个进程。微内核,是所有功能都有单独的子系统。对于Linux系统,采用的是单内核、模块化设计。

(4)、Linux内核的三部分:内核核心文件、内核对象文件、ramdisk

Linux的【核心文件】 ----------/boot/vmlinuz

内核【模块文件】 --------/lib/moduls/2.6.32-573.el6.x86_64/kernel

ramdisk ------------/boot/initramfs-2.6.32-573.el6.x86_64.img  (其以.img结尾)

centos5的ramdisk 为 /boot/initrd -----------用mkinitrd 工具生成

centos6/7的ramdisk 为 /boot/initramfs -------用dacut 工具生成(限于7使用),但也兼容mkinitrd

ramdisk 是双缓冲和双缓存。

2、CentOS6 操作系统启动流程

(1)、POST加电自检

加电自检中,运用ROM中的BIOS程序。主板上ROM中存储的BIOS程序,被主板芯片映射入内存,从而协助CPU完成。

(2)、Bootsequence启动程序

据BIOS找启动程序,找第一个引导程序。根据BIOS的启动顺序,一次访问各个存储设备,检查其MBR中是否有引导程序,如果有则将引导程序加载至内存,并且将硬件的管理权移交给引导程序。

(3)、引导加载器BootLoader

一般使用MBR中的grub,应用grub加载文件系统,grub能提供一个用户菜单,命令行接口交互操作。-----------应用grub legacy。

引导程序grub,开始加载stage1.5,以驱动根文件系统,然后从根设备加载stage2至内存,stage2的代码将会从同一磁盘分区加载kernel至内存,同时将硬件的管理权移交给kernel

(4)、加载内核kernel ----------------内核核心文件放在【基本分区】上

对内核进行初始化,加载硬件的驱动程序。

kernel试图挂载根文件系统,如果其内部有直接编译成内核的文件系统驱动程序,则无需其他辅助直接以只读方式挂载根文件系统即可,否则,必须依赖于ramdisk提供的临时根文件系统作为过渡,待根文件系统驱动成功以后,完成切换的工作,以只读方式挂载真正的文件系统。

(5)、加载根文件系统rootfs -----以只读的方式挂载根文件系统。

如果没有驱动,借助于ramdisk加载驱动。

(6)、运行用户空间的第一个应用程序: /sbin/init。

CentOS 6的Init程序为:upstart(基于事务驱动)。

配置文件:/etc/inittab ----------仅定义默认运行级别

/etc/init/*.conf --------rcS.conf(系统初始化脚本); rc.conf(运行级别关闭或开启系统服务的任务); start-ttys.conf(终端相关的任务); prefdm.conf(图形界面的任务)。

(7)、设定默认运行级别 ----------/etc/inittab

(8)、系统初始化 ------------/etc/init/*.conf

(9)、并行执行任务:定义ctrl+alt+del热键功能;关闭对应级别下应停止的服务,开启对应级别下应开启的服务;电源管理;dbus管理等。根据运行级别,选择打开的终端数量及位置。

(10)、登录提示符

使用mingetty命令来调用login命令,来为用户打印登录提示符。

3、CentOS5基础

(1)、CentOS基础

CentOS5的7个运行级别为0-6,0为关机、6为重启、1为单用户模式、2-5为多用户模式,3为多用户的命令行界面,5为多用户的图形化界面。

查看运行级别:# who -r 或 # runlevel

切换运行级别:# init 0-6

CentOS5的第一个引用程序为Init,其配置文件为/etc/inittab。配置文件指明系统初始化的任务

执行【规定的任务】,格式为:id:runlevels:action:process。 action表示启动此任务,通常为sysinit,一般是运行/etc/rc.d/rc.sysinit脚本。所有由rc脚本关闭或启动的链接文件的源文件都在/etc/rc.d/init.d,该目录创建了链接/etc/init.d。

在init引导启动用户空间进程时,不需要写在系统服务中的内容,写在/etc/rc.d/rc.local脚本中。

(2)、chkconfig命令

chkconfig命令 ------------查看和管理系统服务的运行状态。

# chkconfig --list [name]

# chkconfig --add name

# chkconfig --del name

修改/etc/rc.d/rc#.d/,管理系统服务。例如:# chkconfig: 2345 90 60 (其中,2345为运行级别,90为开启的优先级,60为关闭的优先级。)

单独制定系统服务开启或关闭:# chkconfig [--level levels] name <on|off|reset>

在init引导启动用户空间进程时,不需要写在系统服务中的内容,写在/etc/rc.d/rc.local脚本中。

(3)CentOS5操作系统的启动流程

1)、POST加电自检

加电自检中,运用ROM中的BIOS程序。主板上ROM中存储的BIOS程序,被主板芯片映射入内存,从而协助CPU完成。

2)、Bootsequence启动程序

据BIOS找启动程序,找第一个引导程序。根据BIOS的启动顺序,一次访问各个存储设备,检查其MBR中是否有引导程序,如果有则将引导程序加载至内存,并且将硬件的管理权移交给引导程序。

3)、引导加载器BootLoader

一般使用MBR中的grub,应用grub加载文件系统,grub能提供一个用户菜单,命令行接口交互操作。-----------应用grub legacy。

引导程序grub,开始加载stage1.5,以驱动根文件系统,然后从根设备加载stage2至内存,stage2的代码将会从同一磁盘分区加载kernel至内存,同时将硬件的管理权移交给kernel

4)、加载内核kernel ----------------内核核心文件放在【基本分区】上

对内核进行初始化,加载硬件的驱动程序。

kernel试图挂载根文件系统,如果其内部有直接编译成内核的文件系统驱动程序,则无需其他辅助直接以只读方式挂载根文件系统即可,否则,必须依赖于ramdisk提供的临时根文件系统作为过渡,待根文件系统驱动成功以后,完成切换的工作,以只读方式挂载真正的文件系统。

5)、加载根文件系统rootfs -----以只读的方式挂载根文件系统。

如果没有驱动,借助于ramdisk加载驱动。

6)、运行用户空间的第一个应用程序: /sbin/init。

kernel试图启动第一个进程:/sbin/init,而后kernel转入后台,将用户空间的进程管理任务交给init进程来完成

配置文件:/etc/inittab  /etc/init/*.conf  /etc/rc.d/rc.sysinit  /etc/rc.d/rc

7)、执行/sbin/init 和 /etc/inittab文件

8)、设置默认的运行级别

9)、执行/etc/rc.d/rc.sysinit脚本,完成系统初始化

10)、执行/etc/rc.d/rc脚本,关闭对应级别下应停止的服务,开启对应级别下应开启的服务

11)、设置热键,如:Ctrl+Alt+Del热键功能

12)、UPS电源的失效与恢复

13)、生成终端,默认启动图形界面。

4、Bootloader

grub通用统一加载器有两种,即grub legacy和grub2。

grub legacy分为三个阶段,分别是第一阶段、第二阶段和中间的1.5阶段。中间阶段的作用是,让第一阶段的引导程序识别第二阶段分区的文件系统。stage2提供了很多功能,其中最重要的是加载操作系统的内核核心文件,还可以提供菜单和交互接口、允许用户编辑菜单、命令行操作模式、具身份验证机制。

grub命令行常用的6个命令如下:

1)、help:获得grub命令的名称列表

2)、help GRUB_CMD:特定命令的详细帮助信息

3)、root (hd#,#):指定grub程序的根设备(磁盘的指定分区)。hd# 为磁盘编号,# 为分区编号,# 一般是从0开始的数字,如0表示第一个分区,如 (hd0,0),表示当前计算机上的第一块磁盘的第一个分区。

4)、find (hd#,#):指定分区中搜索文件,显示出文件所在的位置

5)、kernel /PATH/TO/KERNEL_CORE_FILE:本次启动的内核文件的绝对路径。额外内核参数:ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}

6)、initrd /PATH/TO/initramfs-VERSION-release.img:内核所对应的ramdisk(ramfs)文件

grub的配置文件为 /boot/grub/grub.conf 和 /etc/grub.conf(链接)。配置文件里的内容如下:

default=0 ------默认启动菜单项,title是从0开始编号

timeout=5 ------倒计时

splashimage=(hd0,0)/grub/splash.xpm.gz -----图片背景

hiddenmenu ------------(是否)隐藏grub的启动菜单

password --md5 CRYPTED_PASSWORD ------------菜单的保护密码

title CentOS 6 (2.6.32-573.el6.x86_64) ------菜单标题,可多个title

root (hd0,0)

kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=5ebb0e76-bb19-4a80-9c70-0d101c0778e1 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-573.el6.x86_64.img

password --md5 CRYPTED_PASSWORD

5、CentSO7 操作系统启动流程

(1)、POST加电自检

加电自检中,运用ROM中的BIOS程序。主板上ROM中存储的BIOS程序,被主板芯片映射入内存,从而协助CPU完成。

(2)、Bootsequence启动程序

据BIOS找启动程序,找第一个引导程序。根据BIOS的启动顺序,一次访问各个存储设备,检查其MBR中是否有引导程序,如果有则将引导程序加载至内存,并且将硬件的管理权移交给引导程序。

(3)、引导加载器BootLoader

一般使用MBR中的grub2,应用grub2加载文件系统,grub2能提供一个用户菜单,命令行接口交互操作。

(4)、装载引导程序的配置文件:/etc/grub.d /etc/default/grub /boot/grub2/grub.cfg

(5)、加载initramfs驱动模块

(6)、加载内核kernel ----------------内核核心文件放在【基本分区】上

对内核进行初始化,加载硬件的驱动程序。

(7)、内核以只读方式挂载rootfs,启动systemd进程。

(8)、执行initrd.*.target所有的unit,包括挂载/etc/fstab所有有效的文件系统

(9)、根切换

(10)、systemd执行默认的target

6、centos7基础

centos7的init程序采用systemd风格,systemctl命令,使用兼容以前的版本,所以也可以使用service类的命令。

Systemd具有许多centos6里面没有的四个特点:(1)、并行开启,即在系统引导的时候可以实现服务的并行开启;(2)、按需激活,即能够实现按需激活进程,即在系统启动时,需要随系统启动服务,其服务进程并没有启动,但是Ststemd为每一个此类服务进程都注册了套接字,我们称这种服务处理方式为“半激活状态”。(3)、快照功能,即能够对当前系统的用户空间的每个进程进行状态快照,以后如果进程出现问题或故障,可以迅速恢复进程状态至过去的某一时候。(4)、服务控制逻辑,systemd内部有一种基于基于依赖关系来定义的服务控制逻辑。

# systemctl {start|stop|restart|status} name[.service] ----------管理服务

# systemctl set-default {multi-user.target | graphical.target} ----------设置运行级别

# systemctl get-default  -----------设置默认运行级别

# systemctl set-default muti-user.target  ------改回命令行界面

centos7采用unit文件进行核心管理,由Systemd相关的配置文件进行各种标识、识别、和配置功能的实现。unit文件分为    系统服务类、socket、目标类、快照类等几类。这些配置文件主要保存在以下三个文件中:

/etc/lib/systemd/system/*

/etc/systemd/system/* ---------符号链接

/run/systemd/system/* ---------非配置关键项

unit常见的8种类型如下:

Service unit:扩展名为.service ----------用于定义系统服务,可省

Target unit:扩展名为.target ------------init程序的运行级别

Decvice unit:扩展名为.device --------内核识别的设备

Mount unit:扩展名为.mount ------------systemd管理的文件系统的挂载点

automount unit:扩展名为.automount --------------挂载点的位置

Socket:扩展名为.socket -------------标识进程间通信的socket文件

Swap unit:扩展名为.swap ------------标识swap设备

Path unit:扩展名为.path ------------监控指定目录中的一个文件或一个子目录,没有则自动创建。

target unit模拟6中的运行级别:

级别0:runlevel0.target,poweroff.target

级别1:runlevel1.target,rescue.target

级别2:runlevel2.target,multi-user.target:

级别3:runlevel3.target,multi-user.target

级别4:runlevel4.target,multi-user.target

systemd的四种实现方式如下:

(1)、基于socket unit的方式实现进程激活机制

(2)、基于device unit的方式实现设备的自动识别,挂载

(3)、基于bus的激活机制

(4)、基于path的激活机制

如果自行编写unit file,可以直接将文件放置于/etc/systemd/syetem目录中,也可以将其放在/usr/lib/systemd/system/目录中。unit file通常分为三段,分别为 [Unit]、[Service]、[Install],各部分解释如下:

(1)、[Unit]:定义域Unit类型无关的通用选项。

常用的选项语句:

Description ------相关服务描述

After -------服务启动前依赖的内容

before ------------依赖此服务启动的服务

Wants --------指明依赖关系

Requires -----------指明依赖关系

Conflict -----------各unit之间可能存在的冲突

Documentation ---------------管理命令的文档所在位置

(2)、[Service]:定义与系统服务相关的专用的选项语句。

常用的选项语句:

Type ----------定义影响ExecStart及相关参数的功能:simple、forking、oneshot、notify

EnvironmentFile ------------------环境配置文件

ExecStart ----------启动此服务所需要运行的命令或脚本

ExecReload -------------指明重载配置文件所需要运行的命令或脚本

ExecStop --------------指明停止此服务所需要运行的命令或脚本

ExecStartPre -----------指明启动ExecStart所指明的命令【之前】所需要运行的命令或脚本

ExecStartPost -----------指明启动ExecStart所指明的命令【之后】所需要运行的命令或脚本

Restart ------------表示如果服务遇到意外而终止,则会自动重启该服务

(3)、[Install]:服务启动或禁用时用到的专用选项语句

WantedBy ------弱依赖关系

RequiredBy ---------强依赖关系

systemctl命令 ---------------控制系统和服务管理

以下是centos6和centos7实现相同功能,所使用的不同的命令行,及其区别:

(1)、启动:

centos6:service NAME start

centos7:systemctl start NMAE[.service]

(2)、停止:

centos6:service NAME stop

centos7:systemctl stop NMAE[.service]

(3)、重启:

centos6:service NAME restart

centos7:systemctl restart NMAE[.service]

(4)、状态:

centos6:service NAME status

centos7:systemctl status NMAE[.service]

(5)、服务开机自启:

centos6:chkconfig --level runlevels NAME on

centos7:systemctl enable NAME.service

(6)、禁止服务的开机自启:

centos6:chkconfig --level runlevels NAME off

centos7:systemctl disable NAME.service

(7)、查看是否开机自启:

centos6:chkconfig --list NAME

centos7:systemctl is-enabled NAME.service

(8)、条件式重启:

centos6:service NAME condrestart

centos7:systemctl try-restart NAME.service

(9)、重载或重启:

systemctl reload-or-restart NAME.service

(10)、重载或条件式重启:

systemctl reload-or-try-restart NAME.service

(11)、查看是否激活

systemctl is-active NAME.service

(12)、查看所有激活:

systemctl list-units

systemctl list-units --type=NUIT_TYPE:查看指定unit类型的处于活跃状态的服务

systemctl list-units --all:显示所有包括处于活跃状态和处于非活跃状态的各服务

(13)、查看服务的依赖关系:

systemctl list-dependencies NAME.service

(14)、禁止开机自启:

systemctl mask NAME.service

(15)、取消禁止的开机自启:

systemctl unmask NAME.service、

(16)、运行级别之间的切换:

centos6:init #

centos7:systemctl isolate NAME.target

(17)、查看运行级别:

centos6:runlevel :

centos7:systemctl list-units --type=target --all

systemctl get-default

(18)、修改默认运行级别:

systemctl set-default NAME.target

# systemctl halt,systemctl poweroff ------关机

# systemctl reboot ------重启

# systemctl suspend ------挂起

# systemctl hibernate --------休眠

# systemctl hybrid-sleep ----------挂起并休眠

时间: 2024-11-05 17:19:47

centos系列的启动流程及基础知识点的相关文章

CentOS系列开机启动流程

在我们使用Linux操作系统的时候,只要按下电源键,就会出现一些乱七八糟的代码,过一会就会出现登陆界面,那么在这期间系统自己都做了什么?现在就说一下在这这段时间系统做了些什么. 系统初始化流程:                                        POST-->Bootsequence(BIOS)-->Bootloader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()/sbin/in

#23 centos5(RHEL)系列操作系统的启动流程、与命令mkinitrd、dracut的使用

centos(RHEL)系列操作系统的启动流程:Intel x86兼容架构: Linux的系统组成:内核 + 应用程序  GUN/Linux:单纯的指Linux内核: 从硬盘存储和启动操作系统的角度: Linux的系统组成:内核 + 根文件系统(rootfs) 内核功能:进程管理,文件系统管理,内存管理,网络协议,驱动程序,安全功能,... Linux系统的系统运行环境可以分为两部分: 内和空间:内核代码(系统调用) 就是内核进程占用的CPU和内存资源的总和: 用户空间:应用程序(进程或线程)

Linux之Centos系统的启动流程

概述 了解系统的启动流程,有助于我们了解Linux系统上的一些工作原理,有助于我们深入的理解一个系统的运作方式,那么本篇就以CentOS6系统为例,介绍一下有关Linux系统启动相关的内容,分为一下几个部分 1.Linux系统的一些基础概念 2.CentOS6上的启动流程概述 第一章 Linux系统的一些基础概念 Linux系统的组成部分:内核(kernel)+根文件系统(rootfs) rootfs:程序和glibc(GNU发布的libc库)   库:   函数集合,function,调用接口

CentOS 6开机启动流程实验篇

CentOS 6开机启动流程实验篇 centos 系统的启动流程 grub 破坏Linux的核心文件再修复体验系统启动流程 CentOS 6开机启动的具体详情请参见理论篇! 了解了系统启动的基本流程,以下我们通过"破坏式实验",即破坏系统启动过程中的一些关键环节,使系统无法启动,然后我们再通过修复这些文件使得系统正常重启,进而体验Linux系统的启动流程,这些关键环节包括破坏grub三个stage(stage1.stage1-5.stage2) 中的任何一个阶段,甚至是整个grub;

CentOS 6开机启动流程理论篇

CentOS 6开机启动流程理论篇 centos 系统的启动流程 grub 破坏Linux的核心文件再修复体验系统启动流程 概述 任何系统启动的第一步必然是加电,然后计算机硬件会主动地读取BIOS来加载硬件设备信息并检测,之后系统会主动地读取第一个有引导程序的设备,该引导程序(grub)可以指定使用哪个内核来启动,并将其加载至内存当中运行,同时内核还要加载其他硬件设备以及对应的驱动程序,来例主机各个组件开始运行,等所有硬件设备加载完后,系统就真正地启动了,稍后系统会操作一些外部程序开始准备软件的

Linux CentOS 5/6启动流程

CentOS 5/6启动流程 1.加电自检(post) 按开机电源后通过CMOS芯片的BIOS系统检测系统硬件是否正常 2.查找系统引导2.1 通过BIOS中的引导设置BOOT Sequence按次序查找引导程序,通过第一个有引导程序的设备启动: 2.2 加载bootloader,通过bootloader选择需要加载的内核版本,将用户选择的内核版本加载到内存中特定的位置,解压展开,然后将控制全转交给内核 (1)MBR引导程序   446字节:bootloader  64字节:分区表  2:结束标

CentOS 6.X启动流程

CentOS 6.X启动流程 /boot分区 启动引导程序是默认可以识别boot分区的.因此在系统还无法加载硬盘的时候,boot分区是可以识别的! initramfs内存文件系统 CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RAM Disk.他们的作用类似,可以通过启动引导程序加载到内存中,然后加载启动过程中所需要的内核模块[用来模拟真正的Linux文件系统结构,详细信息如下],比如USB.SATA.SCSI硬盘的驱动和LVM.RAID文件

#24 centos6(RHEL)系列操作系统的启动流程、与命令chkconfig、grub的使用

所有由rc脚本关闭或启动的链接文件的原文件都存在于/etc/rc.d/init.d,系统为了方便使用,为此目录创建了链接/etc/init.d 所有/etc/inid.d(/etc/rc.d/init.d)目录中的脚本执行方式: # /etc/init.d/srv_script {start|stop|restart|status} # service srv_script {start|stop|restart|status} chkconfig命令: chkconfig - updates

#25 centos7(RHEL)系列操作系统的启动流程、systemd的特性、与命令systemctl的使用

systemd的新特性: 1.在系统引导的时候可以实现服务的并行启动: 2.能够实现按需激活进程: 在系统启动时,需要随系统启动服务,其服务进程并没有启动,但是systemd为每一个此类服务进程都注册了对应的套接字:我们称这种服务处理方式为"半激活状态": 3.能够对当前系统的用户空间的每个进程状态快照:以后如果进程出现问题或故障,可以迅速恢复进程状态至过去的某一时刻: 4.systemd内部有一种基于依赖关系来定义的服务控制逻辑: 核心管理概念:unit文件 由systemd相关的配