centOS 6启动流程
centOS6启动流程
我们平时使用linux系统,点击电源键,电脑开机到我们输入账号密码直接使用操作系统,其中经过了一列的步骤,那我们在输入账号密码之前,我们的计算机都进行了什么样的操作呢,接下来我们来了解一下linux的启动操作流程。
linux内核组成
Linux内核特点: 
支持模块化:.ko(内核对象) 
如:文件系统,硬件驱动,网络协议等 
支持内核模块的动态装载和卸载
组成部分: 
核心文件:/boot/vmlinuz-VERSION-release 
ramdisk:辅助的伪根系统 
CentOS 5: /boot/initrd-VERSION-release.img 
CentOS 6,7: /boot/initramfs-VERSION-release.img 
模块文件:/lib/modules/VERSION-release
centos6启动大致流程

1.post加电自检
POST(Power-On-Self-Test)加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。 
BIOS(Basic Input and Output System)保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等。 
在加电自检完成后,计算机就会找到引导记录,由引导记录继续开机的进一步操作。
2.Boot Sequence
在计算机真正启动之前,我们的计算机会先确定开机启动项是什么,这个一般在BIOS的boot里面设定的,不同的版本的BIOS设定方式不一样,但是效果都是一样的。一般我们的电脑就是硬盘启动。当计算机这一步执行后,就会找到硬盘中的读取硬盘,先找到的就是0扇区,即前446字节。
3.MBR引导
MBR(Master Boot Record)MBR记录一般是在磁盘0磁道0扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。在加电自检后,就会开始这一部分的内容,从这里开始才是真正的开机引导。 
 计算机不知道我们的系统在哪里,所以需要程序进行引导,这个引导的程序就叫bootloader,不同操作系统的bootloader是不同的,windows使用的bootloader程序是ntloader,只能对windows进行引导不能对其他系统进行引导,而Linux的bootloader叫GRUB,可以对其他操作系统进行引导(包括windows),而MBR前446就属于grub一部分。
4.Grub启动
前面说到,MBR的446字节的东西就是grub的一部分忙也就是说,我们的计算机启动磁盘后会找到grub,我们看看grub文件夹中的内容。 
grub程序主要是由device.map,menu.lst,stage1,stage2,以及一系列的stage1_5组成。 
device.map:存放的是内核文件的根分区 
menu.lis:是grub.conf的链接文件,但是这个名字我觉得更与它的功能接近,就是菜单列表。里卖弄设置了可以选择的内核菜单。存放于stage2中。 
stage:用于grub引导程序过大,所以分2段引导,第一段存放在MBR中,第二段存放于内核文件系统中,第一段引导完成后可以找到第二段。 但是,第二段是存放于内核文件系统中的,此时还没有格式化文件系统,如何可以访问到第二段的 menu.lst 呢?就需要借助于中间层 stage1_5,有它来协助 stage1 段来访问 stage2 段。stage1_5通常位于 stage1 字段后的 63 个扇区。 由于stage2 在内存中存放可以使用的文件系统不确定,所以这就是有多个 stage1_5 的原因了,因为stage1_5会找到伪根系统,伪根系统就像是一个小型的linux,里面有相对用的文件系统,我们可以借助伪根系统来找到我们的真正系统采用的什么文件系统。

initramfs 是以 gzip 压缩的cpio格式的文件。内核启动时将他作为一个临时的根文件系统。 grub 的 stage2 将initrd加载到内存里,让后将其中的内容释放到内容中,内核便去执行init脚本,这时内核将控制权交给了init文件处理。 init它也主要是加载各种存储介质相关的设备驱动程序。当所需的驱动程序加载完后,会创建一个根设备,然后将根文件系统rootfs以只读的方式挂载。这一步结束后,释放未使用的内存,转换到真正的根文件系统上面去,同时运行/sbin/init程序,执行系统的1号进程。此后系统的控制权就全权交给/sbin/init进程了。
制作initramfs文件
有时候我们如果误删除或者其他原因导致initramfs这个文件丢失,我们可以通过命令将其找回,示范如下:
- (1) mkinitrd命令 
 为当前正在使用的内核重新制作ramdisk文件
 mkinitrd/boot/initramfs-$(uname-r).img $(uname-r)
- (2) dracut命令 
 为当前正在使用的内核重新制作ramdisk文件
 dracut/boot/initramfs-$(uname-r).img $(uname-r)
 推荐使用nkinitrd,具有更好的兼容性

grub.conf的参数

- default默认启动的内核title, 0 表示是第一个
- timeout默认等待时间
- splashimage=(hd0,0)/grub/splash.xpm.gz指定菜单的背景图片的路径。为xpm格式,采用gzip压缩,只能为14bits色
- hiddenmenu隐藏菜单
- title标题名,用户可自定义
- root(hd0,0)指定 grub 的根位置- (hd#,#) 
 hd#: 磁盘编号,用数字表示;从0开始编号
 #: 分区编号,用数字表示; 从0开始编号
 (hd0,) 第一块硬盘,第一个分区
- kernel指定 kernel 文件的位置,还要指出 root(系统启动后) 的位置,挂载方式 ro,这项很关键。加载后会启动 init 进程。
- initrd在内核启动过程中装载根文件系统时有用
- password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证
- 生成grub口令 
 grub-md5-crypt
 grub-crypt
[root@CT691 ~]#grub-md5-crypt Password: Retype password: $$s7uSV/$ktCJ6EIbW6ykjEGbN54cH1
cat /proc/cmdline 内核参数 
内核参数文档:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
grub的功能
提供启动菜单、并提供交互式接口
- a:内核参数
- e: 编辑模式,用于编辑菜单
- c: 命令模式,交互式接口

e: 编辑模式,用于编辑菜单 
- b:重新启动
- e:编辑参数
- 使用命令行交互式
- o:在后面插入新行
- O:在之前插入新行
- d:返回上级菜单
c: 命令模式,交互式接口 
在此模式下,我们可以交互式的修改内核参数 
grub的命令行接口
help: 获取帮助列表
help KEYWORD: 详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
我们可以手动在grub命令行接口启动系统
grub> root (hd#,#) grub> kernel /vmlinuz-VERSION-RELEASE roroot=/dev/DEVICE grub> initrd/initramfs-VERSION-RELEASE.img grub> boot
加载用户选择的内核或操作系统
- 允许传递参数给内核
- 可隐藏启动菜单 
 其中的一个应用就是我们可以以此进入单用户模式,修改root密码。
为菜单提供了保护机制
[root@CT691 ~]#grub-md5-crypt Password: Retype password: $$s7uSV/$ktCJ6EIbW6ykjEGbN54cH1
我们将产生的密码加到grub.conf中去: 
然后重新启动一下模式,我们看一下效果: 
加入 grub.conf 文件的位置不同,加密效果也不一样。
- 加入到 title 之前的话,会加密整个菜单。
- 加入到 title 指内的话,会加密对应的操作系统的入口。
进入救援模式(光盘启动),然后直接删除root密码(/etc/passwd下的),空口令直接登录
安装grub
grub-install命令
安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到DIR/boot目录下 
grub-install --root-directory=DIR /dev/DISK 
我们来一个简单的实验: 
第一步删除/boot 
第二步安装内核 
rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force 
第三步安装grub 
第四步配置grub.conf
[root@CT691 grub]#vim grub.conf default= timeout= title centOS (duzhaoqi 6.9) root (hd0,) kernel /vmlinuz-2.6.-.el6.x86_64 root=UUID=51be13b4-c669-480a-82bb-efb9337f9c38 initrd /initramfs-2.6.-.el6.x86_64.img
第五步重启 
grub交互式
grub> root (hd#,#) 
grub> setup (hd#) 
5.启动 init 进程
init 进程是系统启动的第一个进程。其他进程都是有此进程控制fork出来的,也就是说,init是其他进程的“祖先”,PID=1。当然,PID=0进程我们称为空闲进程是属于内核的。 
init作用:
初始运行级别(RUN LEVEL)
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别x初始化X
切换级别:init # 
查看级别:runlevel; who -r
在centOS5 和centOS6上都有init程序,但是已经不是一个东西了,我们来查看一下: 


init进程启动以后,接下来的工作是读取配置和启动服务 
1. 读取配置文件/etc/inittab /etc/init/*.conf 
因为在centOS6中inittab文件中就留下了一行启动级别,其他东西放到了/etc/init/*.conf,所以我们以centOS5的inittab为例讲解内容都是一样的。
# # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # - halt (Do NOT set initdefault to this) # - Single user mode # - Multiuser, without NFS (The same as , if you do not have networking) # - Full multiuser mode # - unused # - X11 # - reboot (Do NOT set initdefault to this) # id::initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0::wait:/etc/rc.d/rc l1::wait:/etc/rc.d/rc l2::wait:/etc/rc.d/rc l3::wait:/etc/rc.d/rc l4::wait:/etc/rc.d/rc l5::wait:/etc/rc.d/rc l6::wait:/etc/rc.d/rc # 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 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 +"Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr::powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels ::respawn:/sbin/mingetty tty1 ::respawn:/sbin/mingetty tty2 ::respawn:/sbin/mingetty tty3 ::respawn:/sbin/mingetty tty4 ::respawn:/sbin/mingetty tty5 ::respawn:/sbin/mingetty tty6 # Run xdm in runlevel x::respawn:/etc/X11/prefdm -nodaemon
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit
si::sysinit:/etc/rc.d/rc.sysinit
读取系统初始化脚本:/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) 清理操作
l0::wait:/etc/rc.d/rc
前面的10就是一格标识,没有啥作用,在上面一行中,我们有七种启动级别,启动不同的启动级别,就会调用不同的脚本,这个就会调用/etc/rc0.d/中的脚本,启动相对用的进程或服务
::respawn:/sbin/mingetty tty1
这就是我们的终端设置,我们可以看到,一共有六个终端,当然,我们也可以手动添加。
6.登录
当配置文件读取完成后,就会给我们显示一个登录窗口,我们就可以通过这个登录窗口登陆上操作系统,进行我们所需要的操作。
centOS 6启动流程的更多相关文章
- Centos 6启动流程详解
		author:JevonWei 版权声明:原创作品 Centos6 启动流程 POST开机自检 当按下电源键后,会启动ROM芯片中的CMOS程序检查CPU.内存等硬件设备是否正常运行,CMOS中的程序 ... 
- CentOS的启动流程
		因6和7俩个系列的启动流程有区别,所以我把他们分开来写 linux可看作是内核和根文件系统组成我们把内核单独拿出来总结一下 CentOS6系列启动流程 首先总结一下总体的流程,接下来展开来叙述:POS ... 
- Centos的启动流程学习
		Centos 6 的启动流程: POST ---> Boot sequence(BOIS) ---> Boot loader (MBR) ---> kernel(ramdiskfs ... 
- CentOS 7 启动流程
		1.UEFI或BIOS初始化,运行POST开机自检 2.选择启动设备,Boot Sequence 系统启动次序一般含有:光驱.U盘.硬盘A.硬盘B.按次序查找各引导设备,第一个有引导程序的设备即为本次 ... 
- Centos7系统详细的启动流程
		熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽然基础,但能帮助我们更加理解Linux系统的工作机制.以下将以CentOS发行版为例来介绍Linux系统的启动流程,因为在CentOS 5. ... 
- Linux操作系统-CentOS6启动流程和服务管理
		Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ... 
- Linux 启动流程及相关知识
		基础知识 linux系统的组成 内核(kerner) 根文件系统(rootfs) 内核提供操作系统的功能,根文件系统包含常用的一些工具,这些工具.这些工具的运行离不开glibc库文件. 程序:二进制程 ... 
- centos启动流程[转]
		启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ... 
- CentOS 6.X启动流程
		CentOS 6.X启动流程 /boot分区 启动引导程序是默认可以识别boot分区的.因此在系统还无法加载硬盘的时候,boot分区是可以识别的! initramfs内存文件系统 CentOS 6.x ... 
随机推荐
- 总结一些php的面试题
			1.PHP语言的一大优势是跨平台,什么是跨平台?一.PHP基础: PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows.Linux等)上配置,不 ... 
- NetBeans主题配色方案加设置.md
			1.网上下载主题的地址是:http://netbeansthemes.com/ **上面的主题我看了下但是感觉不太适合自己所以自己就仿照的设置了下下面我附上自己的配置信息 感兴趣的可以下载下来自己看下 ... 
- 安装mvn,jdk,rocketmq
			附一个rocketmq各语言客户端仓库:https://github.com/apache/incubator-rocketmq-externals,我用go客户端,但是master分支的go没有pr ... 
- 使用Visual Studio 2017开发python,并在iis上部署Python Django
			作为宇宙第一IDE,怎么可以不支持python开发呢? 1.Visual Studio Installer 扩展Python开发 开始菜单中打开Visual Studio Installer,点修改. ... 
- C#学习——简介(第一天)
			一.控制台输出 在控制台输出: console.writeline(); console.readkey(); 加上后面一句是为了保证弹窗不会一闪而过. 二.注释 1.单行注释: //int a=90 ... 
- JavaWeb王者归来学习笔记
			JavaWeb王者归来学习笔记... Ajax王者归来: Ajax:Asynchronous JavaScript And XML -------Ajax 是一些旧有技术的结合.但却以一种新的姿态.披 ... 
- 【Linux】用yum安装JDK(转)
			1.查看yum库中都有哪些jdk版本(暂时只发现了openjdk) [root@localhost ~]# yum search java|grep jdk ldapjdk-javadoc.x86_6 ... 
- Struts2文件下载中文名乱码
			Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱 ... 
- [2013-03-14]使用wiki维护产品文档
			word文档作为产品文档的问题: word文档本身的设计是为了打印: word文档的编辑较为繁琐: 作为产品文档的word文档往往长达百页以上,难以维护,且容易分散注意力,不利于查阅: 没有一个简单易 ... 
- HK2使用详解
			HK2介绍 组件 生命周期 定义服务 注入服务 HK2介绍 HK2是一个轻量级动态依赖注入框架,它是JSR-330的实现. 组件 在HK2组件模型中,一个组件的功能是通过服务接口-服务实现的模式声明的 ... 
