CenOS/Fedora系统启动的整个流程——符合多数linux系统

本文主要讲述CenOS系统启动的整个流程,同系列系统也基本相符,不同系列Linux也差不多。

对于CentOS系统来说,整个启动过程可分为4个阶段,分别是:

加点自检;

加载MBR;

加载内核并执行初始化信息;

初始化用户空间。

下面就具体来描述每个过程都做了什么。

加电自检(power on system test,POST)

任何一种操作系统的启动,第一步必定是加电自检, 主要功能是装载在硬件芯片CMOS之上的BIOS(Basic Input Output System)来实现,这个程序CMOS会根据CMOS上的配置信息去检测当前计算机是否具有启动系统的基本硬件能力,比如CPU,内存是否正常等等。

选择启动顺序,加载MBR(Master Boot Record,MBR)

完成BIOS初始化之后,BIOS会列出一些可以 启动的装置顺序,然后根据这个顺序去找对应的内核文件。但是由于不同系统的文件系统系统可能会不同,所以就有了一个叫做启动管理程序,来处理文件系统不同 这些问题,而这个程序就叫做Booot Loader,它位于可以启动的第一块硬盘的MBR(Master Boot Record)中。MBR则是位于可以启动的硬盘的第一个扇区之内,Boot Loader还要完成操作系统的识别,加载核心文件的功能,当用户安装多个系统以后,还会提供一个让用户选择要启动的操作系统的菜单。因此当MBR被破坏 以后,Boot Loader也会收到影响,进而就会导致无法启动系统。

加载内核Kernel,并执行系统初始化信息

当Boot Loader读取操作系统内核文件后,接下来就会将内核文件解压后装载到内存之中,并依据内核所提供的功能去测试设备。此时,内核程序还没加载到磁盘,也就是说此时系统还没有磁盘的驱动能力,那又如何加载位于磁盘上的内核文件呢?

Linux采用了一种叫做虚拟文件系统 (Initial RAM DISK)来解决这个问题,它的主要功能是:通过Boot Loader程序加载到内存中,然后这个文件就会被解压展开到模拟的根文件系统中,这个根文件系统能提供一个可运行的程序,通过这个程序加载核心的模块, 完成之后,释放虚拟的文件系统,并挂载真实的根文件系统,完成根切换,之后就能执行正常的启动过程。

启动用户空间的第一个程序,初始化用户空间

1.完成以上三步之后,内核会呼叫用户空间的第一个程序:/sbin/init,这个程序会完成一系列的初始化操作,包括主机名设定,网络配置等操作,所有的这些操作都是在init的配置文件中定义的。因此init配置文件就至关重要。

对于CentOS5:其采用的是SysV init方式,通过脚本启动服务,有依赖关系的服务就会被串行启动,配置文件为/etc/inittab

对于CentOS6:采用Upstart方式进行,进程间的通信通过D-Bus进行,可以基本实现类似并行启动,配置文件为/etc/inittab,/etc/init/*.conf

对于CentOS7:采用了全新的Systemd方式,其特点是只有在服务第一次被启动才会真正启动,其配置文件为/usr/lib/systemd/*

2.init配置文件

在init配置文件中,尤为重要的一项是设置系统的默认运行级别,而在Linux之上,运行级别0-6七种级别,分别是:

0:关闭所有服务,然后关机

1:维护模式,也叫单用户模式,允许root用户可以不用密码直接登录系统

2:维护模式,也叫多用户模式,需要认证,会启动网络

3:正常级别,完全多用户模式,提供文本界面

4:预留级别,暂未使用

5:正常级别:完全多用户级别,提供图形节界面

6:关闭所有服务,重新启动

常看运行级别的方法:runlevel 或者 who -r

切换运行级别的方法:init run_level

在CentOS6中,/etc/inittab文件内容是:

# inittab is only used by upstart for the default runlevel.

#

# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# System initialization is started by /etc/init/rcS.conf

#

# Individual runlevels are started by /etc/init/rc.conf

#

# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf

#

# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,

# with configuration in /etc/sysconfig/init.

#

# For information on how to write upstart event handlers, or how

# upstart works, see init(5), init(8), and initctl(8).

#

# Default runlevel. The runlevels used 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:

因此init的整个处理流程为:

1.通过读取/etc/inittab文件来设定运行级别

2.使用/etc/rc.d/rc.sysinit来初始化系统

3.执行3级别下所设定的操作,并忽略其他级别设定的配置

从上面可以看到,初始化系统是根据/etc/rc.d/rc.sysinit进行的,这个脚本的主要的任务是:

1.根据/etc/sysconfig/network文件来设定主机名

2.打印文本欢迎信息

3.激活SELinux和udev

4.挂载/etc/fatab中定义的文件系统

5.激活swap设备

6.检测根文件系统

7.设置系统时钟

8.根据/etc/sysctl.conf文件来设定内核参数

9.激活LVM和RAID

10.加载驱动程序

11.清理操作

当内核设定运行级别以后,就要去完成对应级别下的操作,而这些级别对应下的任务是/etc/rc.$runlevle.d

/下的操作,不同级别下这些脚本被成为服务脚本,这些脚本决定如何开启或关闭服务,而具体的方式则是系统通过传递S参数来启动服务,传递K来关闭服务;这些服务脚本的定义规范为:

(1)至少接受四个参数:

start:启动服务

restart:重启服务

stop:停止服务

status:查看服务运行状态

(2)脚本的开头

#chkconfig :start_level start_prio stop_prio

#description:description information

这些脚本可以通过/etc/init.d/script_name {start|stop|status|restart}调用,也可以通过service script_name {start|stop|status|restart}调用

GRUB(GRand Unified Bootloader)

1.在系统启动过程中,Boot Loader至关重要,然而Boot Loader处于MBR当中,MBR的大小是512bytes,只有其中的446bytes是用来存放Boot Loader的,为了解决存放Boot Loader的位置空间的大小问题,Linux将Boot Loader的程序分成三个阶段来运行,在Linux上,grub是使用最广泛的启动加载器:

stage1:

执行Boot Loader主程序,这必须安装在MBR中,而且没有安放Boot Loader相关的配置文件

stage1_5:

在MBR随后的分区存放,主要用于与stage2所在的文件系统进行交互

stage2:

通过Boot Loader加载所有配置文件及其相关的参数信息,而这些信息全都存放于/boot目录之下,这些配置文件主要包括:

device.map:定义grub的安装位置

e2fs_stage1_5:ext2文件系统定义

fat_stage1_5:fat文件系统定义

ffs_stage1_5:文件系统定义

grub.conf:grub的配置文件

iso9660_stage1_5:光驱的定义

jfs_stage1_5:jfs文件系统发的定义

menu.lst:链接文件

minix_stage1_5:文件系统的定义

reiserfs_stage1_5:reiser文件系统的定义

splash.xpm.gz:背景图片

stage1:stage1相关的信息

stage2:stage2相关的信息

ufs2_stage1_5:ufs文件系统的定义

vstafs_stage1_5:vfs文件系统的定义

xfs_stage1_5:xfs文件系统的定义

2.Linux一切皆文件,对grub的配置也不例外,其配置文件为/etc/grub.conf

(1)设置grub的方法一,直接修改其配置文件

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/sda3

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0 #设定默认要启动的内核

timeout=5 #设定可供用户选择的超时时长

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

hiddenmenu #隐藏选择菜单

title CentOS (2.6.32-431.el6.x86_64) #设定操作系统的名称

root (hd0,0) #设定要启动的内核所在的位置

kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=908a3c89-4592-4dc4-8dc2-b5261f7c0e83 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-431.el6.x86_64.img #设定辅助内核引导的ramdisk文件的位置

(2)通过命令行接口

进入grub命令行,可以在启动时根据提示的信息进入,在对应的title输入c就能进入,

常用的grub命令有:

help:获取帮助信息

find:查找文件

root:设定要启动的内核所在的位置

kernel:设置内核文件路径

initrd:设定ramdisk的位置

Grub应用实例

为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;

(1) 为硬盘新建两个主分区;并为其安装grub;

(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

(4) 为grub提供配置文件;

(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

具体过程为:

(1)创建分区,结果为

(2)格式化分区:

(3)创建目录

(4)挂载

(5使用grub-install安装grub

(6)提供内核文件和ramdisk文件

(7)为rootfs提供bash,ls,cat程序

复制库文件:

(8)为grub提供配置文件

至此,制作完成。

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

CenOS/Fedora系统启动的整个流程——符合多数linux系统的相关文章

[Linux学习笔记] Linux系统引导流程(一)

前面我们已经介绍过以CentOS为例的Linux系统的安装以及Linux常用命令的使用,本节内容我们将介绍Linux系统引导流程.当按下电源的那一刻,到我们看到用户界面,这其中都发生了些什么呢?赶快来一探究竟. 下图为Linux系统引导流程过程图: 以下对Linux引导流程过程做一个简单的说明: 1. POST加电自检 POST(POST ON SELF TEST)首先对每一个设备进行检查,完成后会寻找存有引导记录的设备,找到读入操作系统的引导记录,将系统控制权交给引导记录. 2. MBR引导

Linux系统开机启动流程介绍

一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取inittab文件执行rc.sysinit.rc等脚本 7.启动mingetty进入系统登录界面 三.详细剖析linux系统启动过程 1.POST开机自检 电脑主机打开电源的时候随后会听到滴的一声响系统启动开始了开机自检POST-power on self Test自检开始这个过程中主要是检测计算机硬

Linux系统入门---开机启动流程

目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: 如果修改级别 案例3:救援模式 四.修改CentOS7网卡名称为eth0和eth1 1.环境准备 2.用命令配置网卡 方法1: 方法2: 3.系统基本环境优化 五.Systemd 进程管理 1.systemctl管理服务的启动.重启.停止.重载.查看状态等常用命令 2.systemctl设置服务开

Fedora 24 Linux系统将于6月14日正式发布

去年11月3日,Fedora Project发布了Fedora 23,时隔7个月,Fedora 24也将正式降临.最新消息显示,目前Fedora 24 Linux操作系统的研发已经接近尾声,计划将于6月14日正式发布. 据悉,Fedora 24基于Linux 4.5内核,搭载最新GNOME 3.20.Xface 4.12和KDE Plasma 5.6桌面环境,除了数款系统软件和核心组件获得升级外,该系统还预装了LibreOffice 5.1.3和Mozilla Firefox 46.0.1浏览器

linux系统移植流程

linux系统移植流程   "Ctrl" + "+" :放大:"Ctrl" + "-" :缩小:"Ctrl" + "0" :原始大小. linux系统移植流程,布布扣,bubuko.com

0923------APUE 学习笔记----------Linux系统的启动流程

前言: 前天在看APUE的时候突然想到了这个问题,于是给自己科普一下Linux系统的启动流程. 1.加载BIOS 接通电源后,计算机首先加载BIOS(即Basic Input-Output System,该程序被固化在主板上的一个ROM芯片中,包括最基本的输入输出程序.系统设置程序.开机硬件自检程序和系统自举程序等),进行硬件自检(即Power On Self Test)检查计算机硬件是否满足运行的基本条件(对于非严重故障,会发出一些声音,严重故障则会直接退出),硬件自检完成以后,BIOS根据C

[转] 浅谈Linux系统的启动流程

原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件: 1 /boot/grub/grub.conf 2 /etc/inittab 3 /etc/rc5.d(rc.d) 0-99 Seq 4 /etc/passwd (Login,input userna

Ultimus流程化费控系统——直观统计报表,财务管理的好帮手

流程化费控系统——直观统计报表,财务管理的好帮手 财务开支管理直接影响着企业的整体运营,Ultimus流程化费控系统基于平台特色的“流程+报表”模式,结合流程进展中的预算与报销.借款与还款等实时数据明细,按照各角色用户的意愿定制生成报表.同时,为便捷领导层管理和支撑决策,Ultimus流程化费控系统支持数据表格和统计图结合显示,根据查询结果,自动显示统计图,统计图展示直观的预算执行概貌,表格则提供关联的明晰化数据. 1.Ultimus流程化费控系统——费控报表多样式展现系统为使用者提供饼状.柱状

科研论文提交流程与常见问题(EDAS 系统提交)

第一步 注册文章(Registering your Paper) 如上图,点击菜单中的submit paper按钮,会列出所有的会议和期刊,选择一个你要投稿的期刊或者会议,例如选择第一个2013 IEEE CSUDET. 接下来,点击2013 IEEE CSUDET这一排最后一个submit 按钮,填写论文题目,关键字和摘要如下图.然后提交 第二步为论文添加作者(Adding Authors) 按照要求可以输入姓名,邮箱或者ID都行,因为可能存在名字重复,在输入名字后,会显示所有重名的作者,包含