CentOS 6的系统启动流程
一、POST加电自检
按下电源后ROM芯片中的CMOS程序执行并检测CPU、内存等设备是否存在并正常运行,CMOS中的程序叫BIOS,可以设置硬盘接口,网卡声卡开关之类的简单设置。一般PC机主板上有一个纽扣电池,这个电池就是给ROM供电的,可以保证主板断电后BIOS的一些基本设置不会重置。
下面是一个比较新的主板的BIOS,在老主板上一般只有英文不会有中文界面,老式主板只支持键盘操作不支持鼠标,现在很多新主板已经可以支持鼠标操作了。
二、引导加载次序Boot Sequence
在系统启动前计算机是不知道你系统在哪里的,需要按照设备启动顺序一次查找引导加载器器bootloader,这个查找次序可以自己在BIOS中设定,一般在boot选项中设置,【注意】不同厂商不同版本的主板设置方法是不同的,请以厂商的官方说明为准。
三、引导加载器bootloader
前面说了系计算机是不知道系统在哪里的,所以需要程序进行引导,这个引导的程序就叫bootloader,不同操作系统的bootloader是不同的,windows使用的bootloader程序是ntloader,只能对windows进行引导不能对其他系统进行引导,而Linux的bootloader叫GRUB,可以对其他操作系统进行引导(包括windows),正是因为这样,所以在装既有Windows又有Linux的双系统的时候,需要先装Windows,再装Linux。
功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。
bootloader的引导程序GRUB放在MBR中。
四、引导加载器程序GRUB
1、grub legacy
前面提到GRUB是bootloader阶段的一个程序,这是Centos中最常用的引导程序,CentOS 6安装的是grub legacy
下面是CentOS 6的grub legacy
按e:进入编辑模式,用于编辑菜单;
然后按c: 进入命令模式,交互式接口;
常用的命令有
#help: 获取帮助列表
#help KEYWORD: 详细帮助信息
#find (hd#,#)/PATH/TO/SOMEFILE:
#root (hd#,#)设定grub的根设备
#kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
#例如:init=/path/to/init, selinux=0
#initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;
#boot: 引导启动选定的内核;
CentOS 6中grub的配置文件保存在/boot/grub/grub.conf中
vim grub.conf
# 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/mapper/VolGroup-lv_root
# 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=
/dev/mapper/VolGroup-lv_root
rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup
/lv_swap
crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup
/lv_root
KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd
/initramfs-2
.6.32-431.el6.x86_64.img
其中常用的配置
default=
#: 设定默认启动的菜单项;落单项(title)编号从0开始;
timeout=
#:指定菜单项等待选项选择的时长;
splashimage=(hd
#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddenmenu:隐藏菜单;
password [--md5] STRING: 菜单编辑认证;
title TITLE:定义菜单项“标题”, 可出现多次;
root (hd
#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
kernel
/PATH/TO/VMLINUZ_FILE
[PARAMETERS]:启动的内核
initrd
/PATH/TO/INITRAMFS_FILE
: 内核匹配的ramfs文件;
password --md5 STRING: 启动选定的内核或操作系统时进行认证;
2、GRUB2
CentOS 7上安装的是gurb2
[root@localhost ~]
# rpm -q grub2
grub2-2.02-0.34.el7.centos.x86_64
按e进入GRUB编辑
按ctrl+c进入命令行模式
常用的命令行命令有下面这些:
1. help
查看命令用法,显示所有可用命令
help search
search 命令用法
2.
ls
列出当前的所有设备。如 (hd0) (hd0,1) (hd0,5) (hd1) (hd1,1) (hd1,2) .......
ls
-l
详细列出当前的所有设备。对于分区,会显示其label及uuid。
ls
/
列出当前设为root的分区下的文件
ls
(hd1,1)/
列出(hd1,1)分区下文件
3. search
search -f
/ntldr
列出根目录里包含ntldr文件的分区,返回为分区号
search -l LINUX
搜索label是LINUX的分区。
search --
set
-f
/ntldr
搜索根目录包含ntldr文件的分区并设为root,注意如果多外分区含有ntldr文件,
set
失去作用
4. loopback
loopback命令可用于建立回放设备,如
loopback lo0 (hd1,1)
/abc
.iso
可以使用lo0设备来访问abc.iso里的内容,比如说,可以从abc.iso里的软盘映像中启动
loopback lo0 (hd1,1)
/aa
.iso
linux (lo0)
/memdisk
initrd (lo0)
/abc
.img
要删除某一回放设备,可以使用-d参数:
loopback -d lo0
5.
set
使用
set
可以设置变量的值
set
root=
set
timeout=
需要调用变量的值时,使用${AA},如
set
root=(hd1,1)
则${root}=(hd1,1)
6. pager
分页显示。
set
pager=1
满页时暂停,按space继续
set
pager=0
取消分页
7. linux
linux取代grub中的kernel
CentOS 7的/boot/grub2/grub.conf官方建议是不要随便修改的,一般都是在grub.d文件下生成新的启动目录,再重新生成
默认启动的修改可通过/boot/grub2/grubenv文件修改
[root@localhost grub2]
# vim grubenv
# GRUB Environment Block
saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
#########################################################
[root@localhost grub.d]
# ls
00_header 01_users 20_linux_xen 30_os-prober 41_custom
00_tuned 10_linux 20_ppc_terminfo 40_custom README
[root@localhost grub.d]
# cat README
All executable files
in
this directory are processed
in
shell expansion order.
00_*: Reserved
for
00_header.
10_*: Native boot entries.
20_*: Third party apps (e.g. memtest86+).
The number namespace
in
-between is configurable by system installer and
/or
administrator. For example, you can add an entry to boot another OS as
01_otheros, 11_otheros, etc, depending on the position you want it to occupy
in
the menu; and
then
adjust the default setting via
/etc/default/grub
.
#00 _ *:为00 _header保留
#10 _ *:本机引导条目
#20 _ *:第三方应用程序(例如memtest86)
五、进入kernel
在GRUB中选择对应的kernel进入,然后kernel会对自身进行初始化
探测可识别到的所有硬件设备。
加载硬件驱动程序。
以只读方式挂载根文件系统。
运行用户空间的第一个应用程序,在CentOS 6上是init,在CentOS 7上是Systemd
内核组成部分:
kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE;
kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/
六、运行init
CentOS 6上init所在的位置是在/sbin/init,init共分为7个级别
#0:关机
#1:单用户模式(root, 无须登录), single, 维护模式;
#2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式;
#3:多用户模式,正常模式;文本界面;
#4:预留级别;可同3级别;
#5:多用户模式,正常模式;图形界面;
#6:重启
[root@localhost sbin]
# runlevel
N 5
[root@localhost sbin]
# who -r
运行级别 5 2016-04-10 18:25
[root@localhost sbin]
# vim /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
:5:initdefault:
#这里定义的默认运行级别为5
配置文件中的格式是:id:runlevel:action:process
此配置文件每行定义一个级别
id
:指入口标识符,它是一个字符串,对于getty或mingetty等其他login程序项,要求
id
与
tty
的编号相同,否则getty程序将不能正常工作。
runlevel:init的系统运行级别
action:是用来定义后面process的运行方式,常用的有下面几种
wait: 切换至此级别运行一次;
respawn:此process终止,就重新启动之;
initdefault:设定默认运行级别;process省略;
sysinit:设定系统初始化方式,此处一般为指定
/etc/rc
.d
/rc
.sysinit
process:为具体的执行程序,
例如设置为l0:5:wait:/etc/rc.d/rc 5
/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc /rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些链接文件,而不是真正的rc 启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的链接文件。
#K开头的文件:运行次序是数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;关闭服务。
#S开头的文件:运行次序是数字越小,越先运行;数字越小的服务,通常为被依赖到的服务;启动服务。
[root@localhost rc5.d]
# pwd
/etc/rc
.d
/rc5
.d
七、运行系统初始化脚本
系统初始化脚本对应的文件是/etc/rc.d/rc.sysinit
大概就是这个样子,因为太长,省略了很多
八、启动系统服务
centos6下的系统服务脚本都放在/etc/rc.d/init.d或者/etc/init.d中,可以看到两个文件中的内容是一样的,因为/etc/init.d链接到了/etc/rc.d/init.d中
通过chkconfig命令可以查看什么系统级别下开启了哪些服务,以及添加服务到系统中并在指定级别下启动
查看chkconfig --list
添加chkconfig --add 服务名,在添加的时候需要将对应的服务放入/etc/init.d中,并在服务脚本中加入chkconfig: LLLL nn nn
写到LLLL的init级别就是S的,没写得就是K的,第一个nn代表S的数字,第二个nn代表K的数字
[root@localhost init.d]# chkconfig --add httpd
删除chkconfig --del 服务名
[root@localhost init.d]
# chkconfig --del httpd
【注意】:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中。
九、打印登录提示符
系统在启动完服务后会打印登录提示符,然后输入账号密码,进入对应的命令行界面或图形界面。
十、总结
系统的启动流程总的来说分成以下几个步骤:
1、加电自检
2、按照BIOS中设置的Boot Sequence查找有bootloader程序的设备
3、加载MBR中的bootloader程序GRUB
4、进入GRUB设置的默认kernel
5、kernel初始化
6、运行init程序
7、运行系统初始化脚本
8、启动对应服务
9、打印登录提示符
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xsllqs.blog.51cto.com/2308669/1762422
CentOS 6的系统启动流程的更多相关文章
- (转)CentOS系统启动流程图文详解
CentOS系统启动流程图文详解. 原文:http://www.linuxidc.com/Linux/2017-03/141966.htm 熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽 ...
- CentOS系统启动流程
CentOS系统启动流程 POST --> Boot Sequence(BIOS) --> Boot Loader(MBR) --> kernel(ramdisk) --> r ...
- CentOS系统启动流程你懂否
一.Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序. IPC(Inter-Process Communicati ...
- Linux:Day13(上) CentOS系统启动流程
CentOS 5和6的启动流程 Linux:kernel+rootfs kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: glibc 库:函数集合,functi ...
- 13.1 CentOS系统启动流程介绍
CentOS系统启动流程介绍 本章我们将学习 Linux 启动流程和内核模块管理相关的内容.通过本章我们将学习如下内容: Linux 系统的组成及特点 CentOS 系统的启动流程 开机启动成 gru ...
- Linux系统启动流程及安装命令行版本
Debian安装 之前也安装过很多次linux不同版本的系统,但安装后都是直接带有桌面开发环境的版本,直接可以使用,正好最近项目不是很忙,想一直了解下Linux的整个启动流程,以及如何从命令行模式系统 ...
- Linux第八讲随笔 -tar / 系统启动流程
linux 第八讲1.tar 参考 作用:压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的. 语法:tar[必要参数][选择参数][文件] 参数:必要参数有如下: -A 新增压缩文件到 ...
- CentOS 6.X启动流程
CentOS 6.X启动流程 /boot分区 启动引导程序是默认可以识别boot分区的.因此在系统还无法加载硬盘的时候,boot分区是可以识别的! initramfs内存文件系统 CentOS 6.x ...
- 20190411RAID磁盘阵列及CentOS7系统启动流程
RAID磁盘阵列及CentOS7系统启动流程(week2_day3) RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构 ...
随机推荐
- 【C/C++开发】循环中使用递减计数与递增计数的效率区别
有两个循环语句: 复制代码代码如下: for(i = n; i > 0; i--) { - } for(i = 0; i < n; i++) { - } 为什么前者比后者快 ...
- TCP和SSL TCP应用
TCP和SSL TCP应用 对于普通开发者而言编写TCP应用通讯是一件相对复杂的工作,毕竟需要一系列的bytes操作:如果再针对SSL的安全性处理相信会把很多普通开发者拒之门外.为了简化这一问题Bee ...
- springboot_redis
1.引入redis的启动器 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- subquery 子查询
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum ...
- HTML(上)
目录 HTML(上) 浏览器 HTML 什么是HTML HTML的作用 编写HTML的规范 HTML结构 HTML常用标签 HTML标签速记 HTML(上) 浏览器 浏览器也是一个客户端 #这是一个服 ...
- ps -ef
status, msg = commands.getstatusoutput("ps -ef | grep start.sh | grep -Fv grep | awk '{print $1 ...
- The Digits String
https://ac.nowcoder.com/acm/contest/338/L 题解: 当n==1时,0-9填上的话,对4取余,分别是余数为0的3个,1的3个,2的2个,3的2个: 当n==2时, ...
- 枚举类型C语言规律用法总结
注:以下全部代码的执行环境为VC++ 6.0 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON 1#define ...
- 使用.NET Core创建Windows服务(一) - 使用官方推荐方式
原文:使用.NET Core创建Windows服务(一) - 使用官方推荐方式 原文:Creating Windows Services In .NET Core – Part 1 – The &qu ...
- pycharm设置用滑轮改变字体大小
在电脑第一次安装pycharm之后,发现每次调整代码界面的字体,总是需要到setting里面调整,这样非常不方便,特别是对于代码量很多的时候,我们有时候需要把目光聚焦到某一句代码,这个时候就需要放大, ...